1

我如何打开相机:在终端中($ 提示符后的文本 = 我键入的命令):_________________

$ ls /dev/video*
/dev/video0  /dev/video1
$ vlc v4l2:///dev/video0
VLC media player 2.0.8 Twoflower (revision 2.0.8a-0-g68cf50b)
[0x9f2d908] main libvlc: Running vlc with the default interface. Use 'cvlc' to use vlc without interface.

VLC 开始播放相机输出。

在另一个新终端中(BOLD = 我输入的命令):

$ vlc v4l2:///dev/video1
VLC media player 2.0.8 Twoflower (revision 2.0.8a-0-g68cf50b)
[0x9b24908] main libvlc: Running vlc with the default interface. Use 'cvlc' to use vlc without interface.
[0xb0500960] v4l2 demux error: VIDIOC_STREAMON failed
libv4l2: error setting pixformat: Device or resource busy
libv4l2: error setting pixformat: Device or resource busy
libv4l2: error setting pixformat: Device or resource busy
libv4l2: error setting pixformat: Device or resource busy
libv4l2: error setting pixformat: Device or resource busy
libv4l2: error setting pixformat: Device or resource busy
libv4l2: error setting pixformat: Device or resource busy
libv4l2: error setting pixformat: Device or resource busy
libv4l2: error setting pixformat: Device or resource busy
libv4l2: error setting pixformat: Device or resource busy
[0xb0501188] v4l2 access error: cannot set input 0: Device or resource busy
[0xb0501188] v4l2 access error: cannot set input 0: Device or resource busy
[0xb5300618] main input error: open of `v4l2:///dev/video1' failed

没有视频播放,只有错误消息。

主要目标:我想在 opencv (c++) 中同时打开两个摄像头...... opencv 出现类似错误......所以我正在使用 VLC Player 来调试问题。使用 c++ opencv 同时打开两个摄像头时的错误(代码类似于https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/cpp/starter_video.cpp?rev=4705

e557822@e557822-T740:~/Desktop/Camera/starter_video2$ ls /dev/video*
/dev/video0  /dev/video1  /dev/video2
e557822@e557822-T740:~/Desktop/Camera/starter_video2$ ./starter_video2 0 1
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
press space to save a picture. q or esc to quit
init done 
opengl support available 
libv4l2: error turning on stream: No space left on device
VIDIOC_STREAMON: No space left on device

7/24 更新:这个 Ubuntu 12.04(32 位)是在 VMware Fusion 上运行的客户操作系统。这里的主机操作系统是在 Mac Pro 计算机硬件上运行的 OSX 10.9.4。

$ lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
    |__ Port 1: Dev 2, If 0, Class=HID, Driver=usbhid, 12M
    |__ Port 2: Dev 3, If 0, Class=hub, Driver=hub/7p, 12M
        |__ Port 1: Dev 4, If 0, Class='bInterfaceClass 0xe0 not yet handled', Driver=btusb, 12M
        |__ Port 1: Dev 4, If 1, Class='bInterfaceClass 0xe0 not yet handled', Driver=btusb, 12M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/6p, 480M
    |__ Port 1: Dev 6, If 0, Class='bInterfaceClass 0x0e not yet handled', Driver=uvcvideo, 480M
    |__ Port 1: Dev 6, If 1, Class='bInterfaceClass 0x0e not yet handled', Driver=uvcvideo, 480M
    |__ Port 2: Dev 7, If 0, Class='bInterfaceClass 0x0e not yet handled', Driver=uvcvideo, 480M
    |__ Port 2: Dev 7, If 1, Class='bInterfaceClass 0x0e not yet handled', Driver=uvcvideo, 480M
$ 
4

1 回答 1

2

这是 USB 带宽问题,而不是 VLC 问题。

VIDIOC_STREAMON: No space left on device是当 USB 带宽已满时给出的消息。

大多数现代 USB 相机都进行高速、高密度的图像输出。USB2 限制为 480Mbps,理论上为 60 兆字节/秒。在实践中,所有类型的开销都将使用其中的一半,而您可以获得的最大开销为 30 兆字节/秒。这意味着相机可以以 30fps 的速度发送 1 兆字节的图像。

您所能做的就是获得带有多个 USB 总线的主板。所有小型计算机往往只有一台。高端游戏主板有 2..3 USB2.0 总线。在linux下可以看到:

$ lsusb -t
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
    |__ Port 4: Dev 2, If 0, Class=scard, Driver=usbfs, 12M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/8p, 480M
        |__ Port 5: Dev 3, If 0, Class='bInterfaceClass 0xe0 not yet handled', Driver=btusb, 12M
        |__ Port 5: Dev 3, If 1, Class='bInterfaceClass 0xe0 not yet handled', Driver=btusb, 12M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M
        |__ Port 3: Dev 3, If 0, Class=vend., Driver=rts5139, 480M
        |__ Port 5: Dev 4, If 0, Class='bInterfaceClass 0x0e not yet handled', Driver=uvcvideo, 480M
        |__ Port 5: Dev 4, If 1, Class='bInterfaceClass 0x0e not yet handled', Driver=uvcvideo, 480M
$ 

很可能两台摄像机都连接到同一总线。

其他选择是降低 FPS 速度或分辨率。但这并不总是有帮助,因为我见过无论如何都保留了 80% 的 USB 带宽的相机。

于 2014-07-24T04:56:51.183 回答