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