Solución:
EDITAR
Dado que esta respuesta se publicó originalmente, la API del navegador ha cambiado.
.stop()
ya no está disponible en la transmisión que se pasa a la devolución de llamada. El desarrollador deberá acceder a las pistas que componen la transmisión (audio o video) y detener cada una de ellas de forma individual.
Más información aquí: https://developers.google.com/web/updates/2015/07/mediastream-deprecations?hl=en#stop-ended-and-active
Ejemplo (del enlace de arriba):
stream.getTracks().forEach(function(track) {
track.stop();
});
El soporte del navegador puede diferir.
Respuesta original
navigator.getUserMedia
le proporciona una secuencia en la devolución de llamada exitosa, puede llamar .stop()
en esa transmisión para detener la grabación (al menos en Chrome, parece que a FF no le gusta)
Utilice cualquiera de estas funciones:
// stop both mic and camera
function stopBothVideoAndAudio(stream) {
stream.getTracks().forEach(function(track) {
if (track.readyState == 'live') {
track.stop();
}
});
}
// stop only camera
function stopVideoOnly(stream) {
stream.getTracks().forEach(function(track) {
if (track.readyState == 'live' && track.kind === 'video') {
track.stop();
}
});
}
// stop only mic
function stopAudioOnly(stream) {
stream.getTracks().forEach(function(track) {
if (track.readyState == 'live' && track.kind === 'audio') {
track.stop();
}
});
}
No use stream.stop()
, está en desuso
Desactivaciones de MediaStream
Usar stream.getTracks().forEach(track => track.stop())