Bmf源码解析(一)

Bmf源码解析

简介:
BMF是由字节跳动开源视频处理框架,主要包括框架,算子能力,本身携带ffmpeg模块。

框架的调度主要逻辑:抽象有向图管理业务节点,节点由自己调度线程驱动,节点和节点直接通过inputstream和outputstream链接;节点与节点之间调用通过task关联。
逻辑关系如下图:
在这里插入图片描述

Graph代码详解:
一:根据提供的json获取graph生成信息

BMFGraph::BMFGraph(const std::string &graph_config, bool is_path,bool need_merge)

First我们先看看创建一个graph需要的json文件应该是什么样的

[root@192 bin]# cat test.json
{
    "input_streams": [],     #这个graph没有输入流
    "mode": "Normal",
    "nodes": [
        {
            "alias": "",
            "id": 0,
            "input_manager": "immediate",
            "input_streams": [],
            "meta_info": {
                "callback_bindings": {},
                "premodule_id": 0
            },
            "module_info": {
                "entry": "",
                "name": "c_ffmpeg_decoder",   #模块名:c_ffmpeg_decoder,创建模块的时候需要根据这个名字调用构造函数
                "path": "",
                "type": "c++"   #是c++模块
            },
            "option": {
                "input_path": "./media.mp4"   #此模块输入流是同模块自己读取media.mp4文件产生,无直接输入流
            },
            "output_streams": [
                {
                    "alias": "",
                    "identifier": "video:c_ffmpeg_decoder_0_0"    #输出流和下一个节点的输入流名一样
                },
                {
                    "alias": "",
                    "identifier": "audio:c_ffmpeg_decoder_0_1"     #输出流和下一个节点的输入流名一样
                }
            ],
            "scheduler": 0
        },
        {
            "alias": "",
            "id": 1,
            "input_manager": "immediate",
            "input_streams": [
                {
                    "alias": "",
                    "identifier": "video:c_ffmpeg_decoder_0_0"    #对应上面节点的输出流名
                },
                {
                    "alias": "",
                    "identifier": "audio:c_ffmpeg_decoder_0_1"   #对应上面节点的输出流名
                }
            ],
            "meta_info": {
                "callback_bindings": {},
                "premodule_id": 0
            },
            "module_info": {
                "entry": "",
                "name": "c_ffmpeg_encoder",
                "path": "",
                "type": "c++"
            },
            "option": {
                "audio_params": {
                    "bit_rate": 128000,
                    "channels": 2,
                    "codec": "aac",
                    "sample_rate": 44100
                },
                "output_path": "./output.mp4",  #输出到文件中
                "video_params": {
                    "codec": "h264",
                    "crf": 23,
                    "height": 240,
                    "preset": "veryfast",
                    "width": 320
                }
            },
            "output_streams": [],
            "scheduler": 1
        }
    ],
    "option": null,
    "output_streams": []
}
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值