概述

BabitMF(Babit Multimedia Framework,BMF),作为一个通用的多媒体处理框架,能够提供简单易用的跨语言接口、灵活的调度和可扩展性,以及以模块化的方式动态扩展、管理和复用视频处理的原子能力。BMF 以 graph/pipeline 的形式构建多媒体处理链路,或通过直接调用各个处理能力实现项目集成,帮助多媒体用户在各类生产环境中方便、高效地实施项目。BMF 的使用场景涵盖视频转码、视频帧提取、视频增强、视频分析、视频帧插入、视频编辑、视频会议以及 VR 等。目前,BMF 每天处理的视频数以亿计。在此过程中,BMF 框架的功能多样性、易用性、兼容性和稳定性得到了充分的打磨。

上图是 BMF 的概要架构图,包括一整套的生态体系,主要由三部分组成:

  • 应用层:顶层为用户提供多语言的 API 包括 Python、Go、C++,方便用户根据不同的项目需求进行开发集成。
  • 框架层:中间层包括框架的 graph/pipeline 调度,跨数据类型跨设备的数据流转 Backend,以及常用的跨设备 reformat、color space conversion、tensor 算子等 SDK。
  • 模块层:包含具有各种原子能力的模块,提供多语言模块开发机制。用户可以根据自身需求将算法/处理实现为 Python、Go、C++ 语言的任意一种。

BMF 从架构设计到实现,涵盖了多种特性致力于解决新时代面临的诸多挑战:

多语言接口

BMF 提供了多语言接口,以方便用户根据项目需求用不同的语言进行集成开发,最大化整个框架的兼容和复用能力。

松耦合的多语言模块

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

功能强大的调度引擎

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

完全兼容 FFmpeg 功能和标准

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

多种框架及异构设备间数据转换能力

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

增强对 NVIDIA GPU 的支持

NVIDIA GPU 拥有专用的视频编解码硬件。此外,它还具有高带宽内存和大规模并行计算 CUDA 内核,适用于通用视频和图像处理。BMF 与 NVIDIA 工程师合作,增强了对 NVIDIA GPU 的支持:

  • NVENC/NVDEC/GPU filter 继承 FFmpeg 的能力,开箱即用。
  • 通过集成 CV-CUDA 和定制 CUDA 内核实现高性能帧处理。
  • 使用 TensorRT 可以将 AI 推理轻松集成到视频 pipeline 中。
  • CPU 和 GPU 之间的数据移动可以通过简单的调用实现。

简而言之,BMF 已经集成了 NVIDIA 中所有类型的视频和图像 SDK。因此,开发者可以使用 Python/GO/C++ 轻松编写 GPU 加速视频 pileline 并高效运行它们。

BMF 以开源的形式全面融入社区,持续扩展生态,展示各种解决方案,期望在超视频时代为行业内的开发者和企业提供更好的帮助。


最后修改 February 19, 2024 : fix baidu statistics (daa0758)