diff --git a/content/blog/fakewebcam.md b/content/blog/fakewebcam.md new file mode 100644 index 0000000..01a712f --- /dev/null +++ b/content/blog/fakewebcam.md @@ -0,0 +1,36 @@ +--- +title: "V4l2 Webcam" +date: 2020-05-25T23:49:08-04:00 +draft: false +tags: [] +--- + +In Linux you can create a fake webcam by making use of the `v4l2loopback` kernel module. + +To install, + +```bash +sudo apt install v4l2loopback-dkms +``` + +If you already had an existing module, remove it so we can customize it. + +```bash +sudo modprobe -r v4l2loopback +``` + +Then create the file `/etc/modprobe.d/fakecam.conf` and add the following line + +``` +options v4l2loopback devices=1 video_nr=20 card_label=fakecam exclusive_caps=1 +``` + +The value of `video_nr` must be larger than the amount of cameras in your system. I wouldn't have more than 10 webcams plugged into my system, so I set it to 20. + +Then load back up the kernel module + +```bash +sudo modprobe v4l2loopback +``` + +Now when you open up Chrome, Skype, etc, you should see a new device labeled "fakecam". \ No newline at end of file diff --git a/content/blog/obswebcam.md b/content/blog/obswebcam.md new file mode 100644 index 0000000..234dd08 --- /dev/null +++ b/content/blog/obswebcam.md @@ -0,0 +1,35 @@ +--- +title: "OBS Webcam" +date: 2020-05-25T23:53:56-04:00 +draft: false +tags: [] +--- + +[Open Broadcaster Software](https://obsproject.com/) is a great piece of software for recording and live streaming different video content. It would be nice to use the same level of professional software in video calling software as well. + +Now there already exists a [OBS plugin](https://github.com/CatxFish/obs-v4l2sink) for this purpose, but it does require recompiling OBS with this plugin. This post will outline a possible technique to get around this, at a cost of performance. + +To see discussion around this topic, check out this [Github thread](https://github.com/CatxFish/obs-virtual-cam/issues/17). + +OBS has two different options, streaming and recording. Since I want the ability to record a high fidelity version of my feed, we will use streaming to push video to a local RTMP server. This local RTMP server will then re-encode the video to a [v4l2 video device](https://brandonrozek.com/blog/fakewebcam/). + +We will use `ffmpeg` as our RTMP server + +```bash +ffmpeg -hwaccel vdpau -fflags nobuffer -listen 1 -i rtmp://localhost:12345/live/app/ -f v4l2 /dev/video20 +``` + +| Flag | Description | +| ------------------ | ------------------------------------------------------------ | +| `-hwaccel vdpau` | (Optional) Allows `ffmpeg` to use GPU for acceleration | +| `-fflags nobuffer` | Tells `ffmpeg` to not bother buffering the video and work with the latest frame possible. | +| `-listen 1` | Starts a server to listen for video. | + +Then from OBS you will want to use the Auto-Configuration wizard to have it figure out the right set of parameters to use for the lowest latency. Once that is set you can hit the stream button and you are all set to use the fake video device for your calls! Depending on your hardware, you might notice a few seconds of latency. + +To quickly verify that you can see your OBS video from the video device. + +```bash +ffplay -fflags nobuffer /dev/video20 +``` +