Se você trabalha com getUserMedia()
ou WebRTC, talvez seja necessário ajustar seu código
para o Chrome 45 e posterior.
A API MediaStream representa fluxos de mídia sincronizados. Por exemplo, um stream extraído da entrada de câmera e microfone tem faixas de vídeo e áudio sincronizadas. Cada faixa é representada por um 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()
Eles exigem as seguintes mudanças:
- Use
MediaStream.active
para verificar se umMediaStream
está fazendo streaming, nãoMediaStream.ended
. - Use
MediaStreamTrack.stop()
para interromper a transmissão, nãoMediaStream.stop()
. - Se você precisar de um identificador exclusivo para uma
MediaStream
, useMediaStream.id
em vez deMediaStream.label
.MediaStreamTrack.label
fornece um nome legível para o dispositivo de origem de uma transmissão, por exemplo, Câmera FaceTime HD (integrada) (05ac:8510).
Confira como isso funciona: abra simpl.info/gum no
Chrome (em um dispositivo com uma câmera) e acesse o console do Chrome DevTools. O
objeto stream
do MediaStream transmitido para o callback getUserMedia()
nesta
demonstração está no escopo global. Portanto, você pode inspecioná-lo no console. Chame stream.getTracks()[0]
para visualizar o MediaStreamTrack
desse stream.
Stop(), finalizado e ativo
Quando o grupo de trabalho do W3C de captura de mídia e streams analisou o problema do que acontece quando você adiciona novas faixas a um MediaStream
,
e se um MediaStream
vazio era encerrado, eles perceberam que não havia
uma maneira sensata de implementar ended
em um MediaStream
(como em "nunca vai começar novamente"). Em outras partes do HTML5, "finalizado" significa que "foi encerrado e nunca será retomado". "Ativo" não tem essa implicação: um fluxo inativo pode
ficar ativo novamente, 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 removê-los.
Confira um exemplo de como usar "MediaStream.active" para verificar o status de um stream:
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 removia nenhuma funcionalidade real:
os processos para remover dispositivos de origem e assim por diante precisam ser feitos no
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);
});
Rótulo
Ninguém conseguiu descobrir um uso para essa propriedade.
MediaStream.label
tinha sido adicionado à primeira versão da especificação, mas ninguém sabia
para que serve label
. Também não ficou claro o que acontecia com label
quando um stream
era enviado via RTCPeerConnection
.
O grupo de trabalho do W3C perguntou por aí, e ninguém queria a plataforma, então a remoção foi feita.
Para reiterar: MediaStream.id
fornece um identificador exclusivo para uma
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 fornece uma excelente introdução a getUserMedia()
em
Como capturar áudio e vídeo.
Como sempre, agradecemos seu feedback sobre as alterações no Chrome. Confira os bugs dessas descontinuações (neste link e neste link) e encontre mais detalhes e discussões em Intent de implementação.