Abandon de MediaStream

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

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