Beëindigingen van MediaStream

Als u met getUserMedia() of WebRTC werkt, moet u mogelijk uw code aanpassen voor Chrome 45 en later.

De MediaStream API vertegenwoordigt gesynchroniseerde mediastreams. Een stream afkomstig van camera- en microfooningangen heeft bijvoorbeeld gesynchroniseerde video- en audiotracks. Elke track wordt weergegeven door een MediaStreamTrack . (Niet te verwarren met het <track>-element !)

Er zijn drie MediaStream verouderde versies in Chrome 45:

  • MediaStream.ended
  • MediaStream.label
  • MediaStream.stop()

Parallel daaraan vinden twee toevoegingen plaats:

  • MediaStream.active
  • MediaStreamTrack.stop()

Hiervoor zijn de volgende wijzigingen nodig:

  • Gebruik MediaStream.active om te controleren of een MediaStream streamt, niet MediaStream.ended .
  • Gebruik MediaStreamTrack.stop() om het streamen te stoppen, niet MediaStream.stop() .
  • Als u een unieke identificatie voor een MediaStream nodig hebt, gebruikt u 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) .

U 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 aan de getUserMedia() -callback is doorgegeven, bevindt zich in globale scope, dus u kunt deze vanuit de console bekijken. Roep stream.getTracks()[0] aan 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 zich boog over het probleem van wat er gebeurt wanneer je nieuwe tracks toevoegt aan een MediaStream , 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 'ended' 'dit is beëindigd en zal nooit meer worden hervat'. 'Actief' heeft geen dergelijke implicatie: een inactieve stream kan weer actief worden, bijvoorbeeld als er een nieuwe track aan wordt toegevoegd. In plaats van een verwarrend kenmerk en functie te behouden, besloot de Working Group het 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 echte functionaliteit verwijderd: processen voor het loskoppelen van bronapparaten en dergelijke moeten sowieso 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 bleek dat niemand een bestemming voor dit pand kon bedenken!

MediaStream.label was toegevoegd aan de eerste versie van de specificatie, maar niemand wist precies waar het label voor diende. Het was ook onduidelijk wat er met label gebeurde wanneer een stream via RTCPeerConnection werd verzonden.

De W3C Werkgroep heeft navraag gedaan en niemand wilde het hebben. Daarom hebben ze het verwijderd.

Nogmaals: 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 beschikbaar via Mozilla Developer Network . HTML5 Rocks biedt een uitstekende introductie tot getUserMedia() bij het vastleggen van audio en video .

Zoals altijd stellen we uw feedback over wijzigingen in Chrome op prijs. U kunt de bugs voor deze verouderingen volgen ( hier en hier ) en meer informatie en details vinden in de Intent to Implement .