我正在尝试从网络摄像头创建一个环回设备,以便可以从Zoom和浏览器访问。我创建了三个v4l2环回设备:
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:功能:0x85208000正在将管道设置为NULL。。。正在释放管道。。。输出到/dev/video10失败的
我也尝试过使用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:功能:0x85208000正在将管道设置为NULL。。。正在释放管道。。。
我运行的是Xubuntu 20.04,内核版本5.4.0-52-generic,带有v4l2loopback dkms v.0.12.3-1ubuntu0.1和v4l2 loopback utils。
我的目标是让一台设备由桌面Node.js服务器使用,该服务器将使用xdg-open
打开一个网络应用程序(因此需要Chrome和Firefox),该应用程序将输出一个经过处理的视频流,该视频流可以由视频聊天应用程序(如Zoom或Jitsi)使用。
任何帮助都将不胜感激。
我刚刚在这篇文章评论[1]中发现,很快它就是关于这个bug版本的:
v.0.12.3-1管0.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
。当然v4l2环回设备可以通过v4l2-ctl --list-devices
进行检查
参考链接:
[1] V4l2视频设备突然从变焦,团队,但ffplay可以显示它
[2]https://bugs.launchpad.net/ubuntu/+source/v4l2环回/+bug/1901491
[3]https://launchpad.net/~smb/+归档/ubuntu/焦点
[4]https://github.com/umlaeute/v4l2loopback/issues/274
TL;DR
降级到v4l2环回dkms 0.12.3-1。在版本0.125-1之前不要升级。
降级v4l2环回dkms
$ sudo apt install v4l2loopback-dkms=0.12.3-1
锁定它
这将阻止此包装的任何升级
$ sudo apt-mark hold v4l2loopback-dkms
当固定的0.125-1版本可用时,解锁此包:
$ sudo apt-mark unhold v4l2loopback-dkms
详细信息
来自Launchpad Bug:
影响:试图正确修复由0.12.3-1ubuntu0.1中的模块引起的警告导致Chromium以外的任何其他应用程序不再检测可用的环回设备。测试的功能仅在功能集中设置,但未在device_caps集中设置。
修复:修改补丁以更改IOCTL代码,就像在v4l2loopback 0.125-1中一样。这可能与内核开发人员试图实现的相反,通过额外修改测试所检查的视频设备功能来绕过限制。
测试用例:现在已经在Chromium和Firefox上测试了OBS v4l2sink连接(和exclusive_caps集)。在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 v4l2环回视频nr=2卡标签=";测试";将导致新设备在那些UI中显示为"新设备";测试";。在版本为0.12.3-1ubuntu0.1的设备";测试";不再显示。降级到0.12.3-1解决了这个问题。