OBS源码编译开发
本文来自网易云社区
作者:梁敏
OBS简介
OBS(Open Broadcaster Software)是免费开源的视频录制和直播软件,支持运行在windows,Mac和linux平台。官方链接 https://obsproject.com 。 OBS有OBS Classic和OBS studio两个版本。OBS classic是早期版本,已经不再维护和更新。现在推荐使用的是OBS studio版本,是在OBS经典版的基础上重构实现的,使用了更好的模块设计,提高了性能,同时支持DirectX和OpenGL渲染,还支持了多个平台。UI使用了QT制作皮肤。
官方有较详细的说明文档,但是在实际编译开发过程中,还是遇到了一些问题。在此记录下来,以备查阅。
OBS编译(Windows)
准备
从https://github.com/jp9000/obs-studio下载源码。官方编译说明 https://github.com/jp9000/obs-studio/wiki/Install-Instructions
下载依赖库。VS2013: https://obsproject.com/downloads/dependencies2013.zip VS2015: https://obsproject.com/downloads/dependencies2015.zip
cmake,visual studio等工具下载安装好。
生成工程
git命令行下载源码,如果没有用git下载,要把子模块也下载完全。git clone --recursive https://github.com/jp9000/obs-studio.git
cmake-gui打开并设置obs-studio代码路径和build路径。本文将下载的obs-studio代码放在了D:/OBS/obs-build/下面。
ADD ENTRY增加依赖库,QT路径等,如下:
DepsPath:D:/OBS/obs-build/dependencies2013/win64/include
QTDIR:D:/Qt/Qt5.9.0/5.9/msvc2013_64

Config 选择构建使用的vs版本,本文采用vs2013+QT5.9
Generate 构建成功。
打开D:\OBS\obs-build\obs-studio\build\obs-studio.sln
编译工程
生成解决方案。ALL_BUILD会导致工程中所有项目被构建。一般由CMAKE构建的解决方案(Solution)中包含ALL_BUILD和ZERO_CHECK。

解决方案配置

想调试可以使用Debug或者RelWithDebInfo运行程序。
调试运行
程序编译完成,可以运行D:\OBS\obs-build\obs-studio\build\rundir\Release\bin\64bit下obs64.exe。
Tip:直接运行D:\OBS\obs-build\obs-studio\build\UI\Release目录下的obs.exe,依赖的库都没在这个目录下,所以会报缺失文件什么的。使用ALL build为启动项,这里会从rundir下启动程序的。obs项目在生成后,会把相关文件拷贝到D:\OBS\obs-build\obs-studio\build\rundir\Release\bin\64bit下。obs定义了生成后事件:
C:\Program Files (x86)\CMake\bin\cmake.exe" -DCONFIG=RelWithDebInfo -DFNAME=obs64.exe -DINPUT=D:/OBS/obs-build/obs-studio/build/UI/RelWithDebInfo -DOUTPUT=D:/OBS/obs-build/obs-studio/build/rundir/RelWithDebInfo/bin/64bit -P D:/OBS/obs-build/obs-studio/cmake/copy_on_debug_helper.cmake D:\OBS\ obs-build \ obs-studio \build\rundir\Release\bin\64bit
OBS-browser插件
obs-browser是obs-studio的一个输入源插件,基于CEF开发实现的
编译CEF
obs-browser 源码和编译说明: https://github.com/kc5nra/obs-browser obs-browser只在obs-studio的64位版本上才有。
obs-browser 当时使用的是2987版本的CEF,下载CEF http://opensource.spotify.com/cefbuilds/index.html
CEF构建
CEF设置输入,输出目录,Configure,再Generate。
CEF编译
打开D:\OBS\obs-build\cef_binary_3.2987.1601.gf035232_windows64\build\cef.sln,生成解决方案。libcef_dll_wrapper默认的运行库是/MT。obs-studio的项目都是用/MD生成的,因此libcef_dll_wrapper生成时需要修改运行库为/MD,否则obs-studio无法正常生成obs-browser。 
Building OBS and obs-browser
cmake时一定设置下面:
CEF_ROOT_DIR:D:/OBS/obs-build/cef_binary_3.2987.1601.gf035232_windows64
BUILD_BROWSER = TRUE 默认是不创建obs-browser的。
USE_STATIC_CRT = FALSE 设置构建的项目/MD,默认是/MT。这个配置之前没有设置false,导致CEF和obs-browser编译各种问题。
这里有时候会遇到错误如下图:

此时手动设置CEFWRAPPER_LIBRARY路径:
D:/OBS/obs-build/cef_binary_3.2987.1601.gf035232_windows64/build/libcef_dll_wrapper/Release/libcef_dll_wrapper.lib(注意:如果CEF没有编译过,这需要先CEF构建编译)
运行调试
需要把D:\OBS\obs-build\cef_binary_3.2987.1601.gf035232_windows64\Resources下的所有资源文件拷贝到OBS的rundir目录下:D:\OBS\obs-build\obs-studio\build\rundir\Release\obs-plugins\64bit

Release版本,需要D:\OBS\obs-build\cef_binary_3.2987.1601.gf035232_windows64\Release下的文件拷贝到OBS的rundir目录下:D:\OBS\obs-build\obs-studio\build\rundir\Release\obs-plugins\64bit (.lib不用拷贝)

libcef.dll依赖libEGL.dll和libGLESv2这两个文件,但是QT也依赖这两个文件,他们分别在不同的目录,且使用的版本不统一。debug程序时,会报错,把CEF下的这两个文件统一使用D:\OBS\obs-build\obs-studio\build\rundir\Release\bin\64bit目录下的。
网易云大礼包:https://www.163yun.com/gift
本文来自网易云社区,经作者梁敏授权发布
相关文章:
【推荐】 详解DDOS防护之TCP防护
【推荐】 大数据技术在金融行业的应用前景
【推荐】 一个接口的性能问题定位和分析过程
OBS源码编译开发的更多相关文章
- windows中obs源码编译的坑
好用的版本: cmake-3.6.1-win64-x64 + vs2015 + qt-opensource-windows-x86-msvc2015_64-5.7.0 + obs-stu ...
- Android源码浅析(四)——我在Android开发中常用到的adb命令,Linux命令,源码编译命令
Android源码浅析(四)--我在Android开发中常用到的adb命令,Linux命令,源码编译命令 我自己平时开发的时候积累的一些命令,希望对你有所帮助 adb是什么?: adb的全称为Andr ...
- 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...
- vs2013编译obs源码
obs源码下载 一种是在GitHub上下载最新的代码 git clone --recursive https://github.com/jp9000/obs-studio.git --recursiv ...
- Android系统定制和源码开发以及源码编译(附视频)
Android系统定制配套视频: 为了把Android系统源码定制和编译的课程讲完,从准备到录制完所有的视频,一共花去了近半年的时间,前前后后各种下载源码,编译源码,系统不兼容,版本适配,虚拟机配置困 ...
- 【Android开发】构建Android源码编译环境
原文:http://android.eoe.cn/topic/android_sdk 构建Android源码编译环境 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- 麒麟系统开发笔记(三):从Qt源码编译安装之编译安装Qt5.12
前言 上一篇,是使用Qt提供的安装包安装的,有些场景需要使用到从源码编译的Qt,所以本篇如何在银河麒麟系统V4上编译Qt5.12源码. 银河麒麟V4版本 系统版本: Qt源码下载 ...
- Hadoop源码编译过程
一. 为什么要编译Hadoop源码 Hadoop是使用Java语言开发的,但是有一些需求和操作并不适合使用java,所以就引入了本地库(Native Libraries)的概念,通 ...
- 源码编译安装LAMP环境及配置基于域名访问的多虚拟主机
实验环境及软件版本: CentOS版本: 6.6(2.6.32.-504.el6.x86_64) apache版本: apache2.2.27 mysql版本: Mysql-5.6.23 php版本 ...
随机推荐
- ZOJ 2386 容斥原理
题意:给出n个数,和m(1<=m<=200 000 000),求1~M中能被这n个数其中任意一个数整除的个数: 分析:n范围很小,可以枚举选择被哪些数整除,被奇数个整数整除加m/这个n个数 ...
- SiteMesh配置下载使用(简单介绍)
简单介绍 SiteMesh 是一个网页布局和修饰的框架,利用它可以将网页的内容和页面结构分离,以达到页面结构共享的目的. Sitemesh是由一个基于Web页面布局.装饰以及与现存Web应用整合的框架 ...
- TDD: 解除依赖
1 A类依赖B 类,可以把B类提取成IB接口,解除AB 之间的依赖关系. 通过创建实现了IB接口的BStub 装代码,可以模拟B类进行测试. 这是针对接口编程的典型.适合构造代价大,变化多的情况.应 ...
- UGUI防止点击穿透
if (!IsPointerOverGameObject(Input.mousePosition)) { } public static bool IsPointerOverGameObject(Ve ...
- web常用软件
编辑器: VSCode HBuilder WebStorm NotePad++ Eclipse Atom 常用插件: SwitchyOmega Vue-Tools server类: tomcat Ng ...
- php第三节(运算符)
<?php //算术运算符 + - * / % //++ 前加加 先做加运算后座赋值运算 后加加 先做赋值运算后座加运算 //-- 前减减 先做加运算后座赋值运算 后减减 先做赋值运算后座加运算 ...
- LeetCode 中级 - 第k个排列(60)
可以用数学的方法来解, 因为数字都是从1开始的连续自然数, 排列出现的次序可以推 算出来, 对于n=4, k=15 找到k=15排列的过程: 1 + 对2,3,4的全排列 (3!个) 2 + 对1,3 ...
- 小a的强迫症(组合数学)
问题描述: 小a是一名强迫症患者,现在他要给一群带颜色的珠子排成一列,现在有N种颜色,其中第i种颜色的柱子有num(i)个.要求排列中第i种颜色珠子的最后一个珠子,一定要排在第i+1种颜色的最后一个珠 ...
- poj 2186 Popular Cows :求能被有多少点是能被所有点到达的点 tarjan O(E)
/** problem: http://poj.org/problem?id=2186 当出度为0的点(可能是缩点后的点)只有一个时就存在被所有牛崇拜的牛 因为如果存在有两个及以上出度为0的点的话,他 ...
- ELK的简述安装
一.ElasticSearch集群的安装及其配置 https://www.cnblogs.com/gentle-awen/p/10000801.html 可视化x-pack安装: https://ww ...