![为什么两个程序不能同时访问我的网络摄像头?](https://linux22.com/image/1322053/%E4%B8%BA%E4%BB%80%E4%B9%88%E4%B8%A4%E4%B8%AA%E7%A8%8B%E5%BA%8F%E4%B8%8D%E8%83%BD%E5%90%8C%E6%97%B6%E8%AE%BF%E9%97%AE%E6%88%91%E7%9A%84%E7%BD%91%E7%BB%9C%E6%91%84%E5%83%8F%E5%A4%B4%EF%BC%9F.png)
我第一次启动cheese
,我的网络摄像头打开了。然后我运行vlc
以获取输出/dev/video0
,但失败了:
[0x7f3ea40012e8] v4l2 demux error: cannot set input 0: Device or resource busy
[0x7f3ea40012e8] v4l2 demux error: cannot set input 0: Device or resource busy
[0x7f3ea4002168] v4l2 access error: cannot set input 0: Device or resource busy
[0x7f3ea4002168] v4l2 access error: cannot set input 0: Device or resource busy
[0x7f3eb4000b78] main input error: open of `v4l2:///dev/video0' failed
无论我运行哪一对视频程序(skype、cheese、vlc 等等),结果总是相同的:当第一个程序已经抓取输出时,第二个程序就无法再使用网络摄像头。
然而我觉得很好奇video4linux 状态:
一般情况下,V4L2 设备可以多次打开。当驱动程序支持此功能时,用户可以启动“面板”应用程序来更改亮度或音量等控件,而另一个应用程序则捕获视频和音频。
我的网络摄像头显示为lspci
,058f:a014 Alcor Micro Corp. Asus Integrated Webcam
但我甚至不知道底层驱动程序是什么,所以我无法检查我的问题是否与驱动程序有关。欢迎提供任何意见!
答案1
这在 Windows 和所有操作系统上都是一样的。网络摄像头不是一个简单的输入设备:要从中读取帧,您需要根据某种协议主动发送命令。这使得它具有状态,因此管理其状态的应用程序必须对它具有独占访问权限。
在 Windows 上,您可以使用 splitcam 复制馈送。在 Linux 上,您可以使用 WebcamStudio。