两个进程可以同时访问网络摄像头吗?


14

我想尝试在Google+环聊中使用Cheese,以及类似的配置,并且想知道两个进程是否可以同时使用该网络摄像头。我还没有尝试过,但是在我尝试之前,我想问一下。

那么,有可能吗?

Answers:


6

好吧,我只是尝试过。有趣的结果。

我有Skype,奶酪和网络摄像头玩具以及视频群聊(都可以正常工作),并一起尝试过。

结果:

您不能同时在两件事上使用同一网络摄像头。

奶酪(工作中)+网络摄像头玩具(不工作)+ Skype(小,右上。不工作)。

在此处输入图片说明

您可以在2件事上使用2个网络摄像头。(奶酪+网络摄像头玩具)。

在此处输入图片说明

环聊(无效)+奶酪(有效)

在此处输入图片说明

环聊(自己进行)。

在此处输入图片说明

我第一次打开环聊时,奶酪破了。它与其他人的操作相同,但是我的互联网太慢了,无法上传每个屏幕截图(我怀疑您会欣赏30多个屏幕截图)...

在此处输入图片说明

我什至尝试建立一个符号链接/dev/video0并将其保存/devvideo2。那没用。

我也不能一次运行2个奶酪过程。

如果需要,我建议将其全屏显示并进行2屏录制。我怀疑这是否可以满足您的需求。


谢谢!这很简洁,告诉我我需要知道的内容。漂亮的花园顺便说一句!超时时间结束后(21小时),将授予赏金。然后,我将删除此评论。
RolandiXor

@Mew这是我最后一次尝试:)
Tim

@Tim如果您来到这里,那么下一个答案正是您要寻找的东西,因为您需要这样做。
Isiah Meadows 2014年

1
@impinball不,刚刚发现了一个有趣的问题!
蒂姆(Tim)

14

很高兴,现在,是的!

GitHub上目前有一个项目,它不仅可以显示两个,而且可以显示来自单一来源的无限数量(仅受系统容量限制)的视频设备。

该项目称为v4l2loopback。(检查链接并向下滚动以查看自述文件中的说明。)

您可以v4l2loopback通过克隆其GitHub并运行以下命令来进行安装:

$ git clone https://github.com/umlaeute/v4l2loopback.git
$ cd v4l2loopback
$ make
$ sudo make install

例子

有关如何与GStreamer,FFmpeg,MPlayer和Skype一起使用的示例,请查看其小型Wiki。希望您可以找到适合您需要的正确设置。

享受微调!


1
虚拟设备是Linux(以及* nix)大放异彩的领域之一。在Windows上,甚至编写一个基本的tee实用工具(它不等待stdin完成它的输入)就更加复杂。如果它实际上使用等效于tee引擎盖下的可扩展性支持的二进制文件,我不会感到惊讶。
伊西亚·梅多斯

尽管这确实回答了问题,但最好在此处包括链接的各个部分,并提供链接以供参考,以便我们有一些示例-例如,使2个设备从1开始。有哪些选择?是否可以(如OP的要求所述)与Google环聊一起使用?我也只是用Skype测试过,它似乎不起作用。我们现在的版本是4.3,而不是4.0 ...
Tim

2
我的其他系统恢复运行时,我必须检查一下。我可能会再提供一笔赏金。
RolandiXor

3
现在这实际上是ubuntu的一部分-无需git。
nbubis

实际上,它现在已打包为Ubuntu / Debian打包为v4l2loopback-utils,无需自行编译
Arnaud Jeansen

3

基于@The Eye的答案

我首先在Ubuntu 18.04 https://gstreamer.freedesktop.org/documentation/installing/on-linux.html上安装了gstreamer软件包。

$ git clone https://github.com/umlaeute/v4l2loopback.git
$ cd v4l2loopback
$ make
$ sudo make install

我在Ubuntu 18.04 LTS https://github.com/umlaeute/v4l2loopback/issues/139上收到了警告消息(但这并没有阻止我加载v4l2loopback驱动程序)

$ sudo depmod -a

我的笔记本电脑/ dev / video0上只有1个网络摄像头,我想从相同的硬件获取2个流。基于https://github.com/umlaeute/v4l2loopback/blob/master/README.md

$ modprobe v4l2loopback devices=2

现在应该假设唯一的视频设备存在/dev/video1/dev/video2创建/dev/video0

现在我在一个终端窗口中运行以下命令

gst-launch-1.0 v4l2src device=/dev/video0 ! tee name=t ! queue ! v4l2sink device=/dev/video1 t. ! queue ! v4l2sink device=/dev/video2

我再打开2个标签页

在第一个标签中

gst-launch-1.0 v4l2src device=/dev/video1 ! videoconvert ! ximagesink

在第二个标签中

gst-launch-1.0 v4l2src device=/dev/video2 ! videoconvert ! ximagesink

现在应该可以看到2个视频流

更新

即使我/dev/video1多次使用同一台设备,也都给了我那么多流。例。

在第一个标签中

gst-launch-1.0 v4l2src device=/dev/video1 ! videoconvert ! ximagesink

在第二个标签中

gst-launch-1.0 v4l2src device=/dev/video1 ! videoconvert ! ximagesink

在第三个标签中

gst-launch-1.0 v4l2src device=/dev/video1 ! videoconvert ! ximagesink

给我三个流。


顺便说一句,如果您的网络摄像头有音频,则使用命令过滤音频设备,pactl list | grep -A2 'Source #'然后在以下管道中使用该设备(也可以运行管道的多个实例)gst-launch-1.0 pulsesrc device=alsa_input.<name of device> ! autoaudiosink
热情的

这比FFmpeg解决方案好得多,因为我无法让FFmpeg复制h264而不对其进行解码,这导致即使没有人在聆听时它也始终使用CPU
Fabian N.

2

答案可能是否定的。。。“ Video 4 Linux”库检测到是否正在使用设备,并且不会启动。然而; 如果您希望下载libv4l-dev并对其进行手动编辑,则可以编辑代码以摆脱此检查,然后重新编译它。我想您可以使它正常工作,但这将非常不稳定。也许值得一试。

TLDR:如果您是程序员,并且手头有一些肘油脂,那么一切皆有可能。不想走那么远?那就不要; 这是不可能的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.