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 wejścia z aparatu i 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 wycofane zostały 3 funkcje:MediaStream

  • 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, użyj elementu MediaStream.id zamiast MediaStream.label. 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 funkcję 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 MediaStream jest zakończona, okazało się, że nie ma sensownego sposobu implementacji ended w MediaStream (w sensie „nigdy się nie uruchomi”). 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 sprawdzania 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 i inne muszą być w jakimś stopniu wykonywane na MediaStreamTrack. Zamiast tego użyj aplikacji stop() w kontekście 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), a więcej informacji i szczegółów znajdziesz w intencji wdrożenia.