火山引擎开源通用多媒体处理框架 BMF

文章来源|BMF 开源社区

GitHub|github.com/BabitMF/bmf

开源背景

随着直播短视频、5G 的快速发展,越来越多的数据以视频的形式被记录和传播。这使得视频处理技术的研究和应用变得尤为重要,它们是用于实现各种视频应用程序的通用工具、SDK 和解决方案。

视频时代,多媒体开发面临着多元化的挑战,包括,

  • 复杂场景:处理链路复杂、算法与工程相互依赖、业务场景多样。

  • 扩展与协同:对于一些算法开发者,许多时候会采用 Python 等高级语言,而一些多媒体处理的方案仅提供 C/C++ 的接口。另外还有一些场合,为了更好的达到能力复用,往往发现已有成熟的能力所使用的开发语言和当前正在开发的工程不是同一种,如何快速有效的把能力复用并且融合起来,对工程化提出了很大的挑战。

  • 标准与兼容:多媒体开发用户经常面对不同的处理需求,对于一些经典常用的转码、filter能力使用频率很高,为了达到业界标准,在开发满足自身需求的同时还需要投入大量精力实现符合业界标准的转码、filter处理细节; 还有一些复合的开发情况,需要在不同的主流数据之间互操作,开发人员往往需要投入大量精力学习与各种标准、SDK 对接。

  • 异构计算:对于海量的视频处理,单纯依靠多核CPU的计算有时无法满足性能和成本的要求,这就需要结合GPU、DSP等协处理器进行硬件加速。如何便捷高效的对接异构能力,包括在用户处理链路中简洁易用的数据传递与转换、高性能的异步调度是新时代的挑战。

为了解决上文提到的若干挑战,火山引擎研发了 BMF(Babit Multimedia Framework )通用多媒体处理框架 ,能够提供简洁易用的跨语言接口、灵活的调度和扩展性,以模块化的方式动态扩展、管理和复用视频处理的原子能力,以 Graph/Pipeline 的方式构建高性能的多媒体处理链路或者以单独处理能力的直接调用实现工程集成,帮助多媒体用户便捷、高效的将项目落地于生产环境。BMF 团队 以开源的形式,希望通过帮助用户解决行业痛点,可以带来更多的用户和社区关注与反馈,不断的提升公司的技术影响力。

BMF 是什么

BMF (Babit Multimedia Framework,八比特多媒体处理框架)是火山引擎 自研的一套通用多媒体处理框架,能够提供简洁易用的跨语言接口、灵活的调度和扩展性,以模块化的方式动态扩展、管理和复用视频处理的原子能力,以 Graph 的方式构建高性能的多媒体处理链路,帮助多媒体用户便捷、高效的将项目落地于生产环境。BMF 整体生态体架构如图所示。

BMF 框架的特点

  • 简洁的多语言接口 BMF 提供了多语言的接口,方便用户根据项目需要在不同的语言中集成开发,最大限度的兼容和复用整个框架的能力。

  • 松耦合的多语言模块 模块提供视频处理的原子能力,用户可以任意选择 Python、C++、Go 专注于开发模块;模块与框架之间、模块与模块之间松耦合,从而把算法与工程解耦,把不同语言开发的处理模块和上层应用所使用的开发语言解耦,极大的增强了扩展能力和多元化的协同能力。

  • 功能强大的调度引擎 BMF 提供可配置的并行调度器、多种使用模式和动态调整 Graph 的高级特性,实现高性能的调度机制负责 DAG/Graph/Pipeline 的运转,通过各种解决方案帮助用户以较小的开发成本实现复杂场景下的功能、性能需求。

  • 完全兼容 ****FFmpeg ****功能和标准 BMF 完全兼容 FFmpeg 的处理能力和指标,比如解封装、解码、filter、编码、封装能力,对这些处理能力的配置以及能够得到和 FFmpeg 的 pts、duration、bitrate、fps 等指标一致的结果,很好的满足了需要把 FFmpeg 能力快速集成到项目中的需求。

  • 多种框架及异构设备间数据转换能力 支持多种主流数据格式之间的零拷贝互转,极大的兼容不同模块之间的数据衔接。比如既需要使用 ffmpeg 的编解码和 filter 能力,又要使用 OpenCV 的变换处理,还需要借助 Pytorch 做智能分析的较复杂场合;同时支持异构跨设备的数据传递与 pixel format 转换能力、异步调度的能力,从而帮助用户快速解决生产环境的加速优化问题。

应用场景

在公司内部落地于亿级别/天的视频转码、增强、 智能处理 业务抽帧 审核业务、直播的视频增强 人像抠图、移动端上的算法落地等,帮助公司降低开发、计算、带宽成本,提高了工程与算法的协同和开发效率。

如何使用

开源地址:

github.com/BabitMF/bmf

后续计划

BMF 现已开源,目前该项目仍在积极迭代中,后续会在异构生态建设、更多原子能力建设 移动端支持等方面发力,完善多媒体开发生态,加强业界合作,也欢迎大家试用和参与社区建设,促进技术标准化。

感谢与交流

欢迎大家通过 GitHub 进行后续交流与反馈,也欢迎大家访问 BMF 网站

相关推荐
IvorySQL40 分钟前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
一只大侠的侠1 小时前
Flutter开源鸿蒙跨平台训练营 Day11从零开发商品详情页面
flutter·开源·harmonyos
一只大侠的侠1 小时前
React Native开源鸿蒙跨平台训练营 Day18自定义useForm表单管理实战实现
flutter·开源·harmonyos
一只大侠的侠2 小时前
React Native开源鸿蒙跨平台训练营 Day20自定义 useValidator 实现高性能表单验证
flutter·开源·harmonyos
晚霞的不甘2 小时前
Flutter for OpenHarmony 可视化教学:A* 寻路算法的交互式演示
人工智能·算法·flutter·架构·开源·音视频
晚霞的不甘3 小时前
Flutter for OpenHarmony 实现计算几何:Graham Scan 凸包算法的可视化演示
人工智能·算法·flutter·架构·开源·音视频
猫头虎3 小时前
OpenClaw-VSCode:在 VS Code 里玩转 OpenClaw,远程管理+SSH 双剑合璧
ide·vscode·开源·ssh·github·aigc·ai编程
一只大侠的侠4 小时前
Flutter开源鸿蒙跨平台训练营 Day12从零开发通用型登录页面
flutter·开源·harmonyos
wenzhangli74 小时前
OoderAgent 企业版 2.0 发布的意义:一次生态战略的全面升级
人工智能·开源
rainbow68894 小时前
C++开源库dxflib解析DXF文件实战
开发语言·c++·开源