背景
我正在尝试控制在 Chrome 上运行的 WebRTC Web 应用程序的输入,该应用程序由 Docker 容器内的 Selenium 控制。
这是 WebRTC 应用程序自动化测试的一部分。
作为测试的一部分,我想将受控的音频和(最好是受控的)视频发送到在 Docker 中运行的 Chrome 中。
我已经有了使用假音频设备控制音频输入,但使用这个功能意味着我在 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 架构)。
问题
是否有人知道如何在 Docker 容器内控制视频进入 Chrome 的捕获设备,无论是使用用户空间中的伪捕获设备,还是通过其他方式?