1# 媒体开发常见问题 2 3## 使用XComponent组件显示相机的预览输出流时,如何获取相机的帧数据 4 5适用于:OpenHarmony 3.2 版本 API 9 Stage模型 6 7**问题现象** 8 9目前接口不支持实时预览相机的帧数据,只能绑定一个动作来获取,比如拍照动作。 10 11**解决措施** 12 13通过创建双路预览来实现。 14 151. Xcomponent来创建预览流。 16 17 ``` 18 // 获取PreviewOutput(预览输出类)实例 19 const surfaceId = globalThis.mxXComponentController.getXComponentSurfaceld(); 20 this.mPreviewOutput = await Camera.createPreviewOutput(surfaceld) ; 21 ``` 22 232. 使用imageReceiver来监听图像信息。 24 25 ``` 26 // 添加双路预览 27 const fullWidth = this.mFullScreenSize.width; 28 const fullHeight = this.mFullScreenSize.height; 29 const imageReceiver = await image.createImageReceiver(fullwidth, fullHeight, 30 formatImage, capacityImage) ; 31 const photoSurfaceId = await imageReceiver.getReceivingSurfaceld(); 32 this.mPreviewOutputDouble = await Camera.createPreviewOutput ( photoSurfaceld) 33 ``` 34 35 36## 如何获取前置摄像头的预览图像 37 38适用于:OpenHarmony 3.2版本 API 9 Stage模型 39 40**解决措施** 41 421. 使用系统相机框架@ohos.multimedia.camera获取物理摄像头信息。 43 44 ``` 45 let cameraManager = await camera.getCameraManager(context); 46 let camerasInfo = await cameraManager.getSupportedCameras(); 47 let cameraDevice = this.camerasInfo[0]; 48 ``` 49 502. 创建并启动物理摄像头输入流通道。 51 52 ``` 53 let cameraInput = await cameraManager.createCameraInput(cameraDevice); 54 await this.cameraInput.open(); 55 ``` 56 573. 拿到物理摄像头信息查询摄像头支持预览流支持的输出格式,结合XComponent提供的surfaceId创建预览输出通道。 58 59 ``` 60 let outputCapability = await this.cameraManager.getSupportedOutputCapability(cameraDevice); 61 let previewProfile = this.outputCapability.previewProfiles[0]; 62 let previewOutput = await cameraManager.createPreviewOutput(previewProfile, previewId); 63 ``` 64 654. 创建相机会话,在会话中添加摄像头输入流和预览输出流,然后启动会话,预览画面就会在XComponent组件上送显。 66 67 ``` 68 let captureSession = await cameraManager.createCaptureSession(); 69 await captureSession.beginConfig(); 70 await captureSession.addInput(cameraInput); 71 await captureSession.addOutput(previewOutput); 72 await this.captureSession.commitConfig() 73 await this.captureSession.start(); 74 ``` 75 76 77## 如何设置相机焦距 78 79适用于:OpenHarmony 3.2版本 API 9 Stage模型 80 81**解决措施** 82 831. 判断当前摄像头是否为前置摄像头,前置摄像头不支持设置焦距。 842. 通过captureSession.getZoomRatioRange\(\)接口获取设备焦距设置支持的最大、最小范围。 853. 判断目标焦距参数大小是否在步骤二获取的范围内,然后通过captureSession.setZoomRatio\(\)接口设置相机焦距。 86 87## 如何后台播放音乐 88 89适用于:OpenHarmony 3.2版本 API 9 Stage模型 90 91**问题现象** 92 93无法后台播放音乐。 94 95**解决措施** 96 97AVSession对媒体播放做了管控,当三方应用从前台切入后台或者进入锁屏状态,媒体播放会被强制暂停而应用不感知,如果要开发后台播放功能,应该启动后台任务管理的长时任务中播放音乐,同时接入AVSession能力,允许控制中心的播控面板控制三方应用的播放功能。 98 99**参考链接** 100 101[后台任务管理的长时任务开发指导参考](../task-management/continuous-task-dev-guide.md) 102 103[AVSession开发指导参考](../media/using-avsession-developer.md) 104 105 106## 创建多个视频组件无法播放 107 108适用于:OpenHarmony 3.2版本 API 9 Stage模型 109 110**问题现象** 111 112创建十几个视频组件无法播放甚至崩溃。 113 114**解决措施** 115 116当前限制最多创建13个媒体播放实例。 117 118 119## 如何直接调起图片库 120 121适用于:OpenHarmony 3.2版本 API 9 Stage模型 122 123**解决措施** 124 125``` 126let want = { 127 bundleName: 'com.ohos.photos', 128 abilityName: 'com.ohos.photos.MainAbility', 129 parameters: { 130 uri: 'detail' 131 } 132}; 133let context = getContext(this) as common.UIAbilityContext; 134context.startAbility(want); 135``` 136 137