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模块是怎么加载并且被调用的,其他几个模块的加载是类似的;
- AddExtraModulePaths(),添加加载模块的路径;
- obs_load_all_modules()加载所有模块;
- obs_find_modules()遍历所有模块目录;
- load_all_callback是对找到的模块执行的回调函数;
- load_all_callback() 会调用 obs_open_module()和obs_init_module() ;
- os_dlopen()获取打开模块的句柄;
- load_module_exports函数获取模块中的接口地址绑定给obs_module各个函数指针;
- obs中各个模加载的接口地址obs_module_load,被绑定至mod->load;
obs_modeule结构体包含以下子段和函数指针;
obs_init_module(module),该函数的作用就是为了调用刚才绑定的module->load()接口,
也就是obs-x264模块中的obs_module_load函数;
宏obs_register_encoder(&obs_x264_encoder)中obs_x264_encoder是个全局变量,
该全局变量在obs-x264.c文件中完成了obs_x264_encoder的初始化;
X264到底是干什么用的
https://blog.****.net/cy_weiyi/article/details/45582691
obs_register_encoder_s()做一系列的检查 -> 宏REGISTER_OBS_DEF 将obs_x264_encoder
添加到obs->encoder_types至此obs-x264模块的加载已完成,后面会介绍如何使用x264编码器;
在obs里面有很多模块都是以插件形式加载进来的,其它模块插件加载过程与x264加载流程类似,在obs源码里可以看到很多模块都是通过obs_module_load()来加载的。