如何从命令行将假媒体流传递给 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?的主要内容,如果未能解决你的问题,请参考以下文章

如何从命令行将参数传递给gradle

从命令行将参数传递给可执行文件[重复]

如何从命令行将主机名传递给gen_tcp

有没有办法通过命令行将 JVM 参数传递给 Maven? [复制]

不通过命令行将变量分配给 argparse

如何从命令行将每两行合并为一行?