This project provides static FFmpeg binaries for multiple platforms and architectures for use with Homebridge.
Specifically, we provide:
- Audio support using
libfdk-aac
. - Hardware-accelerated encoding support on Intel platforms using
h264_qsv
(Windows only). - Hardware-accelerated encoding support on Raspberry Pi 4+ using
h264_v4l2m2m
. - Hardware-accelerated encoding support on Apple platforms using
videotoolbox
.
Supported Platforms
OS | Supported Architectures |
---|
FreeBSD | x86_64 |
Linux | x86_64, armv7l, aarch64 |
macOS 15.0 (Sequoia) or newer | x86_64, arm64 (Apple Silicon) |
Raspberry Pi 4 (Raspbian) | armv7l, aarch64 |
Windows 10 or newer | x86_64 |
[!NOTE]
- Intel Quick Sync Video is only supported on Windows. There are multiple known issues with
libva
that make it incompatible with static builds of FFmpeg. If you need QSV on Linux, we recommend looking at the Jellyfin FFmpeg distribution for distribution-specific releases. We hope to support QSV on Linux once these issues are addressed. - Raspberry Pi 5 is currently unsupported. There are multiple known issues with FFmpeg and Raspberry Pi 5 that will hopefully be addressed by the respective teams in the future.
- Currently (October 2024), FFmpeg v7.1 appears to be somewhat broken for HEVC and H.264 decoding in some scenarios. We hope to support future FFmpeg LTS releases as they stabilize and mature.
Raspbian or armv7/armv8-based Linux environments:
sudo curl -Lf# https://github.com/homebridge/ffmpeg-for-homebridge/releases/latest/download/ffmpeg-alpine-arm32v7.tar.gz | sudo tar xzf - -C / --no-same-owner
x64 or arm64 Linux:
sudo curl -Lf# https://github.com/homebridge/ffmpeg-for-homebridge/releases/latest/download/ffmpeg-alpine-$(uname -m).tar.gz | sudo tar xzf - -C / --no-same-owner
Intel or Apple Silicon macOS:
sudo curl -Lf# https://github.com/homebridge/ffmpeg-for-homebridge/releases/latest/download/ffmpeg-darwin-$(uname -m).tar.gz | sudo tar xzfm - -C / --no-same-owner
Windows:
Download the ffmpeg.exe
file from the releases page.
Build Flags
FFmpeg is built with the following configuration options:
--disable-debug
--disable-ffnvcodec
--disable-shared
--enable-amf
--enable-gpl
--enable-hardcoded-tables
--enable-libaom
--enable-libdav1d
--enable-libfdk-aac
--enable-libmp3lame
--enable-libopencore_amrnb
--enable-libopencore_amrwb
--enable-libopus
--enable-libspeex
--enable-libsrt
--enable-libsvtav1
--enable-libtheora
--enable-libvidstab
--enable-libvorbis
--enable-libvpl
--enable-libvpx
--enable-libwebp
--enable-libx264
--enable-libx265
--enable-libxvid
--enable-libzimg
--enable-lv2
--enable-nonfree
--enable-openssl
--enable-pthreads
--enable-static
--enable-version3
--enable-videotoolbox
Issues
Issues related to Homebridge or any Homebridge-related camera plugins should be raised on the corresponding project page, Discord, or community support forums.
Issues strictly related to the compatibility or installation of the resulting binary may be raised here.
Plugin Dependency
This section is for Homebridge plugin developers only, if you need to install FFmpeg see the instructions above.
You can optionally include this package as a dependency in your Homebridge camera plugins. This package will automatically download and install the correct FFmpeg binary to your user's Homebridge installation when they install your plugin, as long as they are on one of the supported platforms listed above.
npm install --unsafe-perm --save ffmpeg-for-homebridge
var pathToFfmpeg = require("ffmpeg-for-homebridge");
import pathToFfmpeg from "ffmpeg-for-homebridge";
child_process.spawn(pathToFfmpeg || "ffmpeg", []);
If a supported version of FFmpeg is unavailable for the user's platform, or this package failed to download the FFmpeg binary, the package will return undefined
, you should check for this and and try and use FFmpeg from the user's PATH
instead.
You will need to update your plugin's README installation command to include the --unsafe-perm
flag. For example:
sudo npm install -g --unsafe-perm homebridge-fake-camera-plugin
Credits