Being able to use a virtual camera for sharing video or images in virtual congregational meetings is beneficial in these ways:
Pictures and videos can be shown during talks seamlessly
No flipping back and forth from shared screen to webcam
No chance of accidentally sliding something into view while sharing desktop
Looks more professorial
Picture in Picture effects can be accomplished by layering video/photos over each other.
Pictures can be shown in the corner
Text can be displayed with an alpha mask
Hotkeys can be used to display various items quickly
Key 1: to play the Watchtower opening scripture
Key 2: to show a picture
Key 3: to play or show a scripture on screen
Key Ctr+b: for blackout screen
Key 0: return video feed to speaker's webcam
Can use websockets to control what is shown on the screen.
Control what is shown on screen via a tablet, phone, or another computer
OBS does all these things and more but it's overkill and becomes unwieldy with large amounts of photos and videos as used in Sign Language congregations. With so many options and capabilities, it's confusing and hard to use for many.
Virtual Cameras in Linux
Accessing real-time camera features under Linux can be done via the V4L2, video for Linux, driver. The V4L2 driver provides a standard API for working with firmware-based cameras and webcams. More information about the V4L2 Linux driver can be found at Kernel.org: Part I - Video for Linux API.
Accessing V4L2 can be done via a Ruby OpenCV wrapper called ruby-opencv but might be simpler by taking advantage of the V4L2Loopback kernel module.
V4L2Loopback
The V4L2Loopback is a Linux kernel module that creates V4L2, loopback devices. In other words, it creates a virtual V4L2 camera that can be used by any programs capable of writing to a v4l2 device to output video or images to any application that can be read by any v4l2-capable application, e.g. Zoom.
This is the method that OBS uses to output a video feed to a virtual webcam.
The V4L2Loopback's Github repository lists two feeders as examples that can be used to feed a video stream to v4l2:
I haven't done too much research on other systems but ffmpeg can be used on Linux, macOS, and Windows. With ffmpeg you give it a source or device and you can stream it to another source or device with the format needed.
Implementation
A possible quick and extremely hacky way to implement ~not taking into account the live video feed of the speaker~:
Check if V4L2Loopback is loaded modinfo v4l2loopback
Prompt user if V4L2Loopback is not loaded.
To install via apt under Ubuntu flavors: $ sudo apt install v4l2loopback-dkms
To load installed module: $ sudo modprobe v4l2loopback
Auto detect all video devices
Check dev/v4l/by-id for the index of the devices.
Let user input
Confirm ffmpeg is installed on the system
Output image or video with ffmpeg $ ffmpeg -re -i <video-file.mp4> -f v4l2 /dev/video2
Switching to the speaker (webcam)
Outputting webcam video: $ ffmpeg -f v4l2 -i /dev/video0 -f v4l2 /dev/video2. video0 being the webcam and video2 being the loopback.
Virtual Cameras
Being able to use a virtual camera for sharing video or images in virtual congregational meetings is beneficial in these ways:
OBS does all these things and more but it's overkill and becomes unwieldy with large amounts of photos and videos as used in Sign Language congregations. With so many options and capabilities, it's confusing and hard to use for many.
Virtual Cameras in Linux
Accessing real-time camera features under Linux can be done via the V4L2, video for Linux, driver. The V4L2 driver provides a standard API for working with firmware-based cameras and webcams. More information about the V4L2 Linux driver can be found at Kernel.org: Part I - Video for Linux API.
Accessing V4L2 can be done via a Ruby OpenCV wrapper called ruby-opencv but might be simpler by taking advantage of the V4L2Loopback kernel module.
V4L2Loopback
The V4L2Loopback is a Linux kernel module that creates V4L2, loopback devices. In other words, it creates a virtual V4L2 camera that can be used by any programs capable of writing to a v4l2 device to output video or images to any application that can be read by any v4l2-capable application, e.g. Zoom.
This is the method that OBS uses to output a video feed to a virtual webcam.
The V4L2Loopback's Github repository lists two feeders as examples that can be used to feed a video stream to v4l2:
ffmpeg can also be used.
Virtual Cameras on other systems
I haven't done too much research on other systems but
ffmpeg
can be used on Linux, macOS, and Windows. Withffmpeg
you give it a source or device and you can stream it to another source or device with the format needed.Implementation
A possible quick and extremely hacky way to implement ~not taking into account the live video feed of the speaker~:
Check if V4L2Loopback is loaded
modinfo v4l2loopback
Prompt user if V4L2Loopback is not loaded.
To install via
apt
under Ubuntu flavors:$ sudo apt install v4l2loopback-dkms
To load installed module:
$ sudo modprobe v4l2loopback
dev/v4l/by-id
for the index of the devices.ffmpeg
is installed on the system$ ffmpeg -re -i <video-file.mp4> -f v4l2 /dev/video2
$ ffmpeg -f v4l2 -i /dev/video0 -f v4l2 /dev/video2
.video0
being the webcam andvideo2
being the loopback.Resources
Examples
Using ffmpeg and v4l2loopback