Window下 VS2019+QT6下编译osb-studio
作为一个obs老用户,一直用的是Mac版进行开发,作为Windows开发新手的我,准备编译一下osb练练手,熟悉一下Windows项目的编译流程。
osb wiki给出了Windows的编译流程,编译连接在这里。让我惊喜的是obs竟然要求vs2022,Windows 10 SDK (minimum 10.0.20348.0)和QT6.3,相比于其他C/C++项目,使用的技术可以说相当新了。
本次的编译环境:
OS:Windows 10 21H2 Build 19044.1826
IDE:VS2019
SDK:Windows 10 SDK version 2104 (10.0.20348.0)
CMake:3.22.1
其中CEF Wrapper我没有用到,这个是编译obs-browser(cef内核浏览器插件)用的,这里用不到,直接pass就好,cmake的时候把BUILD_BROWSER
设置为OFF
就行,这样就不会编译obs-browser了。
P.S. 这次编译的时候我没有手动设置 BUILD_BROWSER=OFF
也编译成功了,cmake自动把它设置为了OFF
,记得当初Mac编译obs的时候要手动设置才行,不然会报错。
项目推荐使用最新的vs2022,不过我用的是vs2019,并不影响,只要SDK达到最低要求(10.0.20348.0)就可以,SDK版本可以在这里查看:https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/ 。或者打开Visual Studio查看:
获取源吗#
接下来就是下载源码和依赖项,我的项目路径为D:\download\obs_project
,在这个路径下克隆项目:
git clone --recursive https://github.com/obsproject/obs-studio.git
获取依赖项#
然后进入 https://github.com/obsproject/obs-deps/releases?q=windows 下载依赖项,这里要下载的文件有两个,我选择的都是64位的:
开始构建项目#
打开cmake,设置obs源码路径和输出路径,并添加deps,QT路径,其中DepsPath
设置为deps路径,QTDIR
设置为QT路径。设置完成后点击Configure
。
接着弹出了一个弹框,选择vs2019,其他的可以用默认,点击Finish,就可以等待项目配置完成了。
等待一段时间后,cmake提示configuring done,点击Generate
,生成vs项目文件。
提示Generating done后,点击Open Project
,Visual Studio会自动打开obs项目。生成的sln文件位于D:\download\obs_project\obs-studio\build
下。
打开项目后,右键ALL_BUILD,点击生成。结果出了一堆错误。
warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
这里是项目设置为把warning视为error,所以编译不过,直接把4819加入到忽略列表里:
把出问题的项目加上忽略之后右键ALL_BUILD编译(我没有一个个查出问题的项目,而是把所有的项目都加上了4819忽略),这一次比上次好多了,只有一个编译失败。
错误信息:
1>LINK : fatal error C1900: “P1”(第“20211117”版)和“P2”(第“20210202”版)之间 Il 不匹配
1>LINK : fatal error LNK1257: 代码生成失败
问题出在了D:\download\obs_project\deps\lib\speexdsp.lib
上,应该是speexdsp.lib的编译版本跟obs的不一致导致的。
解决的方法,经过网上查找,大多数是说要升级visual studio,但是我的vs2019已经是最新版本,这种方法无效;另一种方法是自己编译speexdsp.lib。还有一种更简单粗暴的方法,就是直接禁用speexdsp,在cmake里把ENABLE_SPEEXDSP
设置为OFF
(这只是我的不负责任推测,这种方法我没有实际测试过。speexdsp是音频降噪库,也有音频取消回声功能)。
所以还是选择重新编译speexdsp,先去官网下载speesdsp源码,地址是:https://www.speex.org/downloads/ 。下载解压后打开speexdsp-1.2.1\win32\VS2008
,用vs2019打开sln文件,会弹出一个框询问是否升级项目,点击确定升级。
进入项目后,修改为Release x64版本,原项目只有x86,需要自己新建一个x64版本。
切换完成后右键libspeexdsp编译,成功编译出静态库。
但是当我们打开speexdsp-1.2.1\win32\VS2008\x64\Release
后并没有找到libspeexdsp.lib
,其实上面有提示warning:
warning MSB8012: TargetPath(D:\download\obs_project\speexdsp-1.2.1\win32\VS2008\x64\Release\libspeexdsp.lib) 与 Library 的 OutputFile 属性值(D:\download\obs_project\speexdsp-1.2.1\lib\libspeexdsp.lib)不匹配。这可能导致项目生成不正确。若要更正此问题,请确保 (TargetName) 和 $(TargetExt) 属性值与 %(Lib.OutputFile) 中指定的值匹配。
意思是项目设置里输出路径+目标文件名≠输出文件名。打开项目属性页,可以看到两者确实不一样:
只要把这两个改为相同路径相同文件名即可。顺便说一下,在D:\download\obs_project\deps\lib
下,speexdsp库名字是speexdsp.lib
,而我们自己生成的是libspeexdsp.lib
,这里需要把项目的输出文件名改一下,统一为speexdsp.lib
,这样生成库之后直接替换deps文件夹下的库就行。
修改后生成路径为:$(SolutionDir)$(Platform)\$(Configuration)\speexdsp.lib
重新编译后顺利生成speexdsp.lib
,路径为D:\download\obs_project\speexdsp-1.2.1\win32\VS2008\x64\Release\
。将生成的库文件替换到D:\download\obs_project\deps\lib
。
重新编译obs-filters,成功。
obs软件生成路径在 D:\download\obs_project\obs-studio\build\rundir\Release\bin\64bit
,现在,打开obs64.exe
,开始直播吧~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南