Przechwytywanie i ograniczenia dotyczące multimediów

Część WebRTC dotycząca multimediów obejmuje sposób uzyskiwania dostępu do sprzętu umożliwiającego rejestrowanie obrazu i dźwięku, takiego jak kamery i mikrofony, a także sposób działania strumieni multimediów. Obejmuje też wyświetlanie multimediów, czyli sposób, w jaki aplikacja może przechwytywać ekran.

Urządzenia multimedialne

Dostęp do wszystkich kamer i mikrofonów obsługiwanych przez przeglądarkę jest uzyskiwany i zarządzany za pomocą obiektu navigator.mediaDevices. Aplikacje mogą pobierać bieżącą listę podłączonych urządzeń, a także nasłuchiwać zmian, ponieważ wiele kamer i mikrofonów łączy się przez USB i może być podłączanych i odłączanych w trakcie działania aplikacji. Stan urządzenia multimedialnego może się zmienić w dowolnym momencie, dlatego zalecamy, aby aplikacje rejestrowały zmiany urządzenia w celu prawidłowego ich obsługi.

Ograniczenia

Podczas uzyskiwania dostępu do urządzeń multimedialnych warto podać jak najbardziej szczegółowe ograniczenia. Otwarcie domyślnego aparatu i mikrofonu za pomocą prostego ograniczenia jest możliwe, ale może spowodować przekazywanie strumienia multimediów, który nie jest optymalny dla aplikacji.

Konkretne ograniczenia są zdefiniowane w obiekcie MediaTrackConstraint, po jednym dla dźwięku i wideo. Atrybuty w tym obiekcie są typu ConstraintLong, ConstraintBoolean, ConstraintDouble lub ConstraintDOMString. Mogą to być konkretne wartości (np. liczba, wartość logiczna lub ciąg znaków), zakresy (LongRange lub DoubleRange z wartością minimalną i maksymalną) lub obiekty z definicją ideal lub exact. W przypadku określonej wartości przeglądarka spróbuje wybrać coś jak najbardziej zbliżonego. W przypadku zakresu zostanie użyta najlepsza wartość z tego zakresu. Gdy podasz wartość exact, zwracane będą tylko strumienie multimediów, 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 określić rzeczywistą konfigurację określonej ścieżki strumienia multimediów, możemy wywołać funkcję MediaStreamTrack.getSettings(), która zwraca MediaTrackSettings aktualnie zastosowaną.

Można też zaktualizować ograniczenia ścieżki z otwartego urządzenia multimedialnego, wywołując applyConstraints() na ścieżce. Dzięki temu aplikacja może ponownie skonfigurować urządzenie multimedialne bez konieczności zamykania istniejącego strumienia.

Wyświetlanie multimediów

Aplikacja, która ma mieć możliwość przechwytywania i rejestrowania zawartości ekranu, musi korzystać z interfejsu Display Media API. Funkcja getDisplayMedia() (która jest częścią navigator.mediaDevices) jest podobna do getUserMedia() i służy do otwierania zawartości wyświetlacza (lub jego części, np. okna). Zwrócony element MediaStream działa tak samo jak w przypadku użycia elementu getUserMedia().

Ograniczenia dotyczące getDisplayMedia() różnią się od tych, które są używane w przypadku 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 dotyczące nagrywania ekranu. Pamiętaj, że nie wszystkie przeglądarki obsługujące reklamy displayowe mogą obsługiwać te funkcje.

Strumienie i ścieżki

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

MediaStreamTrack

MediaStreamTrack ma właściwość kind, która może przyjmować wartość audio lub video, co wskazuje rodzaj reprezentowanych przez nią multimediów. Każdy ścieżkę można wyciszyć, przełączając jej właściwość enabled. Ścieżka ma właściwość logiczną remote, która wskazuje, czy pochodzi z obiektu RTCPeerConnection i jest przesyłana przez zdalnego użytkownika.