Si vous travaillez avec getUserMedia()
ou WebRTC, vous devrez peut-être ajuster votre code pour Chrome 45 et versions ultérieures.
L'API MediaStream représente des flux multimédias synchronisés. Par exemple, un flux provenant de l'entrée de la caméra et du micro comporte des pistes vidéo et audio synchronisées. Chaque piste est représentée par un MediaStreamTrack. (à ne pas confondre avec l'élément <track>)
Trois MediaStream
sont abandonnés dans Chrome 45:
MediaStream.ended
MediaStream.label
MediaStream.stop()
En parallèle, deux ajouts sont effectués:
MediaStream.active
MediaStreamTrack.stop()
Pour ce faire, vous devez apporter les modifications suivantes:
- Utilisez
MediaStream.active
pour vérifier si unMediaStream
est en streaming, et nonMediaStream.ended
. - Utilisez
MediaStreamTrack.stop()
pour arrêter la diffusion, et nonMediaStream.stop()
. - Si vous avez besoin d'un identifiant unique pour un
MediaStream
, utilisezMediaStream.id
au lieu deMediaStream.label
.MediaStreamTrack.label
fournit un nom lisible pour l'appareil source d'un flux, par exemple FaceTime HD Camera (Built-in) (05ac:8510) (Caméra FaceTime HD intégrée (05ac:8510)).
Vous pouvez les voir en action: ouvrez simpl.info/gum dans Chrome (sur un appareil équipé d'une caméra) et consultez la console des outils pour les développeurs Chrome. L'objet MediaStream stream
transmis au rappel getUserMedia()
dans cette démonstration est de portée globale. Vous pouvez donc l'inspecter depuis la console. Appelez stream.getTracks()[0]
pour afficher le MediaStreamTrack
de ce flux.
Stop(), terminé et actif
Lorsque le groupe de travail du W3C sur la capture et les flux multimédias a examiné le problème de ce qui se passe lorsque vous ajoutez de nouveaux canaux à un MediaStream
et si un MediaStream
vide est terminé, il a réalisé qu'il n'existait aucun moyen raisonnable d'implémenter ended
sur un MediaStream
(par exemple, "ne démarrera jamais à nouveau"). Dans d'autres parties de HTML5, "terminé" signifie "cette action est terminée et ne sera jamais reprise". "Actif" n'a aucune telle implication: un flux inactif peut redevenir actif, par exemple si un nouveau titre y est ajouté. Plutôt que de conserver un attribut et une fonction déroutants, le groupe de travail a décidé de les supprimer.
Voici un exemple d'utilisation de "MediaStream.active" pour vérifier l'état d'un flux:
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 suppression de stop()
de MediaStream
n'a pas supprimé de fonctionnalité réelle : les processus de détachement des appareils sources, etc. doivent être effectués sur MediaStreamTrack
. Utilisez plutôt stop()
sur 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);
});
étiquette
Il s'a avéré que personne ne savait vraiment quoi faire de cette propriété.
MediaStream.label
a été ajouté à la première version de la spécification, mais personne ne savait vraiment à quoi label
servait. Il n'était pas non plus clair ce qu'il se passait avec label
lorsqu'un flux était envoyé via RTCPeerConnection
.
Le groupe de travail du W3C a demandé aux autres membres s'ils voulaient l'utiliser, et comme personne ne le voulait, il a été supprimé.
Pour rappel, MediaStream.id
fournit un identifiant unique pour un MediaStream
et MediaStreamTrack.label
fournit le nom de la source d'un flux, tel que le type de caméra ou de micro.
Pour en savoir plus sur MediaStream
et MediaStreamTrack
, consultez le Mozilla Developer Network. HTML5 Rocks fournit une excellente introduction à getUserMedia()
dans Capturer de l'audio et de la vidéo.
Comme toujours, nous apprécions vos commentaires sur les modifications apportées à Chrome. Vous pouvez suivre les bugs liés à ces abandons (ici et ici) et en savoir plus dans l'Intent to Implement.