Ritiri MediaStream

Se lavori con getUserMedia() o WebRTC, potrebbe essere necessario modificare il codice per Chrome 45 e versioni successive.

L'API MediaStream rappresenta stream di contenuti multimediali sincronizzati. Ad esempio, uno stream registrato da una videocamera l'input del microfono ha tracce video e audio sincronizzate. Ogni traccia è rappresentato da un MediaStreamTrack. (da non confondere con l'elemento <track>).

Ci sono tre ritiri di MediaStream in Chrome 45:

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

In parallelo sono presenti due aggiunte:

  • MediaStream.active
  • MediaStreamTrack.stop()

Queste impostazioni richiedono le seguenti modifiche:

  • Usa MediaStream.active per controllare se un MediaStream sta trasmettendo in streaming, non MediaStream.ended.
  • Per interrompere lo streaming, usa MediaStreamTrack.stop(), non MediaStream.stop().
  • Se hai bisogno di un identificatore univoco per un MediaStream, usa MediaStream.id anziché MediaStream.label. MediaStreamTrack.label fornisce un nome leggibile per il dispositivo di origine per uno stream, ad esempio Fotocamera HD FaceTime (integrata) (05ac:8510).

Puoi vedere questi dati in azione: apri simpl.info/gum in Chrome (su un dispositivo con una videocamera) e visualizza la console Chrome DevTools. La Oggetto MediaStream stream passato al callback getUserMedia() in questo in ambito globale, puoi controllarla dalla console. Chiama stream.getTracks()[0] per visualizzare MediaStreamTrack per questo stream.

Screenshot che mostra MediaStream e MediaStreamTrack nella console DevTools di Chrome

Stop(), terminato e attivo

Quando il gruppo di lavoro W3C Media Capture and Streams ha esaminato il problema di ciò che accade quando si aggiungono nuove tracce a un MediaStream, e se un MediaStream vuoto viene terminato, si è reso conto che c'era non c'è un modo sensato per implementare ended su un MediaStream (ad esempio "non ricomincerà mai"). In altre parti dell'HTML5 "terminato" significa che "questa operazione è terminata e non riprendere mai". 'Attivo' non ha alcuna implicazione del genere: uno stream inattivo può attivi di nuovo, 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 un 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 ha rimosso alcuna funzionalità reale: per lo scollegamento dei dispositivi di origine e così via devono essere eseguiti MediaStreamTrack comunque. 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

Si è scoperto che nessuno è riuscito a capire come usare questa proprietà.

MediaStream.label era stato aggiunto alla prima versione della specifica, ma nessuno lo sapeva a cosa serviva label. Non era nemmeno chiaro cosa sia successo a label quando uno stream è stato inviato tramite RTCPeerConnection.

Il Gruppo di lavoro della W3C ha effettuato una richiesta, ma nessuno lo voleva, quindi l'ha rimosso.

Da ribadire: MediaStream.id fornisce un identificatore univoco per un MediaStream e MediaStreamTrack.label forniscono il nome dell'origine di uno stream, come il tipo di videocamera o microfono.

Sono disponibili ulteriori informazioni su MediaStream e MediaStreamTrack di Mozilla Developer Network e HTML5 Rocks offre un'ottima 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 questi ritiri (qui e qui) e trovare ulteriori discussioni e dettagli nell'articolo Intent di implementazione.