Przechwytywanie i ograniczenia dotyczące multimediów

Część multimediów w WebRTC zawiera informacje o dostępie do sprzętu, który może przechwytywać wideo i dźwięk, np. kamer i mikrofonów, a także o sposobie działania strumieni multimediów. Omówiono w nim też multimedia displayowe, czyli sposób, w jaki aplikacja może przechwytywać ekran.

Nośniki danych

Wszystkie kamery i mikrofony obsługiwane przez przeglądarkę są zarządzane przez obiekt navigator.mediaDevices i są przez nie zarządzane. Aplikacje mogą pobierać aktualną listę połączonych urządzeń oraz nasłuchiwać zmian, ponieważ wiele kamer i mikroskopów łączy się przez USB i można je łączyć oraz odłączać w cyklu życia aplikacji. Stan urządzenia multimedialnego może się zmienić w każdej chwili, więc zalecamy rejestrowanie aplikacji na zmiany na urządzeniu, by prawidłowo je obsługiwać.

Ograniczenia

Podczas uzyskiwania dostępu do urządzeń multimedialnych warto zastosować jak najbardziej szczegółowe ograniczenia. Co prawda można otworzyć domyślny aparat i mikrofon z prostym ograniczeniem, ale może to spowodować, że strumień multimediów będzie znacznie odbiegać od najbardziej optymalnego dla aplikacji.

Konkretne ograniczenia są zdefiniowane w obiekcie MediaTrackConstraint. Jedno służy do obsługi dźwięku i jedno do wideo. Atrybuty tego obiektu typu ConstraintLong, ConstraintBoolean, ConstraintDouble lub ConstraintDOMString. Może to być konkretna wartość (np. liczba, wartość logiczna lub ciąg znaków), zakres (LongRange lub DoubleRange z wartością minimalną i maksymalną) albo obiekt z definicją ideal lub exact. Jeśli chcesz sprawdzić konkretną wartość, przeglądarka próbuje wybrać coś jak najbliżej. Dla zakresu zostanie użyta najlepsza wartość z tego zakresu. Jeśli wartość exact jest określona, zwracane są tylko strumienie multimedialne, które dokładnie pasują do tego ograniczenia.

Mała odległość

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

Zakres

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

Ścisłe

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

Aby ustalić rzeczywistą konfigurację danego strumienia multimediów, możemy wywołać funkcję MediaStreamTrack.getSettings(), która zwraca obecnie zastosowany element MediaTrackSettings.

Możesz też zaktualizować ograniczenia dotyczące ścieżki na otwartym urządzeniu multimedialnym, wywołując metodę applyConstraints(). Dzięki temu aplikacja może ponownie skonfigurować urządzenie multimedialne bez konieczności wcześniejszego zamknięcia istniejącego strumienia.

Multimedia displayowe

Aplikacja, która chce korzystać z możliwości przechwytywania i nagrywania zawartości ekranu, musi korzystać z interfejsu Display Media API. Funkcja getDisplayMedia() (część navigator.mediaDevices) jest podobna do getUserMedia() i służy do otwierania treści wyświetlacza (lub jego części, np. okna). Zwracana właściwość MediaStream działa tak samo jak getUserMedia().

Ograniczenia trybu getDisplayMedia() obowiązują inne niż dla zwykłego wejścia wideo lub audio.

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

Powyższy fragment kodu pokazuje, jak działają specjalne ograniczenia nagrywania ekranu. Uwaga: niektóre przeglądarki z obsługą multimediów mogą nie obsługiwać tych funkcji.

Strumienie i utwory

MediaStream reprezentuje strumień treści multimedialnych, który składa się ze ścieżek audio (MediaStreamTrack) i wideo. Aby pobrać wszystkie ścieżki z MediaStream, wywołaj MediaStream.getTracks(), która zwraca tablicę obiektów MediaStreamTrack.

MediaStream

MediaStreamTrack ma właściwość kind o wartości audio lub video. Wskazuje ona jej rodzaj reprezentowanych multimediów. Każdy utwór można wyciszyć, przełączając jego właściwość enabled. Ścieżka ma właściwość logiczna remote, która wskazuje, czy pochodzi z RTCPeerConnection i pochodzi ze zdalnego peera.