A parte de mídia do WebRTC aborda como acessar hardware capaz de capturar vídeo e áudio, como câmeras e microfones, e a forma como os streams de mídia funcionam. Ele também cobre mídia de exibição, que é como um aplicativo capturando.
Dispositivos portáteis de mídia
Todos os microfones e câmeras com suporte no navegador são acessados e
gerenciados pelo objeto navigator.mediaDevices
. Os aplicativos podem recuperar
a lista atual de dispositivos conectados e também ouvir as mudanças, já que muitos
As câmeras e os microhpones são conectados por USB e podem ser conectados a
desconectados durante o ciclo de vida do aplicativo. Como o estado de um arquivo
dispositivo pode mudar a qualquer momento, é recomendável que os aplicativos se registrem no
mudanças no dispositivo para lidar adequadamente com as alterações.
Restrições
Ao acessar dispositivos de mídia, é recomendável fornecer o máximo máxima possível. Embora seja possível abrir a câmera padrão e com uma limitação simples, ele pode fornecer um fluxo de mídia muito distante do mais ideal para o aplicativo.
As restrições específicas são definidas em um objeto MediaTrackConstraint
, um para
áudio e outra para vídeo. Os atributos neste objeto são do tipo
ConstraintLong
, ConstraintBoolean
, ConstraintDouble
ou
ConstraintDOMString
. Eles podem ser um valor específico (por exemplo, um número,
booleano ou string), um intervalo (LongRange
ou DoubleRange
com um valor mínimo e
valor máximo) ou um objeto com uma definição ideal
ou exact
. Para um
valor específico, o navegador tentará escolher algo o mais próximo possível.
Para um intervalo, o melhor valor nesse intervalo será usado. Quando exact
for
especificada, somente os streams de mídia que correspondem exatamente a essa restrição serão
retornados.
Próximo a
// Camera with a resolution as close to 640x480 as possible
{
"video": {
"width": 640,
"height": 480
}
}
Intervalo
// Camera with a resolution in the range 640x480 to 1024x768
{
"video": {
"width": {
"min": 640,
"max": 1024
},
"height": {
"min": 480,
"max": 768
}
}
}
Exata
// Camera with the exact resolution of 1024x768
{
"video": {
"width": {
"exact": 1024
},
"height": {
"exact": 768
}
}
}
Para determinar a configuração real que uma determinada faixa de um fluxo de mídia tem,
podemos chamar MediaStreamTrack.getSettings()
, que retorna
MediaTrackSettings
aplicada no momento.
Também é possível atualizar as restrições de uma faixa a partir de um dispositivo de mídia
foram abertos, chamando applyConstraints()
na faixa. Isso permite que um
reconfigura um dispositivo de mídia sem precisar fechar o
fluxo atual.
Mídia de exibição
Um aplicativo que queira realizar captura e gravação de tela
precisa usar a API Display Media. A função getDisplayMedia()
(que é parte
de navigator.mediaDevices
é semelhante a getUserMedia()
e é usada para o
finalidade de abrir o conteúdo da tela (ou uma parte dela, como uma
). O MediaStream
retornado funciona da mesma forma que quando você usa
getUserMedia()
.
As restrições para getDisplayMedia()
são diferentes das usadas para
entrada de vídeo ou áudio.
{
video: {
cursor: 'always' | 'motion' | 'never',
displaySurface: 'application' | 'browser' | 'monitor' | 'window'
}
}
O trecho de código acima mostra como as restrições especiais para gravação de tela funciona. Observe que elas podem não ser compatíveis com todos os navegadores com as suporte de mídia.
Streams e faixas
Um MediaStream
representa um stream de conteúdo de mídia, que consiste em faixas.
(MediaStreamTrack
) de áudio e vídeo. É possível recuperar todas as faixas do
MediaStream
chamando MediaStream.getTracks()
, que retorna uma matriz de
objetos MediaStreamTrack
.
MediaStreamTrack
Um MediaStreamTrack
tem uma propriedade kind
que é audio
ou video
.
indicando o tipo de mídia que ela representa. Para desativar o som de cada faixa, use o botão
a propriedade enabled
. Uma faixa tem uma propriedade booleana remote
que indica
se proveniente de um RTCPeerConnection
e de um peer remoto.