obs-vs2022编译

1 相关链接

OBS(Open Broadcaster Software,开放广播软件),免费的开源音视频软件,用于音视频记录和实时流媒体播放。目前的OBS为obs studio版本,它是跨平台重构后的版本,对比原始版本obs classic。

官网:https://obsproject.com/

git地址:https://github.com/obsproject/obs-studio

2 obs架构

2.1 主要功能模块

整套系统,界面部分采用QT绘制,其余部分,大致可分为几部分:数据输入层、数据处理层、数据输出层。梳理模块及功能后,总结如下:

obs-vs2022编译_第1张图片
  • 数据输入层:主要对应上obs中场景和各种源,可由界面操作。

  • 数据处理层:主要是对输出数据的编码、特效处理。

  • 数据输出层:主要是对应推流、本地录制/回放录制、本地渲染预览等。

2.2 插件系统

obs设计上的最大目标,应该是兼容和灵活。为了兼容各种平台、各种硬件、各种软硬件环境,灵活处理各种输出类型(推流、本地录制等)、各种输入源类别、各种编码类型,obs采用了模块化插件式设计,只需要拷贝插件模块到plugins目录,即可动态加载对应的功能。

整个插件模块,主要分为这四大类:

  • 数据源(obs_source_info):图像(image_source_info)、图像幻灯片放映(slideshow_info)、场景(scene_info)、分组(group_info)、媒体源(ffmpeg)、文本(GDI+)(TextSource)、文本(FreeType 2)(freetype2_source_info_v1、freetype2_source_info_v2)、显示器捕获(monitor_capture_info、duplicator_capture_info)、游戏捕获(game_capture_info)、窗口捕获(window_capture_info)、色源(color_source_info_v1、color_source_info_v2)、视频捕获设备(decklink_source_info)、摄像头捕获(dshow_input)、音频输入捕获(wasapi_input_capture)、音频输出捕获(wasapi_output_capture)等(新版还包括网页捕获)。

  • 数据输出(obs_output_info):本地录制(ffmpeg_output)、ffmpeg_muxer、本地回放(replay_buffer)、ffmpeg_encoded_output_info、rtmp推流(rtmp_output_info)、null_output_info、flv_output_info、ftl_output_info、视频采集卡输出(decklink_output_info)

  • 编码器(obs_encoder_info):coreaudio aac编码(aac_info)、nvenc编码(nvenc_info)、opus编码(opus_encoder_info)、ffmpeg aac编码(aac_encoder_info)、ffmpeg vaapi编码(vaapi_encoder_info)、qsv编码(obs_qsv_encoder、obs_qsv_encoder_tex)、x264编码(obs_x264_encoder)、摄像头编码(dshow_c985_h264、dshow_c353_h264)

  • 推流服务(obs_service_info):rtmp_common_service、rtmp_custom_service

插件结构图如下:

obs-vs2022编译_第2张图片

2.3 关键路径

obs-vs2022编译_第3张图片

obs-vs2022编译_第4张图片

2.4 编解码线程

obs-vs2022编译_第5张图片

3 windows编译

3.1 安装qt

Qt 自从5.15版本开始,对非商业版本,也就是开源版本,不提供已经制作好的离线exe安装包。

在线installers:https://download.qt.io/archive/online_installers/4.5/

3.2 实操(VS2022)

3.2.1 准备好前置条件

第一:安装VS2022;

第二:下载第三方依赖,单击上面的超链接即可(现在第三方库也不用自己安装了);

在使用CMAKE_PREFIX_PATH 之后,就不用下载第三方的依赖了,因为执行“CI/windows/01_install_dependencies.ps1”的时候会自动将第三方的依赖下载到一个指定的目录,比如:F:\obs-build-dependencies。

第三:安装QT参考前面;

3.2.2 使用官网B方式进行编译

3.2.2.1 下载代码

git clone --recursive https://github.com/obsproject/obs-studio.git

如果子模块因为网络原因没有下载全,可以使用如下命令进行处理:

cd obs-studio 
git submodule update --init --recursive  
git checkout --track origin/release/29.0

3.2.2.2 安装依赖

CI/windows/01_install_dependencies.ps1
obs-vs2022编译_第6张图片

上述命令会将第三方的依赖库下载到指定的目录中,此处为F:\obs-build-dependencies\windows-deps-2023-01-06-x64,后面这个目录被用来配置CMAKE_PREFIX_PATH。当然除了windows-deps的依赖,还有一起的依赖,这些个依赖可以使用分号分开,一起配置CMAKE_PREFIX_PATH到中。

3.2.2.3 配置编译工程

目前只需要配置CMAKE_PREFIX_PATH,CMAKE_PREFIX_PATH配置的路径就是使用命令"CI/windows/01_install_dependencies.ps1"下载的依赖库的路径,具体如下:

obs-vs2022编译_第7张图片

如果想编译OBS中的例子,需要定义 BOOL型的 BUILD_TESTS,具体如下:

obs-vs2022编译_第8张图片

Configure:按照官网上推荐,选择生成VS2022的第三方库,选择Use default native compilers,具体如下:

obs-vs2022编译_第9张图片

Configure成功具体如下图:

obs-vs2022编译_第10张图片

上图中会打印出一些东西,说明有些选项是没有配置的,如果需要配置,那么就要增加一些entry,然后再次点击configure即可;

生成解决方案:

obs-vs2022编译_第11张图片

由上图可以发现:生成工程的过程中会将CMAKE_PREFIX_PATH 所设置的路径中的第三方库复制到了指定的目录中,这个目录后续会被用来安装obs64.exe的时候使用,将这些第三方库安装到F:\obs-studio\build_release-29.0_vs2022*rundir*\Debug\bin\64bi目录中。

3.2.2.4 生成VS2022工程

VS2022工程路径

obs-vs2022编译_第12张图片

编译VS2022工程

obs-vs2022编译_第13张图片

编译成功后,会执行安装操作,这个安装操作会将obs64.exe安装到目录:F:\obs-studio\build_release-29.0_vs2022*rundir*\Debug\bin\64bit中,在这个目录中可以双击运行obs64.exe运行,第三库已经被安装到了这个目录中,所以可以直接运行,双击运行效果如下:

obs-vs2022编译_第14张图片

调试运行OBS

obs-vs2022编译_第15张图片

调试运行效果

obs-vs2022编译_第16张图片
obs-vs2022编译_第17张图片

4 参考链接

[1] https://keenjin.github.io/2020/03/obs%E5%8E%9F%E7%90%86%E8%A7%A3%E6%9E%90/

[2] https://obsproject.com/docs/reference-core.html

[3] https://github.com/obsproject/obs-studio/wiki/build-instructions-for-windows

[4] https://blog.csdn.net/yao_hou/article/details/117790512

[5] https://forum.qt.io/topic/135629/qt-6-with-msvc-2022/2

你可能感兴趣的:(obs,音视频)