利用开源框架BMF实现高效视频处理 | 社区征文

2023总结
前言

随着视频业务的增长,如何高效处理和处理大量视频数据成为一个重要的问题。通常情况下,视频处理涉及数个独立但相关的任务,如视频采集、编码、转码、调度等。如果每个任务独立开发,不仅造成重复开发,且难以协调各个子任务。 BMF(即开源项目名)是一个能解决此类问题的通用视频处理框架。它提供了模块化和流水线化的方法构建视频处理系统。开发者可以利用BMF内置或自定义的处理模块来搭建相关视频处理流程。这些模块可以按需集成并通过流水线方式有序执行。

picture.image

体验反馈

运行使用了该框架之后,我详细总结了一下BMF的这些特点:

  1. 模块化设计,不同视频处理能力作为独立模块开发和复用。 BMF将具体的视频处理能力,比如编码、转码等抽象为Module。每个Module负责一个独立的处理任务。开发者可以面向具体任务开发Module,已有Module也可以重用。这有利于任务解耦,提高代码复用率。

  2. 支持流水线化处理topology,合理调度各模块任务执行。 BMF采用以DAG结构 describ的topology描述视频处理流程。在topology中定义Modules的执行顺序和关系。BMF框架根据此执行有序地调度各Module,实现流水线化处理。比如可以并行执行解码和转码等增强处理性能。

  3. 提供统一的跨语言接口,支持不同编程语言开发和集成。 BMF定义了统一的API接口规范。开发者无论使用何种语言开发Module,都需遵守此接口。BMF运行时能识别并加载不同语言开发的Module,实现跨语言调用。这极大降低了系统集成难度。

  4. 支持动态配置和扩展处理图,满足流程变更需求。 BMF可以在程序运行期间,动态更改topology配置,比如添加或删除Module。这使系统在无需重启的情况下,实现视频处理流程的自定义定制。极大增强了系统的可扩展性与灵活性。

  5. 提供可靠的执行管理和监控,保障处理质量。 BMF提供任务追踪、错误处理、调度管理等丰富的运行时服务。开发者可以实时监控任务状态和指标,快速定位问题。有效保障视频处理质量。

picture.image

部署安装过程中的具体问题和解决方法

调用和部署BMF时,我碰到过以下几个问题及解决方法:

  1. 构建ffmpeg和其他依赖模块时,由于系统环境问题导致编译失败。 解决方法:检查编译依赖是否完整,尤其是一些非常基础的依赖如zlib等。如果还不行就升级系统环境。
// 设置编译依赖
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

// 编译ffmpeg
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j4
make install
  1. 在Linux和Windows下交叉调用BMF module时,会报动态库版本冲突错误。 解决方法:为不同平台编译生成特定平台版本的动态库。参考BMF示例项目设置交叉编译脚本。
  2. 部署到生产服务器后,Topology配置参数无法加载问题。 解决方法:检查配置文件路径是否正确,权限是否足够。同时也需要检查Topology配置是否符合要求。
```sql
// Topology.json
{
  "topology": [
    {
      "name": "Encode", 
      "type": "encoder"
    }
  ]
}

// C++代码
#include <bmf/topology.h>

int main() {
  bmf::Topology topology;
  
  // 设置配置路径
  topology.SetConfigPath("/etc/bmf/"); 
  
  // 加载Topology配置
  if(!topology.LoadFromFile("Topology.json")) {
    std::cout << "Load topology failed!" << std::endl;
    return -1;
  }

  // 其他逻辑
  
  return 0;
}
  1. 部署集群后,Module定位和通信问题,各节点无法正常调用。 解决方法:设置Module和服务的注册中心,改为使用注册中心寻址。同时需要结合服务发现实现负载均衡访问。
  2. 物理部署节点性能不足,处理性能无法满足要求。 解决方法:优化Topology调度,利用多核CPU资源。同时可以增加部署节点规模,利用水平扩展解决性能瓶颈。
总结

BMF是一个功能丰富的开源框架,为视频处理提供了高效便捷的解决方案。其清晰易懂的文档和示例有助于用户快速上手和深入理解框架的使用方法。在处理大型视频文件时,BMF表现出色,提供稳定且高质量的处理效果。尽管使用BMF进行视频处理相对简单,但需要一定的学习和熟悉时间。总的来说,BMF适用于各种视频处理需求,是一个强大且高效的开源框架。

infoq原文:利用开源框架BMF实现高效视频处理_Geek-yan_InfoQ写作社区

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论