我需要在 IP 摄像头流上运行一些视频处理算法。我没有 IP 摄像头,所以我的想法是使用网络摄像头作为流式RTSP
传输的 IP 摄像头,客户端机器可以获取并运行算法。我了解到 VLC 可以从网络摄像头执行流式传输。我将一个旧网络摄像头连接到 Ubuntu 机器上。以下是信息。
$ v4l2-ctl --list-devices
SAMSUNG (SPC-A30M): SAMSUNG (SP (usb-0000:00:14.0-7):
/dev/video0
/dev/video1
$ v4l2-ctl --list-formats
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: 'YUYV'
Name : YUYV 4:2:2
这是驾驶员信息。
/dev/video0
Driver Info (not using libv4l2):
Driver name : uvcvideo
Card type : SAMSUNG (SPC-A30M): SAMSUNG (SP
Bus info : usb-0000:00:14.0-7
Driver version: 5.3.18
Capabilities : 0x84A00001
Video Capture
Metadata Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: 'YUYV'
Name : YUYV 4:2:2
==========================================================
/dev/video1
Driver Info (not using libv4l2):
Driver name : uvcvideo
Card type : SAMSUNG (SPC-A30M): SAMSUNG (SP
Bus info : usb-0000:00:14.0-7
Driver version: 5.3.18
Capabilities : 0x84A00001
Video Capture
Metadata Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04A00000
Metadata Capture
Streaming
Extended Pix Format
ioctl: VIDIOC_ENUM_FMT
当我打开MediaStream并正确执行所有步骤时,出现此错误:
Your input can't be opened:
VLC is unable to open the MRL 'v4l2:///dev/video0'. Check the log for detail.
日志文件包含:
-- logger module started --
main: Running vlc with the default interface. Use 'cvlc' to use vlc without interface.
main: playlist is empty
v4l2 error: cannot open device '/dev/video0': Operation not permitted
v4l2 error: cannot open device '/dev/video0': Operation not permitted
v4l2 error: cannot open device '/dev/video0': Operation not permitted
v4l2 error: cannot open device '/dev/video0': Operation not permitted
当我打开时Cheese,相机工作正常,我可以看到视频。
为了测试目的,我将/dev/video0
权限设置为777
,但仍然出现相同的错误。
这个帖子建议将用户添加到video
组,我这样做了,sudo usermod -aG video ${USER}
但没有成功。
我学习并尝试这个帖子,这个帖子,这个帖子以及其他许多方法,但似乎都没有什么帮助。
在驱动程序信息部分(上文)中,我看到not using libv4l2
这可能是导致问题的原因吗?如果是,如何解决这个问题?
我做错了什么?我的目标是从RTSP
连接到 Ubuntu 机器的 USB 网络摄像头向客户端机器提供流,以便使用 Java 或 Python 进行处理。我没有被 VLC 所束缚,所以我可以使用任何能完成工作的东西。
有人能建议一个解决 VLC 问题的方法吗,或者建议任何其他可以完成这项工作的工具?
我尝试了很多帖子/解决方案,但都没有帮助。
答案1
根据@JEL 的回答,存在一个权限问题,即 snap 不允许 vlc 访问 /dev/video 设备。
$ snap connections vlc
Interface Plug Slot Notes
audio-playback vlc:audio-playback :audio-playback -
audio-record vlc:audio-record - -
camera vlc:camera - -
desktop vlc:desktop :desktop -
...
要修复此问题,请运行:snap connect vlc:camera :camera
这将在接口和插槽之间创建连接:
$ snap connections vlc
Interface Plug Slot Notes
audio-playback vlc:audio-playback :audio-playback -
audio-record vlc:audio-record - -
camera vlc:camera :camera manual
desktop vlc:desktop :desktop -
...
答案2
这是一个权限问题,如之前的答案所述。您也可以从 UI 向摄像头提供权限。
- 打开“Ubuntu 软件”,单击 VLC(您已经安装)
- 点击权限按钮
- 开启“使用你的相机”
现在您可以播放摄像头里的视频了!
答案3
简短回答:
sudo apt install vlc
进而 :
/usr/bin/vlc v4l2:///dev/video0
应该可以工作。您不会得到完全相同的界面,但对于大多数用途来说这应该没问题。
解释:在 ubuntu 18.04 下,默认的 VLC 安装是“snap”安装(默认情况下运行 /snap/bin/vlc)。许多链接表明使用 snap 安装 VLC 时存在权限问题(例如,请参阅https://forum.videolan.org/viewtopic.php?t=149231)。
由于 gksu 不再工作,并且 vlc 不接受 pkexec,因此很难调查,但我怀疑问题出在未加载的模块。然而,“肮脏的”“解决方案”:
\# modprobe -a $(find /lib/modules/4.18.0-15-generic/ -name *v4l2*.ko | while read i ; do basename -- $i; done | cut -d'.' -f1)
没有用。
希望这可以帮助 ...