navigator.getUserMedia在安卓Chrome端运行失败提示无法启动视频源如何解决
排查步骤
- 先校验设备/模拟器的相机权限与配置
安卓系统层面先确认Chrome已获得相机、麦克风权限,路径为:系统设置→应用管理→Chrome→权限管理,确保两个权限均设为允许。
如果你用的是安卓模拟器,额外检查模拟器本身的相机配置:夜神模拟器需进入设置→高级设置→相机设置,选择「使用电脑摄像头」;蓝叠模拟器需进入设置→设备→相机,打开相机启用开关,多数模拟器默认禁用相机硬件模拟,未开启的情况下调用直接会触发该报错。 - 调整getUserMedia的视频约束参数
安卓端Chrome对视频参数的兼容性比桌面端差,你当前未指定视频约束参数,部分设备会默认尝试调用最高分辨率摄像头,硬件不支持的情况下就会报错。可以修改代码增加参数限制:ngOnInit() { const mediaConstraints = { audio: true, video: { width: { ideal: 1280, max: 1920 }, height: { ideal: 720, max: 1080 }, facingMode: 'user' // 优先调用前置摄像头,避免部分设备后置摄像头适配问题 } }; if (navigator.mediaDevices?.getUserMedia) { navigator.mediaDevices.getUserMedia(mediaConstraints) .then(stream => console.log(stream)) .catch(err => console.log("err: ", err)); } } - 排除ssl证书与站点安全上下文的影响
虽然你用了--ssl参数启动开发服务,但ng serve生成的是自签名证书,安卓端Chrome默认会拦截自签名证书站点的权限请求。你可以先做两个校验:- 确认安卓端访问的地址是
https://你的IP:端口,不能是http协议 - 安卓Chrome地址栏输入
chrome://flags/#unsafely-treat-insecure-origin-as-secure,将你的站点IP添加到信任列表,启用选项后重启Chrome再测试
- 确认安卓端访问的地址是
- 检查相机占用情况
实体机或模拟器如果有其他应用正在占用相机,Chrome会无法获取视频源,关闭所有调用相机的应用、重启设备/模拟器后再重试。 - 排除开发服务器的兼容性问题
ng serve是面向开发场景的轻量服务,对移动端流媒体的支持存在局限,你可以将项目打包后用nginx部署带可信ssl证书的静态服务再测试,排除开发服务器的问题。
优先解决方案
首先调整视频约束参数+检查模拟器的相机开关配置,90%以上的安卓模拟器getUserMedia调用报错都是这两个原因导致的。
内容的提问来源于stack exchange,提问作者elite0107
相关产品推荐
相关产品推荐

