navigator.mediaDevices.getUserMedia能区分摄像头或者麦克风未插入么

navigator.mediaDevices.getUserMedia能区分摄像头或者麦克风未插入么
能区分的话 要怎么区分?
现在设备不插入只会显示 DOMException: Requested device not found
而且只插入摄像头就不会显示报错信息,麦克风插没插好像检测不到

阅读 2.9k
2 个回答

这个很正常,因为原理不一样

对于摄像头来说,是真正的设备插入获取取出情况
对于麦克风来说,其实navigator.mediaDevices.getUserMedia对于计算机来说是识别是否有声卡,麦克风是声卡的外部扩展,是否插入不影响这里的识别(现在声卡一直都在的,普遍都至少有一块是有效的)。

所以对应声音采集,一般还会有第二部,这包括

  1. 对于有多块声卡的,要求选择有效的声卡设备
  2. 对有效声卡设备进行测试

注意,有些摄像头本身也是集成了声卡的。

已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

可以。
getUserMedia接受的参数如果传入{audio: true, video: true}的时候,不同的系统处理方式不同。
在Windows系统下,必须要摄像头和麦克风两者皆有,否则就会报not found。
在Mac系统下,摄像头或麦克风二者有其一,就会成功。
在这种逻辑下,我们应该对其做降级处理,当返回not found时,要分开获取{audio: true}和{video: true}。这时候就能区分出来是哪种设备未插入。
当二者皆失败,才是无设备的情况。
当然,我们也可以一开始就只做分开处理,这样就无需做降级处理,写法也更加优雅。

另外需要注意的是,我们平时买的外接摄像头,有些是自带有麦克风的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题