
OBS源码分析
文章平均质量分 66
分享obs的编译,源码分析,二次开发
令狐掌门
C++程序员,出版过《C++零基础入门视频教程》、《Qt高级进阶视频教程》、《C++ Qt6 QtQuick/QML入门进阶视频教程》、《OBS源码分析与桌面录制视频教程》、《PyQt PySide6零基础入门与项目实战》。
展开
-
VS2022编译OBS29.1之后的版本
执行cmake生成sln时, 会自动下载deps, 大概15分钟(需要有合理的网络环境, 不然部分依赖会下载失败) .在OBS 29.1之前, windows系统编译时需要手动下载deps依赖库文件, 具体可参考我的另一篇博客,4 双击生成的sln文件, x64在目录build_x64\obs-studio.sln。编译环境win11, vs2022, Qt5.15.2, 建议用Qt6.2 打开obs项目目录, 执行。原创 2023-08-07 21:34:31 · 1076 阅读 · 0 评论 -
C++ OBS源码分析与屏幕录制软件开发视频教程
本课程主要讲解OBS源码的编译,OBS功能实现,初始化,显示器录制,窗口的实现录制,以及录制模块源码详细分析,最后基本OBS源码开发了一个录制软件,界面如下:主要有如下功能(1)实现桌面,显示器采集、录制(2)指定应用程序窗口进行录制(3)可以选择系统声音,麦克风进行录制(4)稳定fps 60,高清原画,鼠标不闪,、音视频同步,无卡顿,无延时(5)可以指定帧率录制,5-60 fps都可以(6)显示了系统托盘,录制时可以最小化到系统托盘课程链接:https://edu.youkuaiyun.com/co原创 2021-10-20 23:28:37 · 5997 阅读 · 7 评论 -
vs2019编译obs源码生成sln解决方案
obs的编译不是很难,只要代码下的全,环境变量配的ok, 基本都能编译过,我在很多台电脑帮别人编译过,都编译OK了。 obs官网 https://obsproject.com/ obs代码仓库 https://github.com/obsproject/obs-studio 本篇博客介绍如何在win10上用vs2019 cmake编译obs, 先去github上的编译介绍,obs仓库的wiki页面查看各种build简介,不会的直接点这个链接https://github.com/obsproj原创 2021-06-10 20:58:30 · 4188 阅读 · 6 评论 -
obs代码总体架构图
最近在找obs资料时,遇到了两张很好的obs代码架构图,对阅读obs代码很有帮助,下面贴出来。 图一 图二 不知哪两位大佬总结的,这两张图,对obs的总结很到位,花了很大的心血。由于是之前提取的图,转载地址已经记不清了。...原创 2021-06-20 22:10:39 · 3602 阅读 · 0 评论 -
obs源码分析【一】:main函数
最近对obs的代码感兴趣了,在obs里也抠了不少功能出来用到项目上,准备把自己的心得记录下来,有兴趣的可以一起留言讨论。 在学习obs源码之前,需要先编译obs的源码,有需要的可以看上一篇,obs项目的编译方法,需要的可以点击【obs编译方法】main函数在哪里 obs的界面是Qt写的,目测没用到QML, 既然是Qt, 那先从main函数开始,如果你是一个新手,在几百个cpp文件中,怎么快速找到main函数呢,ctrl F全局搜索main( 经过查找,可以很快确定是在obs-app里面原创 2021-06-10 22:07:02 · 5237 阅读 · 1 评论 -
obs源码分析【二】:录制功能剖析
学obs, 一是看它的代码结构,二是把obs的代码抠出来运用到项目中,这篇先来看看obs的录制功能是如何实现的,先找到录制的按钮 查找recordButton对应的槽函数,Qt客户端项目嘛,简单,槽函数无非就那几种写法,直接来on_recordButton_clicked(), 这种是最简单的,刚好obs就是这种写法,而且主界面上其它的控件槽函数也在当前文件中。 那么去它的cpp源码看看,void OBSBasic::on_recordButton_clicked(){ if (out原创 2021-06-18 00:19:35 · 4750 阅读 · 5 评论 -
obs源码分析【三】:视频模块线程创建与参数初始化
在录制窗口之前,音视频的一些参数得先知道吧,比如视频的帧率,输出位置,编码方式等,这些是在【设置】里面配置的,在OBS主界面启动的时候,会获取这些这些,mainWindow = new OBSBasic();mainWindow->setAttribute(Qt::WA_DeleteOnClose, true);connect(mainWindow, SIGNAL(destroyed()), this, SLOT(quit()));mainWindow->OBSInit();OB原创 2021-06-20 23:46:54 · 1666 阅读 · 2 评论 -
obs源码分析【四】:obs录制的窗口截图与视频编码
在obs中,录制时,提供了三种窗口截屏方法,enum window_capture_method { METHOD_AUTO, METHOD_BITBLT, METHOD_WGC,}; 但是在窗口像素抓取时还是用的BitBlt,选择抓屏的方法:static enum window_capture_methodchoose_method(enum window_capture_method method, bool wgc_supported, const char *c原创 2021-07-04 22:13:37 · 4777 阅读 · 5 评论 -
obs源码分析【五】:音频采集线程
在第三篇介绍了视频的线程,音频的线程代码也是在那一块儿:if (!ResetAudio()) throw "Failed to initialize audio"; 音频线程的创建是在audio_output_open函数中int audio_output_open(audio_t **audio, struct audio_output_info *info){ 。。。 if (pthread_create(&out->thread, NULL, audio_thre原创 2021-07-05 21:02:54 · 2157 阅读 · 1 评论 -
obs源码分析【六】:枚举windows窗口
在做录制时,有时需要指定窗口进行录制,就像视频会议软件,钉钉、腾讯会议都有这个功能,那么是如何让做到的呢,我们在obs的代码里面可以找到,windows里面的枚举窗口用到的API是EnumWindows:BOOLWINAPIEnumWindows( _In_ WNDENUMPROC lpEnumFunc, _In_ LPARAM lParam);根据该方法,我们去查找obs代码, EnumWindows调用的地方:HWND find_window_top_level(enum w原创 2021-07-14 15:33:50 · 1029 阅读 · 0 评论 -
obs源码分析【七】:obs.exe依赖项说明
安装obs后会发现,obs.exe的上两层目录有data和obs-plugins,如果把它们改个名字,例如改为data1和obs-plugins1,此时obs启动会报错,在用obs sdk开发时,如果不希望这样的位置依赖,怎么办呢?我们可以在obs源码中进行修改。 查找源码可知,它们在obs-windows.c,代码如下:#ifdef _WIN64#define BIT_STRING "64bit"#else#define BIT_STRING "32bit"#endifstatic原创 2021-09-13 21:56:39 · 938 阅读 · 0 评论 -
obs源码分析【八】:显示器采集
obs的视屏录制主要分3种:窗口采集:采集应用程序窗口显示器采集:也叫全屏采集,可以采集整个屏幕,当有多个显示器时,可以设置采集其中一个显示器游戏采集:可以采集游戏窗口 在plugin-main.c可以看到各个采集的定义,代码如下:extern struct obs_source_info duplicator_capture_info;extern struct obs_source_info monitor_capture_info;extern struct obs_sourc原创 2021-09-18 22:40:36 · 3801 阅读 · 1 评论