前言
BabitMF全称为Babit Multimedia Framework,其中的Babit其实是八比特的谐音,八比特一字节,暗示了项目来自于字节跳动。 项目的几大特点主要是:跨平台、支持多语言(C++、Python、Go)、继承了FFmpeg的功能、Nvidia定制GPU加速方案、灵活扩展能力(可接入torch等其他框架能力)。
最近社区举行了开源有奖活动 详情见2025 BabitMF 第一期开源有奖活动正式开启 ! 或者Docs 现在参与BMF贡献是一个很不错的时机,如果是高校学生,也可以关注一下今年中科院软件所的开源之夏,我将会担任BMF的mentor
BMF社区简介
BMF于2023年8月23日正式开源,到如今已经接近两年了,由于之前一直服务于字节内部的业务线,比如支持抖音、剪映等大家熟知的字节产品中多媒体的处理,所以在开源这条路上,BMF还是在不断学习成长的路上,不过现在已经慢慢吸引了一些外部贡献者,相信未来能有更多较为稳定的外部贡献者。
BMF没有得到广泛开发者响应的原因除了时间以外,我总结了一些原因:
- BMF目前支持conda下载软件包 但仍未支持更为大家熟知的apt yum homebrew等包管理器
- BMF社区的维护者们都是字节内部架构级别的开发者,平时工作比较忙,对于社区问题或者PR响应并不总是很及时 不过随着外来Committer的加入 这一问题得到改善
- BMF的接口层并不是很统一 python和c++实现同样的功能 你会发现很多接口名字都有差异(不仅仅是编码风格 而是设计和命名问题)
- BMF的文档及部分板块代码注释较少 对新手开发者并不友好
不过这四点正好也是广大外来贡献者可以发力的点,围绕这些方面的贡献也许更容易被社区接受。
简单介绍BMF项目的组成,官方分为了三个层级 应用层、框架层、模块层。这并非意味模块层是最底层,而是因为模块是应用业务逻辑的核心,其底层实现其实还是框架层的module sdk。
我主要解读一下框架层吧,从上往下大概分为四层:
builder 构造器
engine 引擎层
modulesdk sdk层
hmp (Heterogeneous Media Process Library)异构多媒体处理库
builder其实就是接口层,cpp和python的builder都是基于engine/connector构造的
engine层应该是bmf的最重要的一层了,大多数特性都是在这里实现的,比如node、scheduler、inputstreammanager、outputstreammanager等等
Module sdk里主要是服务于engine和module编写更精简的代码,这里大多都是一些数据结构的封装、module的构造逻辑 动态加载等逻辑
hmp就不用多说了 主要是底层的数据结构、cuda逻辑等
BMF社区开源有奖活动解读
此活动是我跟maintainer提议后推行的结果,准备了很多有价值有意义的奖品,目的是为了吸引更多开发者参与BMF贡献
名次 | 获奖人数 | 奖品 |
🏆 一等奖 | 1名 | 影石(Insta360)X4 全景运动相机 |
🥈 二等奖 | 1名 | 苹果 AirPods Pro (第二代) |
🥉 三等奖 | 1名 | 小米 (Xiaomi) Watch S4 |
优秀奖 | 5名 | 充电宝 + 水杯 + 魔方旅游转换插座三件套 |
参与奖 | 成功合入有效 pr | 水杯、魔方旅游转换插座等随机抽取 |
幸运奖 | 将活动信息转发至 CS 相关飞书群、微信群(> 20 人)、或者朋友圈即可参与抽奖 | 水杯、魔方旅游转换插座等随机抽取 |
我们准备了一些可认领的任务 示例如下:
Bug
-
初级:ModuleNotFoundError: No module named 'bmf.lib._hmp'
-
中级:bmf::builder::Node::AddCallback设置回调抛出异常
Feature
-
中级:实现与ffmpeg命令行 -re 选项相同的功能
-
高级:线程池支持
Interface
-
中级: Graph::update 缺少可以 generate 的 output_stream
-
中级: C++ dynamic api 支持
Doc
-
初级: Add Page_GraphUtilization 说明
-
初级: 增加 files.tar.gz 说明
当然,即使不在任务列表的其他贡献,只要是符合社区意愿,都计入本次开源有奖活动中。
参与奖还是非常推荐所有开发者朋友都来参与一下的 只要花几个小时看看BMF的相关文档 肯定能发现一些可以改进的typo
如果是想要进阶一些,建议可以尝试写一些test case 目前BMF中cpp test case是比python少很多的 理应python写的test case, cpp也要写一遍 以验证两个接口层都没有bug。
如果想要再进阶一些,可以看一看我发起的接口对齐计划 C++ and Python Interface Alignment Plan · BabitMF/bmf · Discussion #154 · GitHub BMF中cpp的接口实现是少于python的 所以有大量的cpp 接口需要实现 而且难度也比较适中 如果更加进阶的话,可以看一看engine层和hmp层的bug 或者新特性的开发 比如线程池的支持
如果想深入了解,欢迎直接联系我本人获取帮助 jacklau1222@qq.com
展望
我个人还是比较看好BMF的发展的,作为国内寥寥无几的开源多媒体处理框架,社区open程度还是不错的,只是maintainer都比较忙(毕竟进了大厂就只有无休止的加班了 哈哈),不过随着更多外来贡献者的加入,我相信BMF社区能发展越来越好。