• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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