Fundo

Fundo

Fundo

Estou tentando controlar a entrada de um aplicativo Web WebRTC em execução no Chrome, controlado pelo Selenium, dentro de um contêiner Docker.

Isso faz parte de um teste automatizado do aplicativo WebRTC.

Como parte do teste, desejo enviar áudio controlado e vídeo (de preferência controlado) para o Chrome em execução no Docker.

eu já tenhoentrada de áudio controlável usando um dispositivo de áudio falso, mas usar isso significa que tenho um microfone "real" no Chrome e não posso usar a funcionalidade do dispositivo falso para emular a entrada de vídeo.
A função do recurso --use-file-for-fake-audio-capture do Chrome só funciona se --use-fake-device-for-media-stream também estiver ativo, o que desativará o acesso à entrada do microfone do sistema.

Problema

Preciso emular uma webcam de forma que ela possa ser usada no Chrome para uma videochamada WebRTC, tudo dentro de um contêiner Docker.
Idealmente, eu também deveria ser capaz de controlar a imagem daquela webcam falsa.

Eu me deparei com vários posts onde as pessoas conseguiram contêineres Docker para usar dispositivos de webcam (incluindo falsos) no sistema host, mas isso é um mapeamento para um único dispositivo no host, e quero poder executar vários Docker contêineres (20+) no mesmo host, cada um com seu próprio dispositivo de webcam exclusivo.

A maneira padrão de fazer isso parece ser usando o driver v4l2loopback, mas esse é um módulo do kernel, e o Docker usa o kernel do host e, portanto, não pode carregar seus próprios módulos dentro dos contêineres.

Em teoria, seria possível criar vários dispositivos de webcam falsos nos hosts e depois mapear cada um deles para um contêiner Docker, embora isso fosse um pesadelo logístico (o teste precisaria controlar as câmeras no host, em vez de conversar com os contêineres), e v4l2loopback é limitado a 8 dispositivos em qualquer caso (novamente, teoricamente eu poderia recompilar o driver para suportar mais).

Parece que o que estou realmente procurando é uma maneira de falsificar um dispositivo de webcam no espaço do usuário em vez do espaço do kernel.
Eu encontrei um driver de webcam no espaço do usuário chamadoUV4L, mas é para o Raspberry Pi (arquitetura ARM).

Pergunta

Alguém conhece uma maneira de controlar o vídeo no dispositivo de captura do Chrome dentro de um contêiner Docker, usando um dispositivo de captura falso no espaço do usuário ou por algum outro meio?

informação relacionada