Bajas de MediaStream

Si trabajas con getUserMedia() o WebRTC, es posible que debas ajustar tu código para Chrome 45 y versiones posteriores.

La API de MediaStream representa transmisiones sincronizadas de contenido multimedia. Por ejemplo, una transmisión tomada de la entrada de la cámara y el micrófono tiene pistas de video y audio sincronizadas. Cada pista está representada por un MediaStreamTrack. (No se debe confundir con el elemento<track>).

Hay tres bajas de MediaStream en Chrome 45:

  • MediaStream.ended
  • MediaStream.label
  • MediaStream.stop()

En paralelo, hay dos incorporaciones:

  • MediaStream.active
  • MediaStreamTrack.stop()

Se requieren los siguientes cambios:

  • Usa MediaStream.active para verificar si un MediaStream está transmitiendo, no MediaStream.ended.
  • Usa MediaStreamTrack.stop() para detener la transmisión, no MediaStream.stop().
  • Si necesitas un identificador único para una MediaStream, usa MediaStream.id en lugar de MediaStream.label. MediaStreamTrack.label: Proporciona un nombre legible para el dispositivo de origen de una transmisión, p.ej., Cámara HD FaceTime (integrada) (05ac:8510).

Puedes verlos en acción: abre simpl.info/gum en Chrome (en un dispositivo con cámara) y consulta la consola de las Herramientas para desarrolladores de Chrome. El objeto stream de MediaStream que se pasa a la devolución de llamada getUserMedia() en esta demostración está en alcance global, por lo que puedes inspeccionarlo desde la consola. Llama a stream.getTracks()[0] para ver el MediaStreamTrack de esta transmisión.

Captura de pantalla que muestra MediaStream y MediaStreamTrack en la consola de Herramientas para desarrolladores de Chrome

Stop(), finalizado y activo

Cuando el grupo de trabajo de transmisiones y captura de contenido multimedia de W3C analizó el problema de lo que sucede cuando agregas pistas nuevas a un MediaStream y si finaliza un MediaStream vacío, se dieron cuenta de que no había una forma razonable de implementar ended en una MediaStream (como en "nunca se volverá a iniciar"). En otras partes del código HTML5, "finalizado" significa que "esto ha finalizado y nunca se reanudará". "Activo" no tiene esa implicación: una transmisión inactiva puede volver a activarse, por ejemplo, si se le agrega un segmento nuevo. En lugar de mantener un atributo y una función confusos, el grupo de trabajo decidió quitarlo.

Este es un ejemplo de cómo usar “MediaStream.active” para verificar el estado de una transmisión:

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
}

Quitar stop() de MediaStream no quitó ninguna funcionalidad real: los procesos para desconectar dispositivos de origen, entre otros, deben realizarse en MediaStreamTrack de todos modos. En su lugar, usa stop() en 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);
    });

etiqueta de recurso

Resulta que nadie pudo encontrar el uso de esta propiedad.

Se agregó MediaStream.label a la primera versión de la especificación, pero nadie sabía realmente para qué era label. Tampoco quedó claro qué le sucedió a label cuando se envió una transmisión a través de RTCPeerConnection.

El grupo de trabajo de W3C hicieron una pregunta y nadie lo quiso, así que lo eliminaron.

En conclusión: MediaStream.id proporciona un identificador único para un MediaStream y MediaStreamTrack.label proporciona el nombre de la fuente de una transmisión, como el tipo de cámara o micrófono.

Hay más información disponible sobre MediaStream y MediaStreamTrack en Mozilla Developer Network. Además, HTML5 Rocks proporciona una excelente introducción a getUserMedia() en Cómo capturar audio y video.

Como siempre, agradecemos tus comentarios sobre los cambios en Chrome. Puedes seguir los errores de estas bajas (aquí y aquí) y encontrar más análisis y detalles en Intent de implementar.