Fondo

Fondo

Fondo

Estoy intentando controlar la entrada a una aplicación web WebRTC que se ejecuta en Chrome, controlada por Selenium, dentro de un contenedor Docker.

Esto es parte de una prueba automatizada de la aplicación WebRTC.

Como parte de la prueba, quiero enviar audio controlado y video (preferiblemente controlado) a Chrome que se ejecuta en Docker.

ya tengoentrada de audio controlable usando un dispositivo de audio falso, pero usarlo significa que tengo un micrófono "real" en Chrome y no puedo usar la funcionalidad de su dispositivo falso para emular la entrada de video.
La función --use-file-for-fake-audio-capture de Chrome solo funciona si --use-fake-device-for-media-stream también está activa, lo que deshabilitará el acceso a la entrada del micrófono del sistema.

Problema

Necesito una forma de emular una cámara web de tal manera que pueda usarse en Chrome para una videollamada WebRTC, todo dentro de un contenedor Docker.
Idealmente, también debería poder controlar la imagen en esa cámara web falsa.

Me encontré con varias publicaciones en las que las personas lograron que los contenedores Docker usaran dispositivos de cámara web (incluidos los falsos) en el sistema host, pero eso es una asignación a un solo dispositivo en el host, y quiero poder ejecutar varios Docker. contenedores (más de 20) en el mismo host, cada uno con su propio dispositivo de cámara web exclusivo.

La forma estándar de hacer esto parece ser usar el controlador v4l2loopback, pero ese es un módulo del kernel y Docker usa el kernel del host y, por lo tanto, no puede cargar sus propios módulos dentro de los contenedores.

En teoría, sería posible crear múltiples dispositivos de cámara web falsos en los hosts y luego asignar cada uno de ellos a un contenedor Docker, aunque eso sería una pesadilla logística (la prueba necesitaría controlar las cámaras en el host, en lugar de hablar con ellos). los contenedores), y v4l2loopback está limitado a 8 dispositivos en cualquier caso (nuevamente, en teoría podría recompilar el controlador para admitir más).

Parece que lo que realmente estoy buscando es alguna forma de falsificar un dispositivo de cámara web en el espacio del usuario en lugar del espacio del kernel.
Encontré un controlador de cámara web en el espacio de usuario llamadoUV4L, pero es para Raspberry Pi (arquitectura ARM).

Pregunta

¿Alguien conoce alguna forma de controlar el video en el dispositivo de captura de Chrome dentro de un contenedor Docker, ya sea usando un dispositivo de captura falso en el espacio de usuario o mediante algún otro medio?

información relacionada