Ubuntu – Ubuntu 18.04 Webcam streaming problem

18.04rtspstreamingvlcwebcam

I am required to run some video processing algorithms on IP camera stream. I don't have an IP Camera so my idea is to use a webcam as an IP cam for RTSP streaming, which the client machines can acquire and run the algorithms on. I learned that VLC can perform streaming from a webcam. I attached an old webcam to an Ubuntu machine. Here is the information.

$ 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

Here is the driver info.

/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

When i open MediaStream, do all the steps correctly, I get this error:

Your input can't be opened:
VLC is unable to open the MRL 'v4l2:///dev/video0'. Check the log for detail.

The log file contains:

-- 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

When i open Cheese, the camera is working fine and i can see the video.

For testing purpose, i set the /dev/video0 permissions to 777, still i get the same error.

This Post suggested to add the user to video group, i did that using sudo usermod -aG video ${USER} but no joy.

I also tried Motion in this post, but i couldn't get it working.

I also tried FFmpeg in this post, but i couldn't get that working as well.

I studied and tried this post, this post, this post, and many others, but nothing seems to help.

In the Driver Info section (above), i see not using libv4l2, could it be the cause of the problem? If so, how to solve this issue?

What am i doing wrong? My objective to to provide an RTSP stream form the USB Webcam attached to the Ubuntu Machine, to the client machines for processing in Java or Python. I am not bound to VLC, so i can use anything that gets the job done.

Can anyone suggest a working solution to the VLC problem or suggest any other tool that can do the job?

I tried many posts/solutions but none helped.

Best Answer

Following up on @JEL's answer, there is a permissions issue where snap doesn't allow vlc to access the /dev/video devices.

$ 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                 -
...

To fix this, run: snap connect vlc:camera :camera

This creates a connection between the interface and the slot:

$ 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                 -
...

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

Related Question