Ubuntu 18.04 网络摄像头流媒体问题

Ubuntu 18.04 网络摄像头流媒体问题

我需要在 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}但没有成功。

我也试过运动这个帖子,但我无法让它工作。

我也试过FFmpeg这个帖子,但我无法让它正常工作。

我学习并尝试这个帖子这个帖子这个帖子以及其他许多方法,但似乎都没有什么帮助。

在驱动程序信息部分(上文)中,我看到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                 -
...

看:https://snapcraft.io/docs/interface-management

答案2

这是一个权限问题,如之前的答案所述。您也可以从 UI 向摄像头提供权限。

  1. 打开“Ubuntu 软件”,单击 VLC(您已经安装)
  2. 点击权限按钮
  3. 开启“使用你的相机”

现在您可以播放摄像头里的视频了!

答案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)

没有用。

希望这可以帮助 ...

相关内容