Ritiri MediaStream

Se utilizzi getUserMedia() o WebRTC, potresti dover modificare il codice per Chrome 45 e versioni successive.

L'API MediaStream rappresenta i flussi sincronizzati di contenuti multimediali. Ad esempio, uno stream acquisito dall'ingresso di videocamera e microfono contiene tracce video e audio sincronizzate. Ogni traccia è rappresentata da un MediaStreamTrack. (da non confondere con l'elemento <track>).

Esistono tre ritiri di MediaStream in Chrome 45:

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

In parallelo ci sono due aggiunte:

  • MediaStream.active
  • MediaStreamTrack.stop()

Sono richieste le seguenti modifiche:

  • Usa MediaStream.active per controllare se è in corso lo streaming di MediaStream, non di MediaStream.ended.
  • Usa MediaStreamTrack.stop() per interrompere lo streaming, non MediaStream.stop().
  • Se ti serve un identificatore univoco per un MediaStream, utilizza MediaStream.id anziché MediaStream.label. MediaStreamTrack.label fornisce un nome leggibile per il dispositivo di origine per uno stream, ad esempio Videocamera FaceTime HD (integrata) (05ac:8510).

Puoi vederla in azione: apri simpl.info/gum in Chrome (su un dispositivo con fotocamera) e visualizza la console Chrome DevTools. L'oggetto MediaStream stream passato al callback getUserMedia() in questa demo è in ambito globale, quindi puoi ispezionarlo dalla console. Chiama stream.getTracks()[0] per visualizzare il MediaStreamTrack per questo stream.

Screenshot che mostra MediaStream e MediaStreamTrack nella console Chrome DevTools

Stop(), terminato e attivo

Quando il gruppo di lavoro di W3C Media Capture and Streams ha esaminato il problema di cosa succede quando si aggiungono nuove tracce a un MediaStream e se viene terminata una MediaStream vuota, si è reso conto che non esisteva un modo ragionevole per implementare ended su un MediaStream (come in "Non ricomincerà mai"). In altre parti dell 'HTML5 "terminato" significa che l'azione è terminata e non verrà mai ripresa. Lo stato "Attivo" non comporta alcuna implicazione di questo tipo: uno stream inattivo può diventare di nuovo attivo, ad esempio se viene aggiunta una nuova traccia. Anziché mantenere un attributo e una funzione confusi, il gruppo di lavoro ha deciso di rimuoverlo.

Ecco un esempio di come utilizzare "MediaStream.active" per controllare lo stato di uno stream:

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
}

La rimozione di stop() da MediaStream non comporta la rimozione di alcuna funzionalità reale: i processi di scollegamento dei dispositivi di origine e così via devono essere eseguiti comunque su MediaStreamTrack. Usa invece stop() su 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);
    });

etichetta

Ho scoperto che nessuno riusciva a capire come sfruttare questa proprietà.

MediaStream.label era stato aggiunto alla prima versione delle specifiche, ma nessuno sapeva davvero a cosa serve label. Inoltre, non era chiaro cosa sia successo a label quando è stato inviato uno stream tramite RTCPeerConnection.

Il gruppo di lavoro W3C ha chiesto informazioni e nessuno lo voleva, quindi l'ha rimosso.

Ripetiamo che: MediaStream.id fornisce un identificatore univoco per un elemento MediaStream, mentre MediaStreamTrack.label fornisce il nome dell'origine di uno stream, ad esempio il tipo di videocamera o microfono.

Ulteriori informazioni su MediaStream e MediaStreamTrack sono disponibili in Mozilla Developer Network e HTML5 Rocks fornisce un'eccellente introduzione a getUserMedia() in Acquisizione di audio e video.

Come sempre, apprezziamo il tuo feedback sulle modifiche a Chrome. Puoi seguire i bug relativi a queste deprecazioni (qui e qui) e trovare ulteriori discussioni e dettagli nell'intenzione di implementazione.