3

我正在尝试从我的网络摄像头创建一个环回设备,以便可以从 Zoom 和浏览器访问。我创建了三个 v4l2loopback 设备:

sudo modprobe v4l2loopback devices=3 video_nr=10,11,12 card_label="Loopback_1","Loopback_2","Virtual_cam" exclusive_caps=1,1,0

其次是:

ffmpeg -i /dev/video0 -f v4l2 -vcodec rawvideo -pix_fmt yuv420p /dev/video10 -f v4l2 /dev/video11

Chrome 检测到这两种设备,但 Zoom 和 Firefox 都看不到。按照关于 stackoverflow 其他问题的建议,我尝试使用 v4l2loopback-ctl 设置设备属性,使用v4l2loopback-ctl set-caps "video/x-raw,format=UYVY,width=640,height=480" /dev/video10,并得到回应:

将管道设置为 PAUSED ... 错误:管道不想暂停。错误:来自元素 /GstPipeline:pipeline0/GstV4l2Sink:v4l2sink0:设备“/dev/video10”不是输出设备。附加调试信息:v4l2_calls.c(636):gst_v4l2_open ():/GstPipeline:pipeline0/GstV4l2Sink:v4l2sink0: Capabilities: 0x85208000 Setting pipeline to NULL ... Freeing pipeline ... output to /dev/video10 failed

我也尝试使用 gst-launch-1.0:

gst-launch-1.0 v4l2src device=/dev/video0 ! v4l2sink device=/dev/video10

这告诉我 /dev/video10 不是输出设备:

将管道设置为 PAUSED ... 错误:管道不想暂停。错误:来自元素 /GstPipeline:pipeline0/GstV4l2Sink:v4l2sink0:设备“/dev/video10”不是输出设备。附加调试信息:v4l2_calls.c(636): gst_v4l2_open (): /GstPipeline:pipeline0/GstV4l2Sink:v4l2sink0: Capabilities: 0x85208000 Setting pipeline to NULL ...释放管道...

我正在运行 Xubuntu 20.04,内核版本 5.4.0-52-generic,带有 v4l2loopback-dkms v.0.12.3-1ubuntu0.1 和 v4l2loopback-utils。

我的目标是让桌面 Node.js 服务器使用一个设备,该服务器将使用xdg-open(因此需要 Chrome 和 Firefox)打开一个 Web 应用程序,这将输出一个可以被视频使用的经过处理的视频流聊天应用程序,例如 Zoom 或 Jitsi。

任何帮助将不胜感激。

4

2 回答 2

4

TL;博士

降级到 v4l2loopback-dkms 0.12.3-1。不要升级到版本 0.12.5-1。

降级 v4l2loopback-dkms

$ sudo apt install v4l2loopback-dkms=0.12.3-1

锁定它

这将阻止此包的任何升级

$ sudo apt-mark hold v4l2loopback-dkms

当固定的 0.12.5-1 版本可用时,解锁此包:

$ sudo apt-mark unhold v4l2loopback-dkms

细节

启动板错误

影响:尝试正确修复 0.12.3-1ubuntu0.1 中的模块引起的警告导致除 Chromium 之外的任何其他应用程序不再检测可用的环回设备。测试的能力只设置在能力集中,而不是在 device_caps 集中。

修复:修改补丁以更改 IOCTL 代码,就像在 v4l2loopback 0.12.5-1 中所做的那样。这可能与内核开发人员试图实现的相反,通过额外修改测试检查的视频设备功能来绕过限制。

测试用例:现在使用 OBS v4l2sink 连接(和 Exclusive_caps 集)针对 Chromium 和 Firefox 进行测试。使用 0.12.3-1ubuntu0.1 只有 Chromium 会找到回送摄像头,但建议的更新 Chromium 和 Firefox 都可以为我工作。仍然没有警告。

回归潜力:本质上与发布版本的区别在于设置了exclusive_caps,然后视频设备的device_caps发生了变化。这可能会甩掉那里的任何检查,而不是期待任何改变。从积极的方面来说,这正是 20.10/Groovy 中公开的行为。

从 0.12.3-1 升级到 0.12.3-1ubuntu0.1 后,使用 v4l2loopback 创建的设备不再可用于应用程序(例如 MS Teams 和 Zoom)。在 0.12.3-1 版本中,设备会显示出来,例如 modprobe v4l2loopback video nr=2 card label="test" 会导致新设备在这些 UI 中显示为“test”。使用版本 0.12.3-1ubuntu0.1 设备“测试”不再显示。降级到 0.12.3-1 解决了这个问题。

于 2020-11-13T22:18:45.147 回答
4

我刚刚在这个帖子评论[1] 中找到,很快它就是关于这个错误的版本:

v.0.12.3-1ubuntu0.1

然后,我打开链接[2],在此处找到 ppa 存储库[3],运行以下命令:

sudo add-apt-repository ppa:smb/focal

sudo apt upgrade v4l2loopback-dkms

它将 v4l2loopback 升级到 v.0.12.3-1ubuntu0.2 版本,或者等待下一次软件更新。

我已经尝试过这些方法并在我的缩放客户端应用程序上工作。

PS:只要运行sudo modprobe v4l2loopback,如果文件/etc/modprobe.d/v4l2loopback.conf配置如下:

options v4l2loopback devices=3 video_nr=10,11,12 card_label="Loopback_1","Loopback_2","Virtual_cam" exclusive_caps=1,1,0

要停止,运行sudo modprobe -r v4l2loopback。当然可以通过以下方式检查 v4l2loopback 设备v4l2-ctl --list-devices

参考链接:

[1] V4l2视频设备突然从zoom,team消失了,但是ffplay可以显示

[2] https://bugs.launchpad.net/ubuntu/+source/v4l2loopback/+bug/1901491

[3] https://launchpad.net/~smb/+archive/ubuntu/focal

[4] https://github.com/umlaeute/v4l2loopback/issues/274

于 2020-11-13T11:20:15.187 回答