Se utilizzi getUserMedia()
o WebRTC, potresti dover modificare il codice per Chrome 45 e versioni successive.
L'API MediaStream rappresenta flussi sincronizzati di contenuti multimediali. Ad esempio, uno stream acquisito dall'input della fotocamera e del microfono ha tracce video e audio sincronizzate. Ogni traccia è rappresentata da un MediaStreamTrack. (da non confondere con l'elemento <track>).
In Chrome 45 sono presenti tre MediaStream
ritiri:
MediaStream.ended
MediaStream.label
MediaStream.stop()
In parallelo sono presenti due aggiunte:
MediaStream.active
MediaStreamTrack.stop()
Queste richiedono le seguenti modifiche:
- Usa
MediaStream.active
per controllare se unMediaStream
è in streaming, nonMediaStream.ended
. - Utilizza
MediaStreamTrack.stop()
per interrompere lo streaming, nonMediaStream.stop()
. - Se hai bisogno di un identificatore univoco per un
MediaStream
, utilizzaMediaStream.id
anzichéMediaStream.label
.MediaStreamTrack.label
fornisce un nome leggibile per il dispositivo di origine di uno stream, ad esempio FaceTime HD Camera (Built-in) (05ac:8510).
Puoi vederli in azione: apri simpl.info/gum in Chrome (su un dispositivo con una fotocamera) e visualizza la console Chrome DevTools. L'oggetto MediaStream stream
passato al callback getUserMedia()
in questa demo è a livello globale, quindi puoi esaminarlo dalla console. Chiamare
stream.getTracks()[0]
per visualizzare il MediaStreamTrack
per questo stream.
Stop(), ended e active
Quando il gruppo di lavoro W3C Media Capture and Streams ha esaminato il problema di cosa succede quando aggiungi nuove tracce a un MediaStream
e se un MediaStream
vuoto viene terminato, ha capito che non esisteva un modo sensato per implementare ended
su un MediaStream
(come in "non verrà mai più avviato"). In altre parti di HTML5, "ended" significa "è terminato e non verrà mai ripreso". Lo stato "Attivo" non comporta alcuna implicazione del genere: uno stream inattivo può nuovamente attivarsi, ad esempio se viene aggiunto un nuovo canale. Anziché mantenere un attributo e una funzione che generano confusione, il gruppo di lavoro ha deciso dirimuoverlo.
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 comportato la rimozione di alcuna funzionalità reale:
le procedure per scollegare i dispositivi di origine e così via devono essere eseguite su
MediaStreamTrack
comunque. Utilizza 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
A quanto pare, nessuno è riuscito a capire come utilizzare questa proprietà.
MediaStream.label
era stato aggiunto alla prima versione della specifica, ma nessuno sapeva bene a cosa serviva.label
Inoltre, non era chiaro cosa succedesse a label
quando veniva inviato un stream tramite RTCPeerConnection
.
Il gruppo di lavoro W3C ha chiesto in giro e nessuno lo voleva, quindi è stato rimosso.
Per riepilogare: MediaStream.id
fornisce un identificatore univoco per un
MediaStream
e MediaStreamTrack.label
fornisce il nome della sorgente
di uno stream, ad esempio il tipo di videocamera o microfono.
Puoi trovare ulteriori informazioni su MediaStream
e MediaStreamTrack
nella Mozilla Developer Network, mentre HTML5 Rocks offre un'eccellente introduzione a getUserMedia()
nella sezione 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'Intent to Implement.