Beëindigingen van MediaStream

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 een MediaStream aan het streamen is, en niet MediaStream.ended .
  • Gebruik MediaStreamTrack.stop() om het streamen te stoppen, niet MediaStream.stop() .
  • Als u een unieke identificatie voor een MediaStream nodig heeft, gebruik dan MediaStream.id in plaats van MediaStream.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] om de MediaStreamTrack voor deze stream te bekijken.

Schermafbeelding van MediaStream en MediaStreamTrack in de Chrome DevTools-console

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 deze te ended 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);
    });

etiket

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 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 .