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ądzeniaMediaStream
, a nieMediaStream.ended
. - Używaj
MediaStreamTrack.stop()
, aby zatrzymać transmisję, a nieMediaStream.stop()
. - Jeśli potrzebujesz unikalnego identyfikatora dla elementu
MediaStream
, użyjMediaStream.id
zamiastMediaStream.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.
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.