使用v4l2loopback设备,我可以运行这两个虚拟设备:
( a)通过USB通过v4l2loopback从佳能数码单反系统运行预览映像到OBS:
modprobe v4l2loopback
gphoto2 --stdout --capture-movie | gst-launch-1.0 fdsrc fd=0 ! decodebin name=dec ! queue ! videoconvert ! tee ! v4l2sink device=/dev/video0找到这里,它就能工作了。
b)将OBS的输出流到基于浏览器的会议系统中,如下所示:
modprobe v4l2loopback devices=1 video_nr=10 card_label="OBS Cam" exclusive_caps=1找到这里,这也能用。
但是,我需要同时运行( a)和b) ,并不像预期的那样工作。他们在干扰,似乎他们使用相同的缓冲区,视频之间来回翻转两个制片人。
我学到并尝试过的是:内核模块只能加载一次。可以使用命令v4l2loopback卸载modprobe -r v4l2loopback模块。我不知道是否第二次加载它将被忽略或卸载前一个。
我尝试过用devices=2作为选项和不同的视频设备加载模块,但是我找不到正确的语法。
发布于 2020-05-29 22:21:00
从你的描述(“视频在两个制作者之间来回翻转”),似乎两个制作者都在给同一个视频设备写信。
要解决这个问题,您需要做两件事:
创建多个视频设备
作为记录在案,这可以通过在加载模块时指定devices=2来实现。
在调用modprobe时,这将意味着:
modprobe v4l2loopback devices=2 video_nr=10 card_label="OBS Cam" exclusive_caps=1这将创建两个新设备,第一个将是/dev/video10 (因为您指定了video_nr),第二个将获得第一个免费视频设备。在我的系统上(它有一个同时占用/dev/video和/dev/video1的摄像头),这是/dev/video2
告诉每个制作者使用他们自己的设备
那么,告诉一位制作人使用/dev/video10,另一位使用/dev/video2 (或任何您拥有的视频设备)。
例如:
gphoto2 --stdout --capture-movie | gst-launch-1.0 \
fdsrc fd=0 \
! decodebin name=dec \
! queue \
! videoconvert \
! tee \
! v4l2sink device=/dev/video10并将obs配置为使用/dev/video2。
或者反过来。
只是不要对两位制片人使用相同的视频设备。(还要确保您的消费者使用正确的视频设备)
发布于 2020-10-24 21:47:48
既然有一个已经被接受的答案,我想你的问题已经解决了。然而,我还是个新手,即使在上面的答案(即如何设置video2)之后也无法设置语法。
在进行了更多的搜索之后,我找到了一个网站,它解释了如何通过一个示例添加多个设备。
modprobe v4l2loopback video_nr=3,4,7 card_label="device number 3","the number four","the last one"将创建3个设备,其中的卡名作为第二个参数传递:
/dev/video3->设备编号3/dev/video4 ->,数字4/dev/video7->当我试图使用我的尼康相机作为网络摄像头和OBS作为流媒体虚拟相机时,完全控制我的视频设备的命名是很重要的。我希望这个答案也能对其他人有所帮助。
https://stackoverflow.com/questions/62075776
复制相似问题