Si vous utilisez getUserMedia()
ou WebRTC, vous devrez peut-être ajuster votre code
pour Chrome 45 et versions ultérieures.
L'API MediaStream représente des flux de contenus multimédias synchronisés. Par exemple, un flux issu d'une caméra et les pistes audio et vidéo de l'entrée du micro sont synchronisées. Chaque piste est représentées par MediaStreamTrack : À ne pas confondre avec l'élément <track>.
Trois abandons de MediaStream
sont concernés dans Chrome 45:
MediaStream.ended
MediaStream.label
MediaStream.stop()
En parallèle, il y a deux ajouts:
MediaStream.active
MediaStreamTrack.stop()
Celles-ci nécessitent les modifications suivantes:
- Utilisez
MediaStream.active
pour vérifier si unMediaStream
est en cours de diffusion, 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, Caméra HD FaceTime (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 affichez la console des outils pour les développeurs Chrome. La
L'objet MediaStream stream
a été transmis au rappel getUserMedia()
dans cette
La démo a un champ d'application global. Vous pouvez donc l'inspecter depuis la console. Appeler
stream.getTracks()[0]
pour afficher les MediaStreamTrack
de ce flux.
Stop(), terminé et actif
Lorsque le groupe de travail du W3C Media Capture and Streams (Enregistrement multimédia et flux) a examiné le problème de ce qui se produisait lorsque vous ajoutez de nouveaux titres à une MediaStream
,
et si une MediaStream
vide est terminée, elle s'est rendu compte qu'il y avait
aucune manière logique d'implémenter ended
sur une MediaStream
(comme dans "Ne redémarrera jamais"). Dans d'autres parties du HTML5 signifie "Cette opération est terminée et
ne jamais reprendre". "Active" n'implique aucune conséquence: un flux inactif peut
sont réactivés, par exemple si un nouveau canal y est ajouté. Plutôt que de conserver une caractéristique et une fonction qui prêtent à confusion, le groupe de travail a décidé de
le supprimer.
Voici un exemple d'utilisation de "MediaStream.active" pour vérifier l'état d'une 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 dissociation
des périphériques sources, etc., doivent être effectués
MediaStreamTrack
quand même. 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 l'utilité de cette propriété.
MediaStream.label
avait été ajouté à la première version de la spécification, mais personne ne le savait vraiment
à quoi sert label
. Nous n'avons pas pu savoir ce qu'il était advenu de label
lorsqu'une diffusion en direct
a été envoyé par RTCPeerConnection
.
Le groupe de travail du W3C a posé des questions, mais personne ne le voulait, et l'a donc supprimé.
Pour rappel, MediaStream.id
fournit un identifiant unique pour une
MediaStream
et MediaStreamTrack.label
indiquent 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
du Mozilla Developer Network et
HTML5 Rocks est une excellente introduction à getUserMedia()
Capturer l'audio et Vidéo.
Comme toujours, vos commentaires sur les modifications apportées à Chrome nous sont très utiles. Vous pouvez suivre les bugs pour ces abandons (ici et ici). Pour en savoir plus et obtenir plus de détails, consultez l'intention d'implémentation.