OBS
郑文博Coding
人的一生中最光辉的一天,并非是功成名就那天,而是从悲叹与绝望中产生对人生的挑战,以勇敢迈向意志的那天。
展开
-
OBS技术交流群
有喜欢OBS开源技术的加群原创 2021-10-15 15:57:03 · 940 阅读 · 1 评论 -
OBS源码分析(十一)怎么在OBS添加QT库,比如:Network、Multimedia
一、在进行OBS二次开发的时候难免要添加QT的一些库,而OBS是在VS中开发的,程序每次更新之后都要重新进行配置很麻烦,所以在此记录一下二、在UI模块中找到CMakeLists.txt文件并打开,添加find_package包和链接库,如下图:然后添加链接库三、修改完之后保存编译并选择全部重新加载...原创 2021-03-18 18:15:17 · 896 阅读 · 0 评论 -
OBS插件分享(一)
最近有一个需求,就是想把OBS中的某一个源的音频单独输出到一个独立的声卡,于是在Github上找到了一个现成的插件,现在把它分享给大家!1、这个插件是以滤镜的方式加载在OBS中的。如图2、编译方式源码地址:https://github.com/exeldro/obs-audio-monitor编译步骤:(1)建立OBS Studio:https://obsproject.com/wiki/Install-Instructions(2)将此存储库签出到UI / frontend-plugins原创 2021-02-07 13:56:10 · 2425 阅读 · 0 评论 -
OBS源码分析(十)-滤镜的创建
一、OBS的滤镜都是以插件的方式去加载的,对应的OBS项目工程是:二、滤镜的创建过程1、右击选择的源void OBSBasic::on_sources_customContextMenuRequested(const QPoint &pos){ if (ui->scenes->count()) { QModelIndex idx = ui->sources->indexAt(pos); CreateSourcePopupMenu(idx.row(), fal原创 2021-02-02 11:15:30 · 1618 阅读 · 0 评论 -
OBS源码分析(九)-窗口视频预览
最近接了个需求,要在源列表的每个源进行视频预览类似如下图:一、OBS所有的视频预览包括主窗口的预览都是继承OBSQTDisplay这个类。在SourceTreeItem构造函数中添加以下代码 // 预览窗口 play = new OBSQTDisplay(); play->setFixedWidth(100); auto addDrawCallback = [this]() { obs_display_add_draw_callback(play->GetDisplay(),原创 2021-02-02 10:27:49 · 1794 阅读 · 5 评论 -
OBS源码分析(八)分析libobs几个主要的线程
最近一段时间再看OBS的几个重要的线程,通过不断的学习和结合一些大佬的博客终于相对搞明白了这几个线程,分别是采集渲染线程和编码线程,分析如下:struct obs_core_video几个关键变量的注释:// 主画布 渲染当前场景下sources的画布 // 渲染主窗口的窗口时 直接把这个纹理贴到display中gs_texture_t *render_texture; // output画布 如果直播录像时的宽高(output宽高)和主画布宽高不一样,// 需要在该画布上对render转载 2021-01-13 11:38:16 · 2250 阅读 · 1 评论 -
OBS源码学习(七)-源的创建
当用户点击添加源时,OBS会弹出相应的源列表。代码如下:void OBSBasic::AddSourcePopupMenu(const QPoint &pos){ if (!GetCurrentScene()) { // Tell the user he needs a scene first (help beginners). OBSMessageBox::information( this, QTStr("Basic.Main.AddSourceHelp.Title"),原创 2020-12-29 11:17:55 · 922 阅读 · 0 评论 -
OBS源码学习(六)-将当前视频画面推流到两个不同的RTMP服务器上
一、OBS本身的推流方法在OBS设置好推流地址后保存并应用地址点击保存之后会调用SaveStream1Settings函数void OBSBasicSettings::SaveStream1Settings(){ bool customServer = IsCustomService(); const char *service_id = customServer ? "rtmp_custom" : "rtmp_common"; obs_service_t *oldService = mai原创 2020-12-17 15:32:51 · 1150 阅读 · 0 评论 -
OBS源码学习(五)-将OBS自动更新功能迁移到公司自己的服务器上
一、实现自己运行程序的manifest.jsonstatic void GenerateJson(string path){ //path = "D:\\OBSUpdate\\obs-studio\\build\\rundir\\Release"; string runDirPath = path; char *p = const_cast<char *>(path.c_str()); fileSearch(p); //生成hash值 std::map<string, s原创 2020-12-17 11:17:55 · 920 阅读 · 1 评论 -
OBS源码学习(四)-插件模块加载流程
一、OBS Studio在架构上采用的是微内核+插件的形式开发的,至于微内核的介绍请自行百度。OBS开源社区这样写的目的是为了提高项目的可维护性,也让新功能的扩展变得更加简单,OBS内部开发了一些常用的插件如下图:在OBS启动初始化void OBSBasic::OBSInit()时,会调用AddExtraModulePaths函数,这个函数的目的是设置插件的路径static void AddExtraModulePaths(){ char base_module_dir[512];#if defi原创 2020-12-16 11:05:30 · 3345 阅读 · 9 评论 -
OBS源码学习(三)-编译updater工程
由于项目要求要将OBS更新功能迁到公司自己的服务器上,OBS默认的是不编译updater工程,现将OBS更新工程编译步骤如下:一、下载解压并使用 CMake 生成编译 zlib https://download.csdn.net/download/XiaoStore/12315404二、编译版本 obs-studio-26.0.8三、CMake 生成配置文件时去掉勾选 DISABLE_UPDATE_MODULE四、添加环境变量 STATIC_ZLIB_PATH D:\OBSUpdate\zlib五原创 2020-12-15 18:05:13 · 546 阅读 · 1 评论 -
OBS源码学习(二)-如何添加新的ui文件
OBS 上层界面是用QT+C++11来完成的,我们对OBS进行二次开发的时候避免不了添加自己新的ui界面,以下是添加ui的过程。一、用Qt creator创建一个ui界面,如下图:二、将sencewidget.cpp和sencewidget.h复制到D:\OBSUpdate\obs-studio\UI 目录中,将sencewidget.ui文件复制到D:\OBSUpdate\obs-studio\UI\forms目录中。然后修改D:\OBSUpdate\obs-studio\UI\CMakeList原创 2020-12-15 17:07:15 · 1679 阅读 · 9 评论