Als u met getUserMedia()
of WebRTC werkt, moet u mogelijk uw code aanpassen voor Chrome 45 en hoger.
De MediaStream API vertegenwoordigt gesynchroniseerde mediastromen. Een stream afkomstig van camera- en microfooninvoer heeft bijvoorbeeld gesynchroniseerde video- en audiotracks. Elke track wordt vertegenwoordigd door een MediaStreamTrack . (Niet te verwarren met het <track>-element !)
Er zijn drie MediaStream
beëindigingen in Chrome 45:
-
MediaStream.ended
-
MediaStream.label
-
MediaStream.stop()
Parallel daaraan zijn twee toevoegingen:
-
MediaStream.active
-
MediaStreamTrack.stop()
Deze vereisen de volgende wijzigingen:
- Gebruik
MediaStream.active
om te controleren of eenMediaStream
aan het streamen is, en nietMediaStream.ended
. - Gebruik
MediaStreamTrack.stop()
om het streamen te stoppen, nietMediaStream.stop()
. - Als u een unieke identificatie voor een
MediaStream
nodig heeft, gebruik danMediaStream.id
in plaats vanMediaStream.label
.MediaStreamTrack.label
biedt een voor mensen leesbare naam voor het bronapparaat voor een stream, bijvoorbeeld FaceTime HD Camera (ingebouwd) (05ac:8510) .
Je kunt deze in actie zien: open simpl.info/gum in Chrome (op een apparaat met een camera) en bekijk de Chrome DevTools-console. De MediaStream- stream
die in deze demo wordt doorgegeven aan de getUserMedia()
-callback, valt onder een globaal bereik, dus u kunt deze vanaf de console inspecteren. Roep stream.getTracks()[0]
aan om de MediaStreamTrack
voor deze stream te bekijken.
Stop(), beëindigd en actief
Toen de Media Capture and Streams W3C Working Group keek naar het probleem van wat er gebeurt als je nieuwe tracks aan een MediaStream
toevoegt, en of een lege MediaStream
wordt beëindigd, realiseerden ze zich dat er geen verstandige manier was om ended
te implementeren op een MediaStream
(zoals in 'zal nooit meer beginnen'). In andere delen van HTML5 betekent 'beëindigd' 'dit is geëindigd en zal nooit meer worden hervat'. 'Actief' houdt deze implicatie niet in: een inactieve stream kan weer actief worden, bijvoorbeeld als er een nieuwe track aan wordt toegevoegd. In plaats van een verwarrend attribuut en functie te behouden, besloot de werkgroep deze te verwijderen.
Hier is een voorbeeld van hoe u 'MediaStream.active' kunt gebruiken om de status van een stream te controleren:
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
}
Het verwijderen van stop()
uit MediaStream
heeft geen enkele echte functionaliteit verwijderd: processen voor het loskoppelen van bronapparaten enzovoort moeten hoe dan ook op MediaStreamTrack
worden uitgevoerd. Gebruik in plaats daarvan stop()
op 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);
});
label
Het blijkt dat niemand een nut voor dit pand kon bedenken!
MediaStream.label
was toegevoegd aan de eerste versie van de specificatie, maar niemand wist echt waar het label
voor was. Ook was onduidelijk wat er met label
gebeurde als een stream via RTCPeerConnection
werd verzonden.
De W3C-werkgroep vroeg erom , en niemand wilde het, dus hebben ze het verwijderd.
Ter herhaling: MediaStream.id
biedt een unieke identificatie voor een MediaStream
en MediaStreamTrack.label
biedt de naam van de bron van een stream, zoals het type camera of microfoon.
Meer informatie over MediaStream
en MediaStreamTrack
is verkrijgbaar bij Mozilla Developer Network , en HTML5 Rocks biedt een uitstekende introductie tot getUserMedia()
in Capturing Audio & Video .
Zoals altijd stellen we uw feedback over wijzigingen in Chrome op prijs. U kunt de bugs voor deze beëindigingen volgen ( hier en hier ) en meer discussie en details vinden in de Intent to Implement .