Captura e restrições de mídia

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.