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ć, czyMediaStream
jest przesyłany strumieniowo, a nieMediaStream.ended
. - Aby zatrzymać transmisję, użyj
MediaStreamTrack.stop()
, a nieMediaStream.stop()
. - Jeśli potrzebujesz unikalnego identyfikatora dla elementu
MediaStream
, użyj elementuMediaStream.id
zamiastMediaStream.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.
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()
z 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 MediaStream
i MediaStreamTrack
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 (tutaj i tutaj), a więcej informacji i szczegółów znajdziesz w intencji wdrożenia.