Google is committed to advancing racial equity for Black communities. See how.
本頁面由 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並來自遠程對等方。