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 de contenido multimedia sincronizadas. Por ejemplo, una transmisión tomada de la entrada de la cámara y el micrófono tiene pistas de audio y video sincronizadas. Cada pista se representa con un MediaStreamTrack. (No debe confundirse 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()

Para ello, se deben realizar 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 un MediaStream, usa MediaStream.id en lugar de MediaStream.label. MediaStreamTrack.label proporciona un nombre legible por humanos para el dispositivo de origen de una transmisión, p.ej., Cámara HD de FaceTime (integrada) (05ac:8510).

Puedes ver esto en acción: abre simpl.info/gum en Chrome (en un dispositivo con cámara) y ve la consola de Chrome DevTools. El objeto MediaStream stream que se pasa a la devolución de llamada getUserMedia() en esta demostración tiene 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(), ended y active

Cuando el grupo de trabajo de Media Capture and Streams del W3C analizó el problema de lo que sucede cuando se agregan pistas nuevas a un MediaStream y si se finaliza un MediaStream vacío, se dieron cuenta de que no había una forma sensata de implementar ended en un MediaStream (como en “nunca se volverá a iniciar”). En otras partes de HTML5, "ended" significa "finalizó y nunca se reanudará". "Activo" no tiene esa implicación: una transmisión inactiva puede volver a ser activa, por ejemplo, si se le agrega una pista nueva. 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, etcétera, deben realizarse en MediaStreamTrack de todos modos. Usa stop() en MediaStreamTrack en su lugar:

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

Resulta que nadie podía encontrarle un uso a esta propiedad.

Se agregó MediaStream.label a la primera versión de la especificación, pero nadie sabía para qué servía label. Tampoco estaba claro qué sucedía con label cuando se enviaba una transmisión a través de RTCPeerConnection.

El grupo de trabajo del W3C preguntó y nadie lo quería, por lo que lo quitaron.

En resumen, 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.

Puedes obtener más información sobre MediaStream y MediaStreamTrack en la Red de desarrolladores de Mozilla. HTML5 Rocks proporciona una excelente introducción a getUserMedia() en Captura de 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 información y detalles en el Intento de implementación.