Elementy wycofane z MediaStream

Jeśli korzystasz z getUserMedia() lub WebRTC, może być konieczne dostosowanie kodu do Chrome 45 i nowszych wersji.

Interfejs MediaStream API reprezentuje zsynchronizowane strumienie multimediów. Na przykład strumień rejestrowany z kamery i mikrofonu ma zsynchronizowane ścieżki wideo i audio. Każda ścieżka jest reprezentowana przez MediaStreamTrack. (Nie mylić z elementem <track>!)

W Chrome 45 nastąpiły 3 wycofania MediaStream:

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

Równolegle wprowadzono 2 nowe elementy:

  • MediaStream.active
  • MediaStreamTrack.stop()

Wymaga to wprowadzenia tych zmian:

  • Użyj MediaStream.active, aby sprawdzić, czy strumienie są przesyłane z urządzenia MediaStream, a nie MediaStream.ended.
  • Używaj MediaStreamTrack.stop(), aby zatrzymać transmisję, a nie MediaStream.stop().
  • Jeśli potrzebujesz unikalnego identyfikatora dla elementu MediaStream, użyj MediaStream.id zamiast MediaStream.label. MediaStreamTrack.label podaje zrozumiałą dla człowieka nazwę urządzenia źródłowego, na które ma być przesyłane dane, np. Kamera HDFaceTime (wbudowana) (05ac:8510).

Możesz to zobaczyć: otwórz simpl.info/gum w Chrome (na urządzeniu z kamerą) i otwórz konsolę Chrome DevTools. Obiekt MediaStream stream przekazany do wywołania zwrotnego getUserMedia() w tej wersji demonstracyjnej jest w zakresie globalnym, więc możesz go sprawdzić w konsoli. Zadzwoń pod numer stream.getTracks()[0], aby wyświetlić: MediaStreamTrack w tej transmisji.

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

Stop(), zakończony i aktywny

Gdy grupa robocza W3C ds. przechwycania multimediów i strumieni zastanowiła się, co się dzieje, gdy dodajesz nowe ścieżki do ścieżki MediaStream, i czy brak pustego obszaru MediaStream się kończy, zdali sobie sprawę, że nie ma rozsądnego sposobu na wdrożenie ended na urządzeniu MediaStream (ponieważ „nigdy nie będzie już można zaczynać od początku”). W innych częściach HTML5 „zakończony” oznacza „to się zakończyło i nigdy nie zostanie wznowione”. Stan „Aktywny” nie ma takiego znaczenia: nieaktywny strumień może stać się ponownie aktywny, np. po dodaniu do niego nowej ścieżki. Zamiast zachować mylący atrybut i funkcję, grupa robocza postanowiła je usunąć.

Oto przykład użycia skryptu „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 metody stop() z urządzenia MediaStream nie spowodowało usunięcia żadnych rzeczywistych funkcji – procesów odłączania urządzeń źródłowych i tak dalej, które trzeba wykonać na MediaStreamTrack. Zamiast tego użyj stop() w systemie 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

Okazuje się, że nikt nie jest w stanie stwierdzić, jak wykorzystać tę nieruchomość.

Obiekt MediaStream.label został dodany do pierwszej wersji specyfikacji, ale tak naprawdę nikt 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ą usługi RTCPeerConnection.

Grupa robocza W3C poprosiła o pomoc, ale nikt nie o nią prosił, więc ją usunął.

Przypominam: MediaStream.id to unikalny identyfikator MediaStream, a MediaStreamTrack.label podaje nazwę źródła strumienia, np. typ kamery lub mikrofonu.

Więcej informacji na temat MediaStream i MediaStreamTrack znajdziesz na stronach Mozilla Developer Network, a HTML5 Rocks to doskonałe wprowadzenie do getUserMedia() w artykule Rejestrowanie dźwięku i wideo.

Jak zawsze będziemy wdzięczni za opinie na temat zmian w Chrome. Wykryte błędy można śledzić (tutaj i tutaj), a więcej dyskusji i szczegółów znajdziesz w artykule o wdrożeniu.