Abandon de MediaStream

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 si MediaStream est en streaming, 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 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 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.

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 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.