Hintergrund
Ich versuche, die Eingabe für eine WebRTC-Webanwendung zu steuern, die auf Chrome ausgeführt und von Selenium in einem Docker-Container gesteuert wird.
Dies ist Teil eines automatisierten Tests der WebRTC-Anwendung.
Im Rahmen des Tests möchte ich kontrolliertes Audio und (vorzugsweise kontrolliertes) Video in den im Docker laufenden Chrome senden.
ich habe schonsteuerbarer Audioeingang über ein gefälschtes Audiogerät, aber wenn ich das verwende, habe ich in Chrome ein „echtes“ Mikrofon und kann dessen Fake-Device-Funktionalität nicht verwenden, um Videoeingaben zu emulieren. Die
Funktion --use-file-for-fake-audio-capture von Chrome funktioniert nur, wenn auch --use-fake-device-for-media-stream aktiv ist, wodurch der Zugriff auf die Mikrofoneingabe des Systems deaktiviert wird.
Problem
Ich brauche eine Möglichkeit, eine Webcam so zu emulieren, dass sie in Chrome für einen WebRTC-Videoanruf verwendet werden kann, alles innerhalb eines Docker-Containers.
Idealerweise sollte ich auch das Bild in dieser gefälschten Webcam steuern können.
Ich bin auf mehrere Posts gestoßen, in denen es Leuten gelungen ist, Docker-Container dazu zu bringen, Webcam-Geräte (auch gefälschte) auf dem Hostsystem zu verwenden. Dabei handelt es sich jedoch um eine Zuordnung zu einem einzelnen Gerät auf dem Host, und ich möchte mehrere Docker-Container (20+) auf demselben Host ausführen können, jeder mit seinem eigenen, einzigartigen Webcam-Gerät.
Die Standardmethode hierfür scheint die Verwendung des v4l2loopback-Treibers zu sein, aber das ist ein Kernelmodul, und Docker verwendet den Kernel des Hosts und kann daher seine eigenen Module nicht in Container laden.
Theoretisch wäre es möglich, mehrere gefälschte Webcam-Geräte auf den Hosts zu erstellen und diese dann jeweils einem Docker-Container zuzuordnen. Dies wäre jedoch ein logistischer Albtraum (der Test müsste die Kameras auf dem Host steuern, anstatt mit den Containern zu kommunizieren) und v4l2loopback ist in jedem Fall auf 8 Geräte beschränkt (auch hier könnte ich den Treiber theoretisch neu kompilieren, um mehr Geräte zu unterstützen).
Es scheint, dass ich wirklich nach einer Möglichkeit suche, ein Webcam-Gerät im Benutzerbereich statt im Kernelbereich vorzutäuschen.
Ich habe einen Userspace-Webcam-Treiber namensUV4L, aber es ist für Raspberry Pi (ARM-Architektur).
Frage
Kennt jemand eine Möglichkeit, wie ich die Videoübertragung in das Aufnahmegerät von Chrome in einem Docker-Container steuern kann, entweder mithilfe eines gefälschten Aufnahmegeräts im Benutzerbereich oder auf andere Weise?