1***@qq.com
1***@qq.com
  • 发布:2026-08-20 14:15
  • 更新:2026-08-20 14:16
  • 阅读:22

【报Bug】uni-app WebView 中调用 getUserMedia 录制视频失败

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: 11.7.8

HBuilderX类型: 正式

HBuilderX版本号: 5.24

手机系统: Android

手机系统版本号: Android 14

手机厂商: 小米

手机机型: Redmi Note 13

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:

uniapp webView内嵌网页调用代码

navigator.mediaDevices.getUserMedia({  
          video: true,  
          audio: false  
        })  

预期结果:

正常返回

实际结果:

调用方法catch

bug描述:

问题描述:uni-app WebView 中调用 getUserMedia 录制视频失败
一、问题现象
在 uni-app 的 WebView 中嵌入 H5 页面,尝试调用 navigator.mediaDevices.getUserMedia 录制视频时,出现以下现象:

错误信息:NotReadableError: Could not start audio source

表现:摄像头和麦克风权限已由 App 授予,但 WebView 中的 H5 页面无法启动音视频流,最终回退到原生录制方案。

环境:

设备:小米手机(Android 14,Chrome WebView 140.0.7339.207)

框架:uni-app(App端),H5页面通过 web-view 组件加载

协议:HTTPS(已满足安全要求)

二、排查过程
权限检查:

App 层面已通过 plus.android.requestPermissions 成功获取 CAMERA 和 RECORD_AUDIO 权限。

H5 页面通过 navigator.permissions.query 查询,权限状态为 granted。

结论:权限问题已排除。

环境检查:

页面通过 HTTPS 加载,非 file:// 协议。

navigator.mediaDevices 及 getUserMedia 方法均存在。

结论:WebView 环境正常。

资源释放检查:

已实现完整的 releaseMediaResources 方法,在每次调用 getUserMedia 前释放所有媒体轨道和视频元素。

结论:资源占用问题已排除。

错误捕获:

标准 API navigator.mediaDevices.getUserMedia 持续返回 NotReadableError。

回退到 navigator.getUserMedia 同样失败。

多次重试(含强制释放摄像头)均无效。

2026-08-20 14:15 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

针对您提交的 Bug 反馈,以下是基于 DCloud 官方视角的评审与分析:

1. Bug 反馈内容完整性分析

  • BUG 描述:描述非常详细,包含了问题现象、环境信息、排查过程和错误捕获。排查逻辑清晰,能够帮助官方人员快速理解问题背景并排除常见的权限、环境与资源占用问题。
  • 代码示例:提供的代码片段仅为内嵌网页中的 getUserMedia 调用方法,缺少完整的 uni-app 端工程结构(如 web-view 组件的页面代码、manifest.json 中的权限配置、App 端申请权限的代码逻辑)。官方人员无法直接运行复现,需要您补充一个可直接运行的最小化复现 demo。
  • 复现步骤:复现步骤描述较为简单,仅说明了调用代码。建议补充具体的操作路径(例如如何触发该代码、是否在页面加载时或特定按钮点击时触发),以便官方人员准确复现。
  • 预期结果与实际结果:预期结果“正常返回”合理;实际结果“调用方法 catch”符合报错现象,结合描述中的 NotReadableError,可以判断这不是误报。
  • 分类信息:分类信息完整,包含了开发环境、HBuilderX 版本、手机系统与机型、Vue 版本等关键信息。
  • 附件说明:由于当前系统限制,我无法识别和查看附件内容。如果您有日志文件或截图,请在文字描述中直接提供关键信息。

2. Bug 是否成立及替代方案

结合知识库与社区历史对话,该 Bug 反馈的现象成立,但大概率属于 Android 系统对 WebView 权限要求导致的配置或环境问题,而非 uni-app 框架本身的缺陷。

根据 ask 社区知识库 中的官方回复与开发者实践,在 App 端 WebView 中调用 getUserMedia 录音或录像报 NotReadableError: Could not start audio source,通常有以下原因及替代方案:

  1. Android 权限配置不完整
    仅在代码中通过 plus.android.requestPermissions 申请 RECORD_AUDIO 权限可能不够。官方人员指出,必须在 manifest.json 中配置该权限才能正常申请。此外,有开发者反馈,除了 android.permission.RECORD_AUDIO,还需要在 manifest.json 中添加 android.permission.MODIFY_AUDIO_SETTINGS 权限才能解决此报错。

  2. 标准基座与自定义基座差异
    社区反馈中提到,使用 HBuilderX 标准基座时往往不会报错,而使用自定义基座或云打包正式版时会报错。这通常与自定义基座打包时遗漏了权限模块或权限配置有关。建议检查自定义基座对应的权限配置是否完整。

  3. 替代方案建议
    如果在 WebView 中始终无法稳定调起音视频流,建议放弃在 H5 中使用 getUserMedia,改用 uni-app 原生能力或原生插件。例如:

    • 使用 uni-app 内置的 uni.getRecorderManager 进行录音。
    • 使用 live-pusher 组件进行音视频推流。
    • 前往 插件市场 搜索基于 nvue 或原生封装的音视频录制插件,通过原生层调用摄像头和麦克风,避免 WebView 的兼容性问题。

建议您先检查 manifest.json 中的 MODIFY_AUDIO_SETTINGS 权限配置,若问题仍存在,可补充完整的最小化复现 demo 以便进一步排查。

内容为 AI 生成,仅供参考

要回复问题请先登录注册