媒体捕获和约束

WebRTC 的媒体部分介绍了如何访问能够进行拍摄的硬件 例如摄像头和麦克风,以及媒体流式传输方式。 工作。还介绍了显示媒体,即应用可以用来过滤屏幕的

媒体设备

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

限制条件

访问媒体设备时,最好提供详细的 设置限制条件虽然您可以打开默认相机 具有简单约束条件的麦克风,那么其传输的媒体流可能 选择最适合应用的方式

具体约束条件在 MediaTrackConstraint 对象中定义,其中一个针对 一个是音频,另一个是视频此对象中的属性类型为 ConstraintLongConstraintBooleanConstraintDoubleConstraintDOMString。这些值可以是具体的值(例如数字、 布尔值或字符串)、范围(LongRangeDoubleRange,最小值和 最大值)或具有 idealexact 定义的对象。对于 特定值,浏览器将尝试选择尽可能接近的内容。 对于特定范围,系统将使用该范围内的最佳值。当exact: 则只有与该限制条件完全匹配的媒体流才会被纳入 返回。

近距离

// Camera with a resolution as close to 640x480 as possible
{
    "video": {
        "width": 640,
        "height": 480
    }
}

Range

// Camera with a resolution in the range 640x480 to 1024x768
{
    "video": {
        "width": {
            "min": 640,
            "max": 1024
        },
        "height": {
            "min": 480,
            "max": 768
        }
    }
}

完全

// Camera with the exact resolution of 1024x768
{
    "video": {
        "width": {
            "exact": 1024
        },
        "height": {
            "exact": 768
        }
    }
}

要确定媒体流的特定轨道的实际配置, 我们可以调用 MediaStreamTrack.getSettings(),它会返回 目前已应用“MediaTrackSettings”。

还可以从我们的媒体设备 通过对轨道调用 applyConstraints() 来打开该轨道。这样, 重新配置媒体设备,而无需先关闭 现有视频流

显示媒体

希望能够执行屏幕截取和录制的应用 必须使用 Display Media API。函数 getDisplayMedia()( 的 navigator.mediaDevices 类似于 getUserMedia(),用于 打开显示屏(或显示屏的一部分,例如 窗口)。返回的 MediaStream 的工作方式与使用 getUserMedia()

getDisplayMedia() 的约束条件与用于常规网络环境的约束条件不同。 视频或音频输入。

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

上面的代码段展示了屏幕录制的特殊限制 工作。请注意,部分显示屏幕的浏览器可能不支持 。

音乐流和曲目

MediaStream 表示媒体内容流,其中包含多个曲目 (MediaStreamTrack) 音频和视频。您可以从以下位置检索所有曲目: MediaStream:通过调用 MediaStream.getTracks() 返回 MediaStreamTrack 对象。

MediaStreamTrack

MediaStreamTrackkind 属性为 audiovideo。 用于表示其所代表的媒体类型你可通过切换音量来将每个曲目静音 其 enabled 属性。曲目具有布尔值属性 remote,用于指明 如果来源为 RTCPeerConnection 且来自远程对等方,则返回此值。