Se você trabalha com getUserMedia()
ou WebRTC, talvez seja necessário ajustar seu código
para o Chrome 45 e superior.
A API MediaStream representa streams de mídia sincronizados. Por exemplo, um stream tirado de uma câmera entrada de microfone tem faixas de áudio e vídeo 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()
Elas exigem as seguintes mudanças:
- Use
MediaStream.active
para verificar se umMediaStream
está sendo transmitido, nãoMediaStream.ended
. - Use
MediaStreamTrack.stop()
para interromper o streaming, 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 um stream. Por exemplo: Câmera HD FaceTime (integrada) (05ac:8510).
Você pode ver esses recursos em ação: abra simpl.info/gum em
Chrome (em um dispositivo com câmera) e acesse o console do Chrome DevTools. A
O objeto stream
do MediaStream transmitido ao callback getUserMedia()
neste
está no escopo global, então você pode inspecioná-la no console. Ligação
stream.getTracks()[0]
para ver o MediaStreamTrack
deste stream.
Stop(), finalizado e ativo
Quando o grupo de trabalho W3C Captura de mídia e streams analisou o problema do que acontece quando você adiciona novas faixas a uma MediaStream
,
e, mesmo que uma MediaStream
vazia seja finalizada, ela percebeu que
não há uma maneira razoável de implementar ended
em um MediaStream
(como "nunca começará novamente"). Em outras partes do HTML5 "finalizado" significa que "isso terminou e
nunca retomar". "Ativo" não tem essa implicação: um fluxo inativo pode
ficar ativas novamente, por exemplo, se uma nova faixa for adicionada a ela. Em vez de manter um atributo e uma função confusos, o Grupo de trabalho decidiu
removê-lo.
Este é um exemplo de como usar "MediaStream.active" para verificar o status de um 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:
processos para desanexar dispositivos de origem e assim por diante precisam ser realizados
MediaStreamTrack
mesmo assim. 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 consegue descobrir uma utilidade para essa propriedade.
MediaStream.label
tinha sido adicionado à primeira versão da especificação, mas ninguém realmente sabia
para o que era label
. Também não ficou claro o que acontecia com label
quando uma transmissão
foi enviado via RTCPeerConnection
.
O grupo de trabalho W3C perguntou, e como ninguém queria, ele foi removido.
Para reiterar, MediaStream.id
fornece um identificador exclusivo para uma
MediaStream
e MediaStreamTrack.label
fornecem 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
do Mozilla Developer Network (em inglês) e
O HTML5 Rocks fornece uma excelente introdução ao 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 (aqui e aqui) e encontre mais discussões e detalhes na Intent de implementação.