鸿蒙Next中getUserMedia API如何使用

在鸿蒙Next系统中使用getUserMedia API时,具体应该如何调用?需要哪些权限配置?是否有示例代码可以参考?另外,这个API是否支持访问摄像头和麦克风,以及在鸿蒙Next中是否存在兼容性差异?

2 回复

鸿蒙Next里用getUserMedia?简单!先申请权限,再调用API:

let mgr = media.createMediaRecorder();
mgr.getInputSurface().then(surface => {
  // 拿到视频流啦!
});

记得在config.json里加ohos.permission.CAMERA权限哦~(鸿蒙:这波操作我熟!)

更多关于鸿蒙Next中getUserMedia API如何使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next中,getUserMedia API 用于从设备摄像头或麦克风获取媒体流(音频/视频)。以下是基本使用方法:

1. 权限配置

module.json5 文件中添加必要权限:

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.CAMERA",
        "reason": "$string:reason_desc"
      },
      {
        "name": "ohos.permission.MICROPHONE",
        "reason": "$string:reason_desc"
      }
    ]
  }
}

2. 动态权限申请

在代码中动态申请权限:

import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
import { BusinessError } from '@ohos.base';

let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
try {
  atManager.requestPermissionsFromUser(this.context, ['ohos.permission.CAMERA', 'ohos.permission.MICROPHONE']).then((data) => {
    console.log('权限申请结果:', JSON.stringify(data));
  }).catch((err: BusinessError) => {
    console.error('权限申请失败:', err.code);
  });
} catch (err) {
  console.error('权限申请异常:', (err as BusinessError).code);
}

3. 调用 getUserMedia

import media from '@ohos.multimedia.media';

let constraints: media.MediaStreamConstraints = {
  audio: true,  // 请求音频
  video: {      // 请求视频
    width: 1280,
    height: 720,
    frameRate: 30
  }
};

media.createAVRecorder().getUserMedia(constraints)
  .then((stream: media.MediaStream) => {
    console.log('获取媒体流成功');
    // 处理媒体流,例如显示视频预览
    let videoTrack = stream.getVideoTracks()[0];
    // 将视频流绑定到<XComponent>显示
  })
  .catch((error: BusinessError) => {
    console.error('获取媒体流失败:', error.message);
  });

4. 显示视频预览

在 ArkTS 中使用 XComponent 显示视频:

// 在build()中
XComponent({
  id: 'videoPreview',
  type: 'surface',
  controller: this.xComponentController
})
  .onLoad(() => {
    // 将MediaStream绑定到XComponent
    let surfaceId = this.xComponentController.getXComponentSurfaceId();
    // 通过Video组件或自定义方式渲染
  })

注意事项:

  • 确保在真机上测试(模拟器可能不支持)
  • 检查设备硬件支持情况
  • 使用后及时释放资源:stream.getTracks().forEach(track => track.stop())

完整示例可参考鸿蒙官方文档:媒体系统服务

回到顶部