2 releases
0.0.2 | Mar 8, 2022 |
---|---|
0.0.1 | May 11, 2021 |
#221 in Video
98KB
1.5K
SLoC
moonfire-ffmpeg
A Rust wrapper around select parts of ffmpeg needed for Moonfire NVR:
- basic streaming: connecting to a RTSP stream. (Though eventually I want Moonfire NVR to do this in pure Rust; see scottlamb/moonfire-nvr#37.)
- video analytics: decoding H.264 (likely also H.265 eventually; and eventually with hardware acceleration), converting its colorspace to RGB, and downscaling it to feed to moonfire-tflite.
There's a much more full-featured ffmpeg crate. A few reasons I use my own instead though:
- the ffmpeg crate isn't actively maintained. (There are some forks though. Maybe ffmpeg4 is what you're looking for.)
- building moonfire-ffmpeg doesn't need bindgen, which can be a pain to install on some platforms. (See its requirements.) Instead, moonfire-ffmpeg uses a very thin C wrapper around ffmpeg to avoid baking in (possibly version-specific) details of the ffmpeg ABI such as struct layouts.
- moonfire-ffmpeg checks ABI compatibility between the ffmpeg it was compiled with and the ffmpeg it's actually running with, which is important for making it fool-proof with shared libraries. I think the ffmpeg crate is more intended to be used with a static library.
- moonfire-ffmpeg exposes a few very specific pieces of the ffmpeg API that
I needed and the ffmpeg crate doesn't, such as reading non-understood
parameters to
avcodec_open2
. - moonfire-ffmpeg is licensed under MIT and Apache-2.0, vs the ffmpeg crate's WTFPL. I consider this an advantage for moonfire-ffmpeg because WTFPL scares away some people and companies.
Dependencies
~0.4–5MB
~19K SLoC