1# 媒体开发常见问题 2 3## 如何设置前置拍照 4 5适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 6 71. 设置相机位置camera.CameraPosition.CAMERA_POSITION_FRONT 8 92. 根据相机位置和类型创建CameraInput实例 10 11参考文档:[相机管理](../reference/apis/js-apis-camera.md) 12 13示例: 14 15``` 16//默认设置后置相机,通过设置isFrontCamera来切换相机 17let cameraId 18let cameraInput 19for(let cameraIndex = 0; cameraIndex < this.cameraArray.length; cameraIndex++) { 20 let faceType = this.cameraArray[cameraIndex].cameraPosition 21 switch(faceType) { 22 case camera.CameraPosition.CAMERA_POSITION_FRONT://前置相机 23 if(this.isFrontCamera){ 24 cameraId = this.cameraArray[cameraIndex].cameraId 25 } 26 break 27 case camera.CameraPosition.CAMERA_POSITION_BACK://后置相机 28 if(!this.isFrontCamera){ 29 cameraId = this.cameraArray[cameraIndex].cameraId 30 } 31 break 32 case camera.CameraPosition.CAMERA_POSITION_UNSPECIFIED: 33 default: 34 break 35 } 36} 37cameraInput = await this.cameraManager.createCameraInput(cameraId) 38``` 39 40## 如何进行图片剪切 41 42适用于:OpenHarmony 3.2.5.6版本,API9 Stage模型 43 441. **通过传入的uri创建图片源实例ImageSource对象。** 45 46 ``` 47 let path = this.context.getApplicationContext().fileDirs + "test.jpg"; 48 const imageSourceApi = image.createImageSource(path); 49 ``` 50 512. **设置解码参数,通过图片解码获取PixelMap图像对象,解码过程中同时支持图像处理操作。** 52 - 设置desiredSize支持按尺寸缩放,如果设置为全0,则不进行缩放。 53 - 设置desiredRegion支持按矩形区域裁剪,如果设置为全0,则不进行裁剪。 54 - 设置rotateDegrees支持旋转角度,以图像中心点顺时针旋转。 55 56 ``` 57 const decodingOptions = { 58 desiredSize: { 59 height:0, 60 width:0 61 }, 62 //按矩形区域裁剪 63 desiredRegion: { 64 size: { 65 height:100, 66 width:100 67 }, 68 x:0, 69 y:0 70 }, 71 //旋转90度 72 rotate:90 73 } 74 imageSourceApi.createPixelMap(decodingOptions).then(pixelMap => { 75 this.handlePixelMap(pixelMap) 76 }) 77 ``` 78 793. 解码完成获取到PixelMap对象后,可以进行后续处理,比如渲染显示等。 80 81## 如何申请设备上的媒体读写权限 82 83适用于:OpenHarmonySDK 3.2.5.5版本,API9 Stage模型 84 851. 在module.json5配置文件中配置媒体读写权限ohos.permission.READ_MEDIA和ohos.permission.WRITE_MEDIA。 86 示例: 87 88 89 ``` 90 { 91 "module" : { 92 "requestPermissions":[ 93 { 94 "name" : "ohos.permission.READ_MEDIA", 95 "reason": "$string:reason" 96 }, 97 { 98 "name" : "ohos.permission.WRITE_MEDIA", 99 "reason": "$string:reason" 100 } 101 ] 102 } 103 } 104 ``` 105 1062. 这两个权限的授权方式均为user_grant,因此需要调用requestPermissionsFromUser接口,以动态弹窗的方式向用户申请授权。 107 108 ``` 109 import abilityAccessCtrl from '@ohos.abilityAccessCtrl.d.ts'; 110 111 let permissions: Array<string> = ['ohos.permission.READ_MEDIA','ohos.permission.WRITE_MEDIA'] 112 let atManager = abilityAccessCtrl.createAtManager(); 113 // context为调用方UIAbility的AbilityContext 114 atManager.requestPermissionsFromUser(context, permissions).then((data) => { 115 console.log("Succeed to request permission from user with data: " + JSON.stringify(data)) 116 }).catch((error) => { 117 console.log("Failed to request permission from user with error: " + JSON.stringify(error)) 118 }) 119 ``` 120 121## MP4格式的视频为什么播放不了 122 123适用于:OpenHarmonySDK 3.2.7.5版本,API9 Stage模型 124 125暂不支持h.265编码格式的MP4视频播放。 126 127 128## 为什么视频创建至十几个时新创建的视频无法播放甚至崩溃 129 130适用于:OpenHarmonySDK 3.2.7.5版本,API9 Stage模型 131 132当前限制最多创建13个媒体播放实例。 133