Abandon de MediaStream

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 un MediaStream est en cours de diffusion, et non MediaStream.ended.
  • Utilisez MediaStreamTrack.stop() pour arrêter la diffusion, et non MediaStream.stop().
  • Si vous avez besoin d'un identifiant unique pour un MediaStream, utilisez MediaStream.id au lieu de MediaStream.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.

Capture d&#39;écran montrant MediaStream et MediaStreamTrack dans la console des outils pour les développeurs Chrome

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.