3

Фон

Я пытаюсь контролировать ввод в веб-приложение WebRTC, работающее на Chrome, управляемом Selenium, внутри контейнера Docker.

Это часть автоматизированного теста приложения WebRTC.

В рамках тестирования я хочу отправить контролируемое аудио и (предпочтительно контролируемое) видео в Chrome, работающий в Docker.

У меня уже есть управляемый аудиовход, использующий ложное аудиоустройство, но использование этого означает, что у меня есть "настоящий" микрофон в Chrome, и я не могу использовать его функциональные возможности для имитации видеовхода.
Функция Chrome --use-file-for-fake-audio-capture работает только в том случае, если --use-fake-device-for-media-stream также активен, что отключит доступ к входу микрофона системы.

проблема

Мне нужен способ эмулировать веб-камеру таким образом, чтобы ее можно было использовать в Chrome для видеовызова WebRTC, и все это внутри контейнера Docker.
В идеале я должен также иметь возможность контролировать изображение в этой поддельной веб-камере.

Я сталкивался с несколькими сообщениями, в которых люди успешно получили контейнеры Docker для использования устройств веб-камеры (включая поддельные) в хост-системе, но это сопоставление с одним устройством на хосте, и я хочу иметь возможность запускать несколько Docker. контейнеры (20+) на одном хосте, каждый со своим уникальным устройством веб-камеры.

Стандартный способ сделать это, кажется, использовать драйвер v4l2loopback, но это модуль ядра, и Docker использует ядро хоста и поэтому не может загружать свои собственные модули внутри контейнеров.

Теоретически было бы возможно создать несколько поддельных устройств веб-камеры на хостах и затем сопоставить каждое из них с контейнером Docker, хотя это было бы логистическим кошмаром (тест должен был бы управлять камерами на хосте, а не разговаривать с контейнеры), и v4l2loopback ограничен 8 устройствами в любом случае (опять же, теоретически я мог бы перекомпилировать драйвер для поддержки большего.)

Кажется, что я на самом деле ищу способ подделать устройство веб-камеры в пространстве пользователя, а не в пространстве ядра.
Я нашел драйвер пользовательской веб-камеры под названием UV4L, но он предназначен для Raspberry Pi (архитектура ARM).

Вопрос

Кто-нибудь знает способ, которым я мог бы управлять видео на устройстве захвата Chrome внутри контейнера Docker, используя поддельное устройство захвата в пользовательском пространстве, или с помощью других средств?

1 ответ1

0

Спасибо за отличный пост об эмуляции аудиовхода. Что касается веб-камеры, пробовали ли вы использовать следующий параметр Chrome:--use-file-for-fake-video-capture

https://cs.chromium.org/chromium/src/media/base/media_switches.cc?q=kUseFileForFakeVideoCapture&sq=package:chromium&type=cs&l=104

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .