Google 致力于为黑人社区推动种族平等。查看具体行动
此页面由 Cloud Translation API 翻译。
Switch to English

媒体捕获和限制

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

媒体设备

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

约束条件

在访问媒体设备时,最好提供尽可能详细的约束。尽管可以通过简单的约束打开默认的摄像头和麦克风,但它可能提供的媒体流远非最佳应用程序。

MediaTrackConstraint对象中定义了特定的约束,一个约束用于音频,另一个约束用于视频。此对象中的属性的类型为ConstraintLongConstraintBooleanConstraintDoubleConstraintDOMString 。这些可以是特定值(例如,数字,布尔值或字符串),范围(具有最小值和最大值的LongRangeDoubleRange )或具有idealexact定义的对象。对于特定值,浏览器将尝试选择尽可能接近的东西。对于一个范围,将使用该范围内的最佳值。如果指定了exact ,则仅返回与该约束完全匹配的媒体流。

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

范围

 // 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.getTracks()返回MediaStream的所有轨道,该方法返回MediaStreamTrack对象的数组。

MediaStreamTrack

MediaStreamTrack具有audiovideokind属性,指示其代表的媒体类型。可以通过切换每个轨道的enabled属性来使其静音。轨道具有布尔值remote ,它指示它是否由RTCPeerConnection并来自远程对等方。