Si vous utilisez getUserMedia()
ou WebRTC, vous devrez peut-être ajuster votre code pour Chrome 45 et les versions ultérieures.
L'API MediaStream représente les flux multimédias synchronisés. Par exemple, un flux provenant d'une entrée de caméra et de micro dispose de pistes audio et vidéo synchronisées. Chaque piste est représentée par un élément MediaStreamTrack. (à ne pas confondre avec l'élément <track> !)
MediaStream
est abandonné à trois niveaux dans Chrome 45:
MediaStream.ended
MediaStream.label
MediaStream.stop()
Deux ajouts sont effectués en parallèle:
MediaStream.active
MediaStreamTrack.stop()
Celles-ci nécessitent les modifications suivantes:
- Utilisez
MediaStream.active
pour vérifier siMediaStream
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
MediaStream
, utilisezMediaStream.id
au lieu deMediaStream.label
.MediaStreamTrack.label
fournit un nom lisible pour l'appareil source d'un flux, par exemple Caméra HD FaceTime (intégrée) (05ac:8510).
Vous pouvez observer l'opération: ouvrez simpl.info/gum dans Chrome (sur un appareil doté d'une caméra) et affichez la console des outils pour les développeurs Chrome. L'objet MediaStream stream
transmis au rappel getUserMedia()
dans cette démonstration est dans un champ d'application global. Vous pouvez donc l'inspecter à partir de la console. Appelez stream.getTracks()[0]
pour afficher l'élément MediaStreamTrack
de ce flux.
Stop(), terminé et actif
Lorsque le groupe de travail W3C Media Capture and Streams a examiné le problème de ce qui se passe lorsque vous ajoutez de nouvelles pistes à un MediaStream
et a examiné si un MediaStream
vide se termine, il s'est rendu compte qu'il n'existait pas de moyen judicieux d'implémenter ended
sur un MediaStream
(comme dans "ne redémarrera jamais"). Dans d'autres parties de HTML5, le terme "terminé" signifie que le processus est terminé et ne reprendra jamais. L'état "Actif" n'implique aucune telle implication: un flux inactif peut redevenir actif, par exemple si une nouvelle piste lui est ajoutée. Plutôt que de conserver un attribut et une fonction déroutants, le groupe de travail a décidé de le 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 supprimé aucune fonctionnalité réelle : les processus de dissociation des appareils sources et autres 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'avère que personne n'a pu trouver une utilité pour cette propriété.
MediaStream.label
avait été ajouté à la première version de la spécification, mais personne ne savait vraiment à quoi sert label
. Ce qu'il était advenu de label
lorsqu'un flux a été envoyé via RTCPeerConnection
n'était pas clair.
Le groupe de travail du W3C s'est penché sur ce sujet, mais personne ne voulait l'obtenir, il l'a donc retiré.
Pour rappel, MediaStream.id
fournit un identifiant unique pour MediaStream
et MediaStreamTrack.label
fournit le nom de la source d'un flux, comme le type de caméra ou de micro.
Vous trouverez plus d'informations sur MediaStream
et MediaStreamTrack
sur Mozilla Developer Network. HTML5 Rocks constitue une excellente introduction à getUserMedia()
dans la section Capturer l'audio et la vidéo.
Comme toujours, vos commentaires sur les modifications apportées à Chrome nous sont très utiles. Vous pouvez suivre les bugs associés à ces abandons (ici et ici), et obtenir plus de détails et de discussions dans l'intention d'implémentation.