OBS源码分析一x264模块加载流程

1.第一步先看模块加载流程图

OBS源码分析一x264模块加载流程_第1张图片

 2.第二步代码详细步骤和说明

obs-x264是软编,obs-qsv11是intel硬编,obs-ffmpeg中包含ffmpeg_aac、ffmpeg_opus、以及nvenc编码,rtmp是推流模块;

关于软编和硬编这篇文章有详细的介绍:

https://www.cnblogs.com/my_life/articles/6734377.html

这里将结合代码详细介绍obs-x264模块是怎么加载并且被调用的,其他几个模块的加载是类似的;

OBS源码分析一x264模块加载流程_第2张图片

  • AddExtraModulePaths(),添加加载模块的路径;
  • obs_load_all_modules()加载所有模块;

OBS源码分析一x264模块加载流程_第3张图片

  • obs_find_modules()遍历所有模块目录;
  • load_all_callback是对找到的模块执行的回调函数;
  • load_all_callback() 会调用 obs_open_module()和obs_init_module() ;

 OBS源码分析一x264模块加载流程_第4张图片

  • os_dlopen()获取打开模块的句柄;
  • load_module_exports函数获取模块中的接口地址绑定给obs_module各个函数指针;OBS源码分析一x264模块加载流程_第5张图片
  • obs中各个模加载的接口地址obs_module_load,被绑定至mod->load;

obs_modeule结构体包含以下子段和函数指针;

OBS源码分析一x264模块加载流程_第6张图片

OBS源码分析一x264模块加载流程_第7张图片

obs_init_module(module),该函数的作用就是为了调用刚才绑定的module->load()接口,

也就是obs-x264模块中的obs_module_load函数;

OBS源码分析一x264模块加载流程_第8张图片

OBS源码分析一x264模块加载流程_第9张图片

宏obs_register_encoder(&obs_x264_encoder)中obs_x264_encoder是个全局变量,

该全局变量在obs-x264.c文件中完成了obs_x264_encoder的初始化;

OBS源码分析一x264模块加载流程_第10张图片

X264到底是干什么用的

https://blog.csdn.net/cy_weiyi/article/details/45582691

OBS源码分析一x264模块加载流程_第11张图片

obs_register_encoder_s()做一系列的检查 -> 宏REGISTER_OBS_DEF 将obs_x264_encoder

添加到obs->encoder_types至此obs-x264模块的加载已完成,后面会介绍如何使用x264编码器;

在obs里面有很多模块都是以插件形式加载进来的,其它模块插件加载过程与x264加载流程类似,在obs源码里可以看到很多模块都是通过obs_module_load()来加载的。

OBS源码分析一x264模块加载流程_第12张图片

 

你可能感兴趣的:(obs,流媒体)