Virtual Webcam (Linux)

From Wurst-Wasser.net
Jump to navigation Jump to search

Why?

To have fun, stream a movie to your buddies using a VC or just attend a meeting while streaming a previous recorded video showing me as attentive as possible. I'm such a nice subordinate…

HowTo

Installation

# zypper install v4l2loopback-utils v4l2loopback-autoload v4l2loopback-kmp-default

Creating a devices

The kernel module does that per default:

# v4l2-ctl --list-devices
OBS Virtual Camera (platform:v4l2loopback-000):
        /dev/video0

Integrated Camera: Integrated C (usb-0000:06:00.4-3):
        /dev/video1
        /dev/video2
        /dev/video3
        /dev/video4
        /dev/media0
        /dev/media1
#

Streaming

 ffmpeg -re -i VIDEO_TO_SHOW.m4v -vf format=yuv420p -f v4l2 /dev/video0

Loop it:

-stream_loop -1

Testing the stream

Using VLC

Vlc 01 ksnip 2023-09-07 08-58-51.png Vlc 02 ksnip 2023-09-07 08-59-06.png Vlc 03 ksnip 2023-09-07 08-59-49.png

Capture from a video camera

MediaOpen Capture Device…

  • Select your camera
  • Choose

Stream instead of Play (Button)

  • …(use the wizard)…

These capture can be pretty large, so transcoding[1] might be ca good idea:

 ffmpeg -i Capture\ 2023-09-07_01_8min.avi -c:v libx264 -preset slow -crf 30 -c:a copy output.mkv

Where CRF is the quality (0==lossless, 51==useless).

Known issues

= Device is not writable

ffmpeg tells while writing to the loopback:

Press [q] to stop, [?] for help
[video4linux2,v4l2 @ 0x55f1026fc3c0] ioctl(VIDIOC_G_FMT): Invalid argument
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Error initializing output stream 0:0 --
Conversion failed!
~/Videos/Captures>

VLC does while reading:

VLC is unable to open the MRL 'v4l2:///dev/video0'. Check the log for details.

While the device looks normal:

~Videos/Captures #  v4l2-ctl --list-devices
OBS Virtual Camera (platform:v4l2loopback-000):
        /dev/video0

Integrated Camera: Integrated C (usb-0000:06:00.4-3):
        /dev/video1
        /dev/video2
        /dev/video3
        /dev/video4
        /dev/media0
        /dev/media1

~/Videos/Captures # v4l2-ctl --all
Driver Info:
        Driver name      : v4l2 loopback
        Card type        : OBS Virtual Camera
        Bus info         : platform:v4l2loopback-000
        Driver version   : 6.4.12
        Capabilities     : 0x85200000
                Read/Write
                Streaming
                Extended Pix Format
                Device Capabilities
        Device Caps      : 0x05200000
                Read/Write
                Streaming
                Extended Pix Format
Priority: 2

User Controls

                    keep_format 0x0098f900 (bool)   : default=0 value=0
              sustain_framerate 0x0098f901 (bool)   : default=0 value=0
                        timeout 0x0098f902 (int)    : min=0 max=100000 step=1 default=0 value=0
               timeout_image_io 0x0098f903 (bool)   : default=0 value=0
~Videos/Captures #

Did you try turning it off and on again?

# modprobe -r v4l2loopback
# modprobe v4l2loopback

Footer