一、介绍

OBS(Open Broadcaster Software)是一个广泛使用的视频录制直播软件。利用该软件可以实现桌面窗口、游戏、网页、RTMP流、图像等的录制直播。OBS也是一个开放源代码的软件,因此我们可以在源代码的基础上进行修改,来实现我们自己的定制功能。OBS Studio是当前正在维护的版本,老版本叫做OBS Classic。相对老版本而言,OBS Studio在架构上进行了重构,采用微内核+插件的形式进行开发。作者意图通过这种架构来独立出核心代码,将周边功能作为插件形式实现。这在一定程度上提高了项目的可维护性,也让新功能的扩展变得更加简单。OBS Studio本身内置了一些常用的插件,如窗口捕获、视频捕获设备、文本、图像、媒体源等。打开OBS Studio的插件安装目录,可以见到如下动态库文件:

也就是说,OBS中的插件是以动态链接库的形式实现的。在正式开发之前,我们需要配置好开发调试环境,后面的开发工作才能正常开展。

二、编译步骤

(1)下载OBS Studio的源代码。OBS Studio的工程托管在Github上面。OBS Studio工程使用CMake进行管理,因此在特定平台进行编译时,还需安装CMake(https://cmake.org/)处理生成对应平台的工程。
(2)OBS Studio依赖FFmpeg框架,因此还需要下载预编译好的FFmpeg库。官方提供了一个下载地址(http://code.fosshub.com/OBS/downloads)。该页面提供了VS2013和VS2015两个版本的预编译库。根据自己的开发环境选择对应的库版本。下载好后解压到文件夹即可。
(3)设置好环境变量。这里设置的环境变量其实就是为了指定FFmpeg的库路径。需要指定的路径包括:
       DepsPath:包含所有依赖库的路径,但不包括Qt库。
       FFmpegPath:仅包含FFmpeg库的路径。
       x264Path:仅包含x264库的路径。
       curlPath:仅包含cURL库的路径。
      如果需要编译真个OBS Studio UI的话,还需要设置另外一个环境变量:
       QTDIR:指定Qt安装的根目录。如(C:\Qt\Qt5.5.1\5.5\msvc2013_64)
      当然如果仅仅只需要编译插件目录下的插件,可以不用指定QTDIR变量。
(4)打开CMAKE,指定好源代码文件夹路径和输出文件夹路径。注意的是,OBS Studio工程默认情况下是编译UI的。如果不想编译UI,那么需要在CMake中新建一个BOOL变量:DISABLE_UI。指定不需要编译UI,否则CMake会尝试搜索QTDIR变量失败,导致CMake过程也失败。
(5)到此步时,可以点击Configure按钮,CMAKE会根据环境来生成工程文件了。在Windows平台下可以选择生成Visual Studio的工程。第一次Configure完成之后,勾选上面的COPY_DEPENDENCIES选项,然后再次点击Configure进行配置。这时可能会出现如下错误:
      这是因为我们在下载OBS Studio工程时没有下载完整,因为工程中这部分代码给独立成一个单独的仓库了:
      点击这个链接,即可跳到相应的代码仓库中。下载好的代码放到如下位置:

      再次点击Configure,可以看到CMake顺利生成了VS工程。
(6)打开生成的VS工程BuildAll.sln,生成解决方案,发现出现了一大批的Error C2275。原来是VS对于C语言的严格要求导致的。VS要求C语言中所有的变量声明都放到函数的起始位置。那就手动一个个把它修改一下吧。网上也可以找到其他解决方案。修改完之后即可成功生成解决方案了。
(7)启动调试的时候可能会出现如下错误:
      这是因为调试时的工作目录不一样,需要在VS中进行设置:
      保存设置之后,即可成功启动调试了。

三、总结

OBS Studio工程的配置总体上来说步骤较多,但是好在不算太麻烦。遇到了很多问题,但是大多都能顺利解决。另外,OBS Studio已经成为了一个跨平台的开源软件,在尝试编译的过程中,也发现了官方其实提供了一个安装指南(https://github.com/jp9000/obs-studio/wiki/Install-Instructions)。该指南为Windows,Linux,Mac OS X平台都提供了具体的指导。因此用户在编译安装时,其实可以按照指南一步步跟着来。对于OBS Studio的代码,官方在开发的时候提供了代码注释,可以利用Doxygen工具来提取这些注释,从而生成帮助文档。开发初始阶段,建议还是调试OBS Studio内置的插件,来熟悉下OBS Studio的插件架构。

四、参考链接

1. http://blog.csdn.net/leixiaohua1020/article/details/14215391

2. http://www.cnblogs.com/dwdxdy/p/3713990.html

3. http://www.cnblogs.com/dwdxdy/p/3713968.html

4. http://www.tuicool.com/articles/iYjAFn

5. http://yul100887.blog.163.com/blog/static/200336135201211143525930/

6. http://blog.csdn.net/bweaglegao/article/details/8540860

基于OBS的插件开发总结的更多相关文章

  1. 基于jquery的插件开发

    最近在公司做一个项目,由于后台数据太多需要分页显示,在网上找了很多插件都没有找到合适的分页插件,所有的分页插件始终达不到自己想要的效果.由于这个项目也不是很赶,就在网上查找各种资料,自己写一个基于jq ...

  2. (转)openfire插件开发(二) 基于web的插件开发

    转:http://blog.csdn.net/lovexieyuan520/article/details/38935137 在前面的博客中,我介绍了openfire插件开发,在那篇博客中我详细的说明 ...

  3. 基于IDEA Plugin插件开发,撸一个DDD脚手架

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 最近很感兴趣结合 IDEA Plugin 开发能力,扩展各项功能.也基于此使用不同的案例,探索 ...

  4. Android基于cordova3.3插件开发

    最近的工作项目,需要使用cordova插件开发,详细Cordova角色,不会走,你可以去百度自身OK该,直接启动.详细过程,我有一个小Demo解说提前进行. 还只是接触,东西太理论基础,我也不太清楚, ...

  5. 基于obs+nginx-rtmp-module搭建自己直播的系统

    前言 一句唠叨,工欲善其事,必先利其器,在程序员的工作里,搭建各种环境往往花费过多不必要的时间,这里建议搭建服务端环境时,尽量避开win.macos这种系统,个人比较推崇centos. 操作 下面以c ...

  6. OBS插件开发以及OBS插件的选择(obs直播插件)研究思路

    obs版本的选择: 工作室版,优化了很多东西,缺点是不能用插件,在部分机型不稳定,因为更新的很频繁.不过这个插件不能用的说法还是停留在早起,截至到今天已经完美支持,所以在不久的将来会越来越好,如果是开 ...

  7. 基于jq插件开发及弹窗实例

    基于jq的插件开发是什么鬼,$.fn是什么鬼,我在实际工作中也遇到过这个问题,下面就让我们一起来看一看这些都是什么鬼. 首先我们介绍$.fn. $.fn是指jquery的命名空间,加上fn上的方法及属 ...

  8. Eclipse 插件开发 -- 深入理解菜单(Menu)功能及其扩展点( FROM IBM)

    Eclipse 插件开发 -- 深入理解菜单(Menu)功能及其扩展点 菜单是各种软件及开发平台会提供的必备功能,Eclipse 也不例外,提供了丰富的菜单,包括主菜单(Main Menu),视图 / ...

  9. 3款知名RTMP推流模块比较:OBS VS SmartPublisher VS Flash Media Live Encoder

    OBS 功能强大,几乎所有你想要的场景它都有,用起来很顺手.可以将桌面.摄像头.程序窗口通过rtmp推送到流媒体服务器上. 当然如果你是开发者,想基于OBS做二次开发,实现二次产品化的化,难度比较大, ...

随机推荐

  1. [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)

    文章来自:http://www.hoohack.me/2016/02/15/understanding-phps-internal-array-implementation-ch 原文:https:/ ...

  2. 毫秒级的时间处理上G的图片(生成缩略图)

    测试环境: 测试图片(30M): 测试计时方法: Stopwatch sw1 = new Stopwatch(); sw1.Start(); //TODO...... sw1.Stop(); stri ...

  3. C#设计模式之观察者

    Iron之观察者 引言 上一篇说的职责链模式,很有意思的一个模式,今天这个模式也是很有意思的一个模式,还是不啰嗦了直接进入主题吧. 场景介绍:在上一遍中说到用到部件检测,很巧妙的让调用者和处理者解耦了 ...

  4. 我所理解的RESTful Web API [设计篇]

    <我所理解的RESTful Web API [Web标准篇]>Web服务已经成为了异质系统之间的互联与集成的主要手段,在过去一段不短的时间里,Web服务几乎清一水地采用SOAP来构建.构建 ...

  5. 基于Spring Mvc实现的Excel文件上传下载

    最近工作遇到一个需求,需要下载excel模板,编辑后上传解析存储到数据库.因此为了更好的理解公司框架,我就自己先用spring mvc实现了一个样例. 基础框架 之前曾经介绍过一个最简单的spring ...

  6. angularjs 2.0 快速开始

    前言 angularjs2.0 如果发布,公司的项目会基于2.0开发,在1.0的时候就踩了好多坑,趁这2.0还没正式发布,赶紧踩下坑. 这篇文章是参考angularjs2.0 官方文档写的,开发环境需 ...

  7. kettle资源库配置

    资源库的作用:资源库是用来保存操作步骤和相关的日志,转换,JOB 等信息.用户通过图形界面创建的的转换任务可以保存在资源库中.资源库可以是各种常见的数据库,用户通过用户名/ 密码来访问资源库中的资源, ...

  8. SQLyog图形化l数据库的操作和学习

    1:首先SQLyog作为mysql的图形化操作工具,是一个收费的工具,但是在天朝大国,任何收费的软件都可以被破解,具体软件的安装不做多叙述,支持正版,毕竟作为一个开发人员,辛辛苦苦开发出来的软件,还指 ...

  9. jquery-懒加载插件

    在Web应用程序中,系统的瓶颈常在于系统的响应速度.如果系统响应速度过慢,用户就会出现埋怨情绪, 系统的价值也因此会大打折扣.因此,提高系统响应速度,是非常重要的. 从此可知,再好的网站,再炫的网站, ...

  10. Android之控件使用

    Android系统为我们提供了大量的控件,例如:开关控件.单选按钮.多选按钮.单选菜单等等,那么这些控件如何使用呢?本篇我将带领大家一道学习一下如何使用这些控件.所谓无图无真相,先让大家看一下效果图: ...