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 diMediaStream
, non diMediaStream.ended
. - Usa
MediaStreamTrack.stop()
per interrompere lo streaming, nonMediaStream.stop()
. - Se ti serve un identificatore univoco per un
MediaStream
, utilizzaMediaStream.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.
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.