【发布时间】:2017-06-27 08:20:51
【问题描述】:
在 Docker 中使用 Firefox 52+ 时,我遇到了 WebRTC 的 getUserMedia 函数的奇怪行为。重现它的步骤是:
1) 在 Docker 中运行 Selenium Hub:
docker run --rm --name selenium-hub -p 4444:4444 selenium/hub:3.4.0
2) 在 hub 中注册一个 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 连接到浏览器(在容器中)
注意 2:此版本 (3.4.0) 使用的是 Firefox 53。自 Firefox 52(即 52、53、54)起也出现此问题,但在 Firefox 51 中不会出现此问题(node-firefox-debug:3.1.0)
3) 使用 VNC 客户端连接到浏览器(Linux 中的 URL:vnc://127.0.0.1:5900,密码:secret)
4) 强制在 dockerized 浏览器中使用虚假媒体。这可以在Firefox的高级配置中设置true配置键media.navigator.streams.fake来完成(标签about:config):
5) 在 Docker 中的 Firefox 中打开 getUserMedia samples page。例如,Basic getUserMedia demo 工作正常:
我检查了这个演示是否正常工作,因为在 mediaConstraints 中,audio 标志设置为 false:
var constraints = window.constraints = {
audio: false,
video: true
};
尽管如此,将音频标志设置为 true 的任何其他演示都无法运行,并且getUserMedia 函数会停止。
奇怪的是这种行为只能在 Docker 中重现,即直接在主机上运行的任何版本的 Firefox 都可以正常工作。这里似乎有某种错误,但我不确定在哪个部分。
问题出在哪里?码头工人?火狐?
【问题讨论】:
标签: selenium firefox docker webrtc getusermedia