Se você trabalha com getUserMedia()
ou WebRTC, talvez seja necessário ajustar seu código
para o Chrome 45 e versões mais recentes.
A API MediaStream representa streams de mídia sincronizados. Por exemplo, um stream feito da entrada de câmera e microfone tem faixas de vídeo e áudio sincronizadas. Cada faixa é representada por uma MediaStreamTrack. Não confunda com o elemento <track>.
Há três descontinuações de MediaStream
no Chrome 45:
MediaStream.ended
MediaStream.label
MediaStream.stop()
Em paralelo, há duas adições:
MediaStream.active
MediaStreamTrack.stop()
Isso exige as seguintes mudanças:
- Use
MediaStream.active
para verificar se umMediaStream
está sendo transmitido, e nãoMediaStream.ended
. - Use
MediaStreamTrack.stop()
para interromper o streaming, e nãoMediaStream.stop()
. - Se você precisar de um identificador exclusivo para um
MediaStream
, useMediaStream.id
em vez deMediaStream.label
.MediaStreamTrack.label
fornece um nome legível por humanos para o dispositivo de origem de um stream, por exemplo, FaceTime HD Camera (Built-in) (05ac:8510).
Você pode conferir isso em ação: abra simpl.info/gum no
Chrome (em um dispositivo com uma câmera) e confira o console do Chrome DevTools. O
objeto MediaStream stream
transmitido para o callback getUserMedia()
nesta
demonstração está no escopo global, para que você possa inspecionar no console. Chame
stream.getTracks()[0]
para conferir o MediaStreamTrack
dessa transmissão.
Stop(), encerrada e ativa
Quando o grupo de trabalho do W3C Media Capture and Streams analisou o problema do que acontece quando você adiciona novas faixas a um MediaStream
e se um MediaStream
vazio é encerrado, eles perceberam que não havia
nenhuma maneira sensata de implementar ended
em um MediaStream
(como em "nunca vai começar de novo"). Em outras partes do HTML5, "ended" significa "isso acabou e nunca será
retomado". "Ativo" não tem essa implicação: um fluxo inativo pode
voltar a ser ativo, por exemplo, se uma nova faixa for adicionada a ele. Em vez de manter um atributo e uma função confusos, o grupo de trabalho decidiu
remover.
Confira um exemplo de como usar "MediaStream.active" para verificar o status de uma transmissão:
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
}
A remoção de stop()
de MediaStream
não removeu nenhuma funcionalidade real:
os processos para desconectar dispositivos de origem e assim por diante precisam ser feitos em
MediaStreamTrack
de qualquer maneira. Use stop()
em 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);
});
o rótulo.
Acontece que ninguém conseguiu descobrir um uso para essa propriedade.
MediaStream.label
foi adicionado à primeira versão da especificação, mas ninguém sabia
para que label
servia. Também não estava claro o que acontecia com label
quando um stream
era enviado por RTCPeerConnection
.
O Grupo de Trabalho do W3C perguntou, e ninguém queria, então ele foi removido.
Para reiterar: MediaStream.id
fornece um identificador exclusivo para um
MediaStream
, e MediaStreamTrack.label
fornece o nome da origem
de um stream, como o tipo de câmera ou microfone.
Mais informações sobre MediaStream
e MediaStreamTrack
estão disponíveis
na Mozilla Developer Network, e
o HTML5 Rocks oferece uma excelente introdução a getUserMedia()
em
Captura de áudio e vídeo.
Como sempre, agradecemos seu feedback sobre as mudanças no Chrome. Acompanhe os bugs dessas descontinuações (neste link e neste link) e encontre mais discussões e detalhes na página Intent to Implement.