WebRTC本地媒体——设备枚举

目录

1.  官方API文档

2. 设备枚举示例

2.1 示例源码

2.1.1 Navigator对象

2.1.2 MediaDevices对象

2.1.3 MediaDeviceInfo对象

2.2 运行结果及分析


1.  官方API文档


浏览器本地设备枚举API由W3C的Media Capture Task Force媒体捕获工作组提供,其官方规范文档为 Media Capture and Streams。该档定义了用于请求访问本地多媒体设备(如麦克风或摄像机)的API;还定义了MediaStream API,它提供了控制多媒体流如何消费的方法,并提供了控制多媒体设备生产媒体流的方法。它还提供了捕获,渲染多媒体流的设备信息的方法。

2. 设备枚举示例


2.1 示例源码


设备枚举的api简单易懂,主要通过navigator.mediaDevices.emumerateDevices()这样一个JS API方法对用户可访问的多媒体输入输出设备进行收集,该方法返回Promise对象,因此,使用自定义的gotDevices()方法对收集的设备信息进行枚举,其中参数deviceInfos是MediaDeviceInfo对象数组。涉及的几个js类型对象为:
          浏览器对象navigator(Navigator类型实例);
         与navigator对象关联的对象mediaDevices(MediaDevices类型实例);
         设备收集成功后,获取的设备信息对象列表deviceInfos(MediaDeviceInfo类型数组);
后续将对这几个JS API进行简单阐述,信息来源为官方文档的第9小节:Media Capture and Streams

2.1.1 Navigator对象


属性 mediaDevices:Navigator对象的mediaDevices成员是MediaDevices类型。

注意Navigator的声明使用partial限定,表示该对象不止这一个成员。

2.1.2 MediaDevices对象


MediaDevices对象是用于检查、访问用户可用的媒体设备的API的入口点。

属性 ondevicechangge:当新的多媒体输入/输出设备变得可用,或者是可用的多媒体输入/输出设备变得不可用时触发该时间

方法 enumerateDevices():该方法收集对于用户代理可访问的多媒体输入\输出设备的信息。该方法返回一个Promise,而非是设备信息列表。当该方法枚举设备成功时,Promise将被填充一个MediaDeviceInfo的列表,以代表用户代理所能访问的多媒体输入\输出设备。这个列表中输入设备将是InputDeviceInfo类型的对象,该类型是MediaDeviceInfo的扩展类型。摄像头和麦克风是可以被枚举的源,规范中添加其他类型的源,将提供指示或者建议来表示这些类型的源是否是可枚举的。

  • 该方法内部实现设备枚举的具体步骤见规范文档的9.2小节
  • 当浏览器上下文的对list-permission的访问权限是granted,那么MediaDeviceInfo对象中将包含deviceId, kind, label, and groupId;若无权限,那么MediaDeviceInfo对象中将不包含label或者说label为空。
  • 枚举结果MediaDeviceInfo列表中,gruoupId相同的表示是同一个设备

2.1.3 MediaDeviceInfo对象


属性 deviceId:设备id,和kind一起唯一表征一个设备;

属性 kind:设备类型,是MediaDeviceKing枚举类型,可能的值为音频输入,音频输出,视频输入;
          

属性 label:描述设备的可读字符串,比如“外部USB摄像头”;

属性 groupId:组id表征一个设备,两个组id相同的设备表示这两个设备来源同一个外部物理设备,比如一个音频输入设备和一个音频输出设备表征一个头戴式耳机上的麦克和耳机,那么将具有同样的groupId;

2.2 运行结果及分析


  • 输出中用两个红框分别圈起来表示的同一个音频输入设备和同一个音频输出设备,对于这个音频输入设备,枚举后有3个InputDeviceInfo对象表征了同一个音频输入,他们的组id相同,但是设备id不同(比较奇怪这一点);
  • 所有的label属性均为空,这是因为加载的本地文件,而浏览器加载本地文件有安全性问题,因此,浏览器上下文不具有list-permission权限
  • 有两个视频输入设备,第一个视频输入设备和上面的音频输入设备同属同一个外部物理设备,因为两个设备具有同样的groupId,这是一个带mic的USB摄像头;第二个视频输入设备是一个屏幕捕捉设备。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值