OBS0.2.4基础框架
+ -

OBS主程运行流程

2024-10-07 10 0
本想着从简单的开始,但是发现核心的渲染如D3D11和新的版本基本差不多,还不如直接用新的代码调试,所以本章节放弃。

主程的运行流程如下:
OBS主程运行流程

其中

  • OBSApp为应用主程序,继承于class OBSApp : public QApplication
  • OBSBasic为主应用程序窗口,继承于class OBSBasic : public OBSMainWindow

他们的关系可由一个简单的QT应用UI程序来表示,详见:https://www.pnpon.com/article/detail-667.html

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;//主窗口
    //创建标签
    QLabel* plabel = new QLabel("站长漫谈-pnpon.com",&w);
    plabel->move(100,100);//设置其在主窗口中的位置
    plabel->resize(200,30);//设置其大小
    w.resize(400,400);//设置主窗口大小
    w.show();
    return a.exec();
}

OBSBasic::OBSInit()函数中做了基础的初始化:

  • obs_startup() 初始化obs_core结构体
  • InitBasicConfig() 从ini中加载OBS studio配置信息
  • ResetVideo() 加载d3d11并初始化render_main obs_video_thread
  • ResetAudio()音频
  • InitOBSCallbacks() 用户添加外部视频的操作函数;如添加,删除等
  • 加载模块
    • test-input
    • obs-ffmpeg
    • obs-x264
    • obs-outputs
    • rtmp-services
    • win-wasapi
    • win-capture
  • InitOutputs()初始化推流输出
  • InitEncoders()编码器,输出流用的,编码为AAC和H264.flv
  • InitService() rtmp?不太懂
  • ResetAudioDevices obs-ui中配置的音频设备初始化

0 篇笔记 写笔记

obs模块化原理
OBS是模块化设计,各个模块按照约定提供相应的导出函数,并且以DLL的形式存于模块所在的路径。OBS加载模块时,每个模块分配一个obs_module结构体。struct obs_module { char *mod_name; //模块的名称 const char *file;......
OBS模块WASAPI的其中OBS_DECLARE_MODULE和OBS_MODULE_USE_DEFAULT_LOCALE
OBS插件模块WASAPI用于实现Windows音频的。其源文件目录位于:obs-studio-masterpluginswin-wasapi源文件有:CMakeLists.txtdata //资源文件目录enum-wasapi.cppenum-wasapi.hppplugin-m......
OSB-WASAPI插件obs_module_load函数
obs_module_load是OBS插件模块必须实现的函数,其对应于结构体obs_module中load函数指针: bool (*load)(void); //函数名必须为obs_module_loadWASAPI的插件函数代码如下:bool obs_module_load(void){......
OBS源类型注册函数obs_register_source
OBS的插件模块通过obs_register_source函数注册“源”。该函数通过obs_source_info结构体提供源相关的属性信息和回调函数。#define obs_register_source(info) obs_register_source_s(info, sizeo......
OBS用户添加源实例
上一节知道,在OBS中任右键,会弹出一菜单,可以添加通过插件模块注册的各种”输入源“当在菜单中选中某种类型的”输入源“之后,就会调用函数AddSource。其中 id是各个模块注册输入源时提供的源id,该ID应全局惟一。void OBSBasic::AddSource(const char *id......
OBS源实例的创建过程obs_source_create
OBS源实例的创建使用的是函数obs_source_create实现的obs_source_t *obs_source_create(const char *id, const char *name, obs_data_t *settings, obs_data_t......
OBS模块插件功能启用
OBS插件激活:static void activate_source(obs_source_t *source){ if (source->context.data && source->info.activate) source->i......
OSB线程-obs_graphics_thread
根据OSB官方文档介绍,Libobs库有3个线程,分别为:osb_graphic线程,obs_video线程和obs_audio线程。对于任意一个应用软件,其线程架构的设计,可以准确地了解一个应用软件的设计思路,更进一步地理解应用软件的框架设计。另外,理解了此类软件的框架设计,吸取别人优秀的设计......
obs视频参数配置
由于本人对高级图形编程从未接触过,故为学习OBS也需要浅浅的了解一下。OBS关于图形配置及相关的回调函数调用,由一个结构体obs_video_info主载。struct obs_video_info {#ifndef SWIG /** * Graphics module to ......
obs_init_graphics之gs_create
gs_create函数实现功能如下:1.os_dlopen加载对应的DLL导内存,即LoadLibray2.GetProcessAddress获取所有导出函数指针3.调用device_create函数,模块内部初始化4.graphics_init OBS渲染用到的资源初始化int gs_cre......
D3D11-OBS初始化代码
#include #include #include #include #include #include
obs_display结构体用于存储需要将显卡渲染的图像输出到窗口显示的对象。struct obs_display { bool update_color_space; bool enabled; uint32_t cx, cy; uint32_t next_cx,......
顶点坐标通过graphics_init_immediate_vb创建,其存储于graphics_subsystem结构体的immediate_vertbuffer成员指针。static bool graphics_init_immediate_vb(struct graphics_subsyste......
sprite顶点坐标使用函数graphics_init_sprite_vb实现,其初始化位于立即顶点坐标之后。static bool graphics_init_sprite_vb(struct graphics_subsystem *graphics){ struct gs_vb_da......
一个obs_display_t是一个渲染组,其与窗口HWND绑定,也可以认为其代表一个交换链。render_displays是显示渲染的结果,可以有多个,与窗口HWND绑定obs_display_t创建在OBS中其实就是输出主窗口。其结绝体如下:/* displays */struct......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!