David Schlachter

Using a webcam on FreeBSD in web browsers

April 19, 2020

Guides to enable webcam support in FreeBSD seem to stop short of using the webcam in a browser (e.g. Chrome or Firefox). This article describes how I've been able to use the webcam on FreeBSD 12.1-RELEASE-p3 with Chromium 81.0.4044.113 and Firefox 75.0 (currently both from the 'latest' branch of packages).

First, install webcamd, e.g. using pkg install webcamd. Load it at boot by adding the following line to /etc/rc.conf: webcamd_enable="YES". If you have multiple webcams on your system (e.g. visible light and IR), you'll have to add a line specifying the location of each camera on the USB bus, e.g. webcamd_0_flags="-d ugen0.6" in my case (see man 8 webcamd and man 8 usbconfig). You'll also need to load the cuse kernel module, which you can do at boot by adding cuse_load="YES" to /boot/loader.conf.

To get everything going without rebooting, load the kernel module with kldload cuse and start webcamd with service webcamd start. You'll need to add yourself to the webcamd group, e.g. pw groupmod webcamd -m $USER, and log out to apply the changes.

You can test the webcam with pwcview (which you can install with pkg install pwcview), e.g. pwcview -d /dev/video0. Be sure to read the man page for all the options (resolution, framerate).

To actually use the webcam in browsers, you'll need to install a couple more packages: pkg install v4l-utils v4l_compat. With these video4linux packages installed, the webcam should be available in Chrome and Firefox.

You may also be interested in my article on videoconferencing on FreeBSD.