Elementy wycofane z MediaStream

Jeśli używasz getUserMedia() lub WebRTC, może być konieczne dostosowanie kodu do wersji Chrome 45 lub nowszej.

Interfejs MediaStream API reprezentuje zsynchronizowane strumienie multimediów. Na przykład strumień z kamery i wejścia mikrofonu ma zsynchronizowane ścieżki wideo i dźwięku. Każdy utwór jest reprezentowany przez element MediaStreamTrack. (nie mylić z elementem<track>).

W Chrome 45 są 3 funkcje MediaStream, które zostały wycofane:

  • MediaStream.ended
  • MediaStream.label
  • MediaStream.stop()

Równolegle do tego wprowadziliśmy 2 nowe funkcje:

  • MediaStream.active
  • MediaStreamTrack.stop()

Wymagają one wprowadzenia tych zmian:

  • Użyj MediaStream.active, aby sprawdzić, czy MediaStream jest przesyłany strumieniowo, a nie MediaStream.ended.
  • Aby zatrzymać transmisję, użyj MediaStreamTrack.stop(), a nie MediaStream.stop().
  • Jeśli potrzebujesz unikalnego identyfikatora dla elementu MediaStream, zamiast wartości MediaStream.label użyj wartości MediaStream.id. MediaStreamTrack.label zawiera czytelną dla człowieka nazwę urządzenia źródłowego strumienia, np. FaceTime HD Camera (Built-in) (05ac:8510).

Aby zobaczyć te funkcje w działaniu, otwórz simpl.info/gum w Chrome (na urządzeniu z kamerą) i otwórz konsolę narzędzi deweloperskich w Chrome. Obiekt MediaStream stream przekazany do wywołania zwrotnego getUserMedia() w tym demo ma zasięg globalny, więc możesz go sprawdzić w konsoli. Wywołaj stream.getTracks()[0], aby wyświetlić MediaStreamTrack tej transmisji.

Zrzut ekranu przedstawiający MediaStream i MediaStreamTrack w konsoli Narzędzi deweloperskich w Chrome

Stop(), ended i active

Gdy grupa robocza W3C ds. przechwytywania i przesyłania multimediów zajęła się problemem tego, co się dzieje, gdy dodasz nowe ścieżki do MediaStream, i czy pusta ścieżka MediaStream jest zakończona, okazało się, że nie ma sensownego sposobu na wdrożenie ended na ścieżce MediaStream (w rozumieniu „nigdy więcej nie uruchomi się”). W innych częściach HTML5 „zakończone” oznacza „zakończone i nigdy nie zostanie wznowione”. „Aktywny” nie ma takiego znaczenia: nieaktywny strumień może ponownie stać się aktywny, na przykład po dodaniu do niego nowego utworu. Zamiast utrzymywać mylący atrybut i funkcję, grupa robocza postanowiła je usunąć.

Oto przykład użycia właściwości „MediaStream.active” do sprawdzenia stanu strumienia:

var gumStream;

navigator.getUserMedia({audio: false, video: true},
    function(stream) {
            gumStream = stream;
        // ...
    },
    function(error) {
        console.log('getUserMedia() error', error);
    });

// …

if (gumStream.active) {
    // do something with the stream
}

Usunięcie stop()MediaStream nie spowodowało usunięcia żadnych rzeczywistych funkcji: procesy odłączania urządzeń źródłowych itp. muszą być w jakimś stopniu wykonywane na MediaStreamTrack. Zamiast tego użyj stop()MediaStreamTrack:

navigator.getUserMedia({audio: false, video: true},
    function(stream) {
            // can also use getAudioTracks() or getVideoTracks()
        var track = stream.getTracks()[0];  // if only one media track
        // ...
        track.stop();
    },
    function(error){
        console.log('getUserMedia() error', error);
    });

etykieta

Okazało się, że nikt nie wiedział, do czego służy ta właściwość.

MediaStream.label zostało dodane do pierwszej wersji specyfikacji, ale nikt tak naprawdę nie wiedział, do czego służy label. Nie było też jasne, co stało się z label, gdy strumień został wysłany za pomocą RTCPeerConnection.

Grupa robocza W3C zapytała, czy ktoś tego chce, i gdy nikt nie wyraził zainteresowania, usunięto to.

Powtórzmy: MediaStream.id zawiera unikalny identyfikator MediaStream, a MediaStreamTrack.label zawiera nazwę źródła strumienia, np. typ kamery lub mikrofonu.

Więcej informacji o MediaStreamMediaStreamTrack znajdziesz w Mozilla Developer Network, a HTML5 Rocks zawiera doskonałe wprowadzenie do getUserMedia() w artykule Nagrywanie dźwięku i wideo.

Jak zawsze dziękujemy za opinie na temat zmian w Chrome. Możesz śledzić błędy związane z tymi wycofaniami (tutajtutaj) oraz znaleźć więcej informacji i dyskusji w intencji wdrożenia.