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 unMediaStream
está transmitiendo, noMediaStream.ended
. - Usa
MediaStreamTrack.stop()
para detener la transmisión, noMediaStream.stop()
. - Si necesitas un identificador único para un
MediaStream
, usaMediaStream.id
en lugar deMediaStream.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.
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.