#ffmpeg #色彩空间 #解码 #部分 #包装器 #RTSP

moonfire-ffmpeg

ffmpeg部分功能的安全包装器

2个版本

0.0.2 2022年3月8日
0.0.1 2021年5月11日

#200 in 视频

MIT/Apache

98KB
1.5K SLoC

Rust 1.5K SLoC // 0.1% comments C 231 SLoC // 0.1% comments

moonfire-ffmpeg

一个Rust包装器,用于Moonfire NVR所需的ffmpeg的部分功能

  • 基本流媒体:连接到RTSP流。(尽管最终我希望Moonfire NVR用纯Rust来实现这个功能;请参阅scottlamb/moonfire-nvr#37。)
  • 视频分析:解码H.264(可能最终也会解码H.265;并且最终可能具有硬件加速),将其色彩空间转换为RGB,并缩小尺寸以供moonfire-tflite使用。

有一个功能更全的ffmpeg crate。但我使用自己的几个原因:

  • ffmpeg crate没有积极维护。(尽管有一些分支。也许ffmpeg4是你想要的。)
  • 构建moonfire-ffmpeg不需要bindgen,这在一些平台上可能很难安装。(请参阅其要求。)相反,moonfire-ffmpeg使用一个非常薄的C包装器围绕ffmpeg,以避免嵌入(可能特定版本的)ffmpeg ABI细节,如结构布局。
  • moonfire-ffmpeg检查编译时使用的ffmpeg和实际运行的ffmpeg之间的ABI兼容性,这对于使它与共享库兼容非常重要。我认为ffmpeg crate更倾向于与静态库一起使用。
  • moonfire-ffmpeg公开了一些非常具体的ffmpeg API片段,这些是我需要的,而ffmpeg crate没有,例如读取avcodec_open2的非理解参数。
  • moonfire-ffmpeg根据MIT和Apache-2.0许可,而ffmpeg crate是WTFPL。我认为这是moonfire-ffmpeg的优势,因为WTFPL吓跑了一些人和公司。

依赖关系

~0.4–5.5MB
~16K SLoC