如何从命令行将假媒体流传递给 Firefox?
Posted
技术标签:
【中文标题】如何从命令行将假媒体流传递给 Firefox?【英文标题】:How can I pass a fake media stream to firefox from command line? 【发布时间】:2015-10-29 19:40:49 【问题描述】:我正在开发一个基于 java/selenium 的应用程序,需要将媒体(即音频和/或视频文件)传递给浏览器。
我已经能够使用下面的代码 sn-p 在 Chrome 中成功地做到这一点:
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
ChromeOptions options = new ChromeOptions();
options.addArguments("--allow-file-access-from-files",
"--use-fake-ui-for-media-stream",
"--allow-file-access",
"--use-file-for-fake-audio-capture=D:\\PATH\\TO\\WAV\\xxx.wav",
"--use-fake-device-for-media-stream");
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
ChromeDriver driver = new ChromeDriver(capabilities);
在 Firefox 33.1 中是否有类似的选项可以实现相同的功能?
如果没有,怎么办?
【问题讨论】:
【参考方案1】:假网络摄像头(Chrome 和 Firefox)
这是一种在 Linux 上通过命令行设置假网络摄像头的方法。
依赖关系
Linux(我使用的是 Ubuntu) FFMpeg(视频流工具) v4l2loopback(启用假视频设备)安装 v4l2loopback(假网络摄像头)
# 1. Install v4l2loopback kernel module from apt
sudo apt install v4l2loopback-dkms
# 2. Enable the "fake webcam", via v4l2loopback kernel module
sudo modprobe v4l2loopback devices=1 card_label="My Fake Webcam" exclusive_caps=1
视频文件(循环)作为假网络摄像头
# Link video file (on loop) to the "fake webcam"
ffmpeg -stream_loop -1 -re -i ./MYFILE.mp4 -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video0
作为假网络摄像头的桌面视频
# Link desktop video stream to the "fake webcam"
ffmpeg -f x11grab -r 15 -s 1280x720 -i :0.0+0,0 -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video0
这方面的好处在于它适用于 Firefox 和 Chrome!因为它在内核级别伪造网络摄像头。
在这里测试你的假网络摄像头:https://webcamtests.com/
Chrome 测试(桌面源)
Firefox 测试(桌面源)
禁用虚假网络摄像头
如果您需要禁用它...
# To disable the fake webcam, simply remove it from the kernel
sudo modprobe --remove v4l2loopback
无论如何,希望有人觉得这很有用!
【讨论】:
你能详细说明你的答案吗?我试过这个:sudo modprobe v4l2loopback devices=1 card_label="My Fake Webcam" exclusive_caps=1 | ffmpeg -f x11grab -r 15 -s 1280x720 -i :0.0+0,0 -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video0
但 Chrome 仍然无法识别我的相机。通常我使用这种方法,它仅适用于 Firefox:askubuntu.com/a/972831/54817,但我正在寻找一种能够使用我的相机进行 goomeeting 的 Chrome 解决方案。
顺便说一句,我使用的是 Chromium 版本 87.0.4280.66。
现在可以工作了:exclusive_caps=1 只有在我重新启动电脑后才能被 chrome 识别!
您不必重新启动计算机(至少我没有),但您确实需要确保首先终止所有 Chrome 实例,使用系统监视器检查是否有任何正在运行.【参考方案2】:
Firefox 只有这些功能, 浏览器名称, 浏览器版本, 平台名称, 接受不安全证书, 页面加载策略, 代理, 设置窗口矩形, 超时, unhandledPromptBehavior
但作为一种选择,下面的代码中有一个,
options.addPreference("media.navigator.streams.fake", true);
希望它能帮助您解决这种情况。
【讨论】:
以上是关于如何从命令行将假媒体流传递给 Firefox?的主要内容,如果未能解决你的问题,请参考以下文章