Si trabajas con getUserMedia()
o WebRTC, es posible que debas ajustar el código
para Chrome 45 y versiones posteriores.
La API de MediaStream representa transmisiones de medios sincronizadas. Por ejemplo, una transmisión tomada de la cámara y la entrada de micrófono tiene pistas de video y audio sincronizadas. Cada pista está representado por 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 adiciones:
MediaStream.active
MediaStreamTrack.stop()
Esto requiere los siguientes cambios:
- Usa
MediaStream.active
para verificar siMediaStream
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 por humanos para el dispositivo de origen de una transmisión, p.ej., Cámara HD FaceTime (integrada) (05ac:8510).
Puedes verlas en acción: abre simpl.info/gum en
Chrome (en un dispositivo con cámara) y visualiza la consola de Herramientas para desarrolladores de Chrome. El
El objeto MediaStream stream
se pasa a la devolución de llamada getUserMedia()
en esta
de prueba está dentro del alcance global, por lo que puedes inspeccionarla desde la consola. Llamada
stream.getTracks()[0]
para ver las MediaStreamTrack
de esta transmisión.
Stop(), finalizado y activo
Cuando el grupo de trabajo de W3C sobre captura y transmisiones de contenido multimedia analizó el problema de lo que ocurre cuando agregas pistas nuevas a un MediaStream
,
y si finaliza un MediaStream
vacío, se dieron cuenta de que había
No hay una forma razonable de implementar ended
en un MediaStream
(como "no volverá a comenzar"). En otras partes de HTML5 "finalizado" significa que esto finalizó y
nunca reanudar". “Activo” no tiene esa implicación: una transmisión inactiva puede
vuelve 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 un flujo:
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 quita ninguna funcionalidad real:
procesos para desconectar los dispositivos de origen y así sucesivamente 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
Resulta que nadie pudo encontrar el uso de esta propiedad.
MediaStream.label
se había agregado a la primera versión de la especificación, pero nadie sabía
para qué era label
. Tampoco estaba claro qué le sucedió a label
cuando se realizó una transmisión
se envió a través de RTCPeerConnection
.
El grupo de trabajo del W3C realizó una pregunta y nadie lo quiso, así que lo eliminaron.
Recuerda: MediaStream.id
proporciona un identificador único para un
MediaStream
y MediaStreamTrack.label
proporcionan 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
de la Red de desarrolladores de Mozilla y
HTML5 Rocks ofrece una excelente introducción a getUserMedia()
en
Cómo capturar audio y Video
Como siempre, agradecemos tus comentarios sobre los cambios en Chrome. Sigue los errores de estas bajas (aquí y aquí) y obtén más información y detalles en Intent to Implement.