HarmonyOS 鸿蒙Next webview加载网页使用到webrtc时多媒体获取失败

HarmonyOS 鸿蒙Next webview加载网页使用到webrtc时多媒体获取失败

webview加载网页使用到webrtc,相机和麦克风授权后,调用navigator.mediaDevices.getUserMedia()方法获取多媒体设备报错

错误nameNotReadableError

错误messageDOMException: Could not start video source,去掉相机调用正常。  

再查看系统设置的“隐私和安全”,相机和麦克风都没有访问记录。

个人猜测虽然程序申请权限且用户已经授权了,但实际系统是没有给权限。 

测试代码

webviewController: web_webview.WebviewController = new web_webview.WebviewController();
Web({
src: ‘xxxx’,
controller: this.webviewController
}).onPermissionRequest((event) => {
if (event) { // 获取网页所请求的权限资源列表
const arr = event.request.getAccessibleResource()
let message = ‘’
arr.forEach(item => {
console.log(item)
if (item == ‘TYPE_VIDEO_CAPTURE’) {
message += ‘视频捕获资源,例如相机。\n’
} else if (item == ‘TYPE_AUDIO_CAPTURE’) {
message += ‘音频捕获资源,例如麦克风。\n’
}
})
AlertDialog.show({
title: ‘权限申请’,
message: message,
primaryButton: {
value: ‘拒绝’,
action: () => { // 拒绝网页所请求的权限
event.request.deny()
}
},
secondaryButton: {
value: ‘授权’,
action: () => { // 对网页访问的给定权限进行授权。 
event.request.grant(arr)
}
},
cancel: () => { // 拒绝网页所请求的权限
event.request.deny()
}
})
}
}) 

有人能帮忙看下吗?


更多关于HarmonyOS 鸿蒙Next webview加载网页使用到webrtc时多媒体获取失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
Web组件可以通过W3C标准协议接口拉起摄像头和麦克风。在使用该功能时,需配置"ohos.permission.CAMERA"、"ohos.permission.MICROPHONE"权限。

权限配置了吗

相关文档:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/web-rtc-V13

这边使用您提供的工程源代码复现了您所描述的问题,问题出在权限申请上。

ohos.permission.CAMERA和ohos.permission.MICROPHONE的授权方式是user_grant,该类型权限不仅需要在安装包中申请权限,还需要在应用动态运行时,通过发送弹窗的方式请求用户授权。在用户手动允许授权后,应用才会真正获取相应权限,从而成功访问操作目标对象。

针对您的源码做了如下修改,修改后功能验证OK。您可以参照如下修改进行验证。

aboutToAppear(){
    hilog.info(0x0000, 'testTag', '%{public}s', 'aboutToAppear');
    // 配置Web开启调试模式
    web_webview.WebviewController.setWebDebuggingAccess(true);
    web_webview.WebviewController.setWebDebuggingAccess(true);
    let atManager = abilityAccessCtrl.createAtManager();
    atManager.requestPermissionsFromUser(getContext(this), ['ohos.permission.CAMERA', 'ohos.permission.MICROPHONE'])
      .then(data => {
        let result: Array<number> = data.authResults;
        let hasPermissions1 = true;
        result.forEach(item => {
          if (item === -1) {
            hasPermissions1 = false;
          }
        })
        if (hasPermissions1) {
          console.info("hasPermissions1")
        } else {
          console.info(" not hasPermissions1")
        }
      }).catch(() => {
      return;
    });
  }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

更多关于HarmonyOS 鸿蒙Next webview加载网页使用到webrtc时多媒体获取失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,当使用webview加载网页并涉及到WebRTC(Web Real-Time Communication)功能时,如果遇到多媒体获取失败的问题,这通常与权限配置、系统兼容性或webview的特定实现有关。

首先,确保你的应用已经正确配置了必要的权限,包括相机、麦克风等多媒体权限。在鸿蒙系统的manifest文件中,这些权限需要被明确声明。

其次,检查webview的兼容性和实现。鸿蒙系统的webview可能与标准Android或iOS的webview存在差异,特别是在处理WebRTC等高级功能时。确保你使用的webview版本支持WebRTC,并且已经针对鸿蒙系统进行了优化。

此外,还需要考虑系统级的多媒体管理策略。鸿蒙系统可能有自己的多媒体管理框架,需要确保你的应用正确集成了这些框架,并且能够正确调用它们来获取多媒体资源。

如果上述步骤都确认无误,但问题依旧存在,可能是由于webview或WebRTC在鸿蒙系统中的特定bug或限制导致的。此时,建议直接联系鸿蒙系统的开发者支持或查看官方文档以获取更具体的解决方案。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部