Docker Firefox 中的 getUserMedia 在使用音频时不起作用

getUserMedia in Firefox in Docker not working when using audio

在 Docker 中使用 Firefox 52+ 时,我遇到了 WebRTC getUserMedia 函数的奇怪行为。重现它的步骤是:

1) 运行 Docker 中的 Selenium Hub:

docker run --rm --name selenium-hub -p 4444:4444 selenium/hub:3.4.0

2) 在中心注册一个 Firefox 浏览器:

docker run --rm --link selenium-hub:hub -p 5555:5555 -p 5900:5900 selenium/node-firefox-debug:3.4.0

注意 1:此命令使用 node-firefox 映像的调试版本,因为我们想使用 VNC[=23= 连接到浏览器(在容器中) ]

注意2:这个版本(3.4.0)使用的是Firefox 53。从Firefox 52(即52、53、54)开始也出现这个问题,但问题确实存在在 Firefox 51 中不会发生 (node-firefox-debug:3.1.0)

3) 使用VNC客户端连接浏览器(URL in Linux:vnc://127.0.0.1:5900,密码:secret)

4) 强制在 dockerized 浏览器中使用虚假媒体。这可以通过在 Firefox 的高级配置(选项卡 about:config)中设置 true 配置键 media.navigator.streams.fake 来完成:

5) 打开getUserMedia samples page in Firefox in Docker. For instance, the Basic getUserMedia demo工作正常:

我检查了这个演示是否有效,因为在 mediaConstraints 音频标志设置为 false:

var constraints = window.constraints = {
  audio: false,
  video: true
};

然而,任何其他将音频标志设置为 true 的演示都不会工作,并且 getUserMedia 功能会停止。

奇怪的是这种行为只能在 Docker 中重现,也就是说,任何版本的 Firefox 运行 直接在主机上都可以正常工作。好像这里有什么bug,但我不确定是在哪个部分。

这里的问题在哪里? Docker?火狐?

我们在 travis-ci 上遇到了同样的问题 运行 adapter.js。解决方案如图in this pull request——你需要启动pulseaudio