webrtc-媒体捕获和约束

媒体捕获和约束

WebRTC的媒体部分包括如何访问能够捕获视频和音频的硬件,如相机和麦克风,以及媒体流的工作方式。它还包括显示媒体,这就是应用程序如何进行屏幕捕获。

媒体设备

浏览器支持的所有摄像头和麦克风都可以通过navigator.mediaDevices对象访问和管理。应用程序可以检索已连接设备的当前列表,也可以侦听更改,因为许多相机和microhpone都通过USB连接,并且可以在应用程序的生命周期内进行连接和断开连接。由于媒体设备的状态可以随时更改,建议应用程序注册设备更改以正确处理更改。

约束

在访问媒体设备时,最好提供尽可能详细的约束。虽然可以通过简单的限制打开默认的摄像头和麦克风,但它可能会提供一个远不是最适合应用程序的媒体流。

特定约束在MediaTrackConstraint对象中定义,一个用于音频,另一个用于视频。此对象中的属性类型为ConstraintLong、ConstraintBoolean、ConstraintDouble或ConstraintDOMString。它们可以是特定值(例如,数字、布尔值或字符串)、范围(具有最小值和最大值的LongRange或DoubleRange)或具有理想或精确定义的对象。对于特定值,浏览器将尝试选择尽可能接近的对象。对于某个范围,将使用该范围内的最佳值。如果指定了精确,则只返回与该约束完全匹配的媒体流。

要确定媒体流的某个轨道的实际配置,我们可以调用MediaStreamTrack.getSettings(),它返回当前应用的MediaTrackSettings。

通过调用音轨上的applyConstraints(),也可以从我们打开的媒体设备更新音轨的约束。这允许应用程序重新配置媒体设备,而无需首先关闭现有流。

显示媒体

想要执行屏幕捕获和录制的应用程序必须使用显示媒体API。getDisplayMedia()函数(它是navigator.mediaDevices的一部分)类似于getUserMedia(),用于打开显示内容(或显示内容的一部分,如窗口)。返回的MediaStream与使用getUserMedia()时的工作方式相同。

getDisplayMedia()的约束与用于常规视频或音频输入的约束不同。

{
    video: {
        cursor: 'always' | 'motion' | 'never',
        displaySurface: 'application' | 'browser' | 'monitor' | 'window'
    }
}

上面的代码截图显示了屏幕录制的特殊约束是如何工作的。请注意,并非所有支持显示媒体的浏览器都支持这些功能。

流和轨道

MediaStream表示媒体内容流,由音频和视频的音轨(MediaStreamTrack)组成。您可以通过调用MediaStream.getTracks()从MediaStream中检索所有曲目,该方法返回MediaStreamTrack对象的数组。

媒体流跟踪

MediaStreamTrack的种类属性是音频或视频,表示它所代表的媒体种类。每个轨迹都可以通过切换其启用的属性来禁用。轨道有一个布尔属性remote,该属性指示它是否由RTCPeerConnection来源并来自远程对等体。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值