使用LIBOBS: 采集桌面,保存图片

OBS Studio是个很全面的采集和直播开源软件,并且通过Libobs支持二次开发。不过缺点是文档太少,代码的例子也少,只有一个test。而项目本身功能很全,但代码量比较大,想全面了解需要花费不少时间。最近花了点时间编译出来,通过debug OBS Studio,大致掌握了一些开发要点,写了一个小demo。

先说编译,源码是基于cmake的,依赖项又非常多。按官方教程一次编译通过不太可能。

提示几点:

1 设置https代理,能正常访问github。

2 windows下编译器使用vs2022。最初用2019碰到的问题,在2022下就没发生。

3 安装vcpkg,当cmake提示缺少库的时候,直接vcpkg install,节省很多时间。同样,vcpkg想顺利使用,也一定要有个代理。不过大多数在.deps里都能找的到。下面是我的cmake一个截图:

4 然后打开工程,全部编译,再install。

5 开始调试 obs studio, 在项目列表找到obs-studio,右键选:设置为启动项

然后 F5就可以了:

程序入口在OBSApp.cpp里。

从bool OBSApp::OBSInit()入手,开始大致看一下架构流程。然后,如果以前没接触过OBS的话,可以使用豆包或千问给你解释一下框架,然后再看代码。如果有一定经验,就按着以下几个API的顺序,查找相关代码,加断点,调试:

base_set_log_handler(do_log, nullptr);

obs_initialized

obs_startup

obs_add_module_path

obs_load_all_modules

obs_post_load_modules

obs_reset_video

obs_display_create

obs_source_create

复制代码
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!

//Without this sentence, the screen will be black

obs_source_inc_showing(desktop_source);

//!!!!!!!!!!!!!!!!!!!!!!!!!!!!

obs_scene_create

obs_display_add_draw_callback

上面是采集屏幕,其他采集窗口、摄像头等流程都一样的。

然后,在采集过程中需要保存成图的话,直接使用obs-studio里的一段代码就行:

OBSBasic ob;

ob.Screenshot(desktop_source);

这关键两步研究清楚,后面的保存文件和推流就容易多了,其实就是调用ffmpeg。有ffmpeg基础看一眼就明白了。

以上DEMO放在github上了,不知道能不能发链接,试一下:https://github.com/sxcong/TestOBS

如果看不到,就去github上搜索TestOBS。

相关推荐
可乐鸡翅yeah_2 小时前
HLS CORS 跨域问题完整排查实战,解决 M3U8 与 TS 分片跨域报错
android·ios·音视频·m3u8·音视频在线播放
美狐美颜SDK开放平台3 小时前
从视频处理到实时渲染:直播APP中视频美颜SDK的关键技术解析
前端·人工智能·架构·实时互动·音视频·视频美颜sdk
小唔w3 小时前
文字一键生成播客音频,2026年几款AI工具功能梳理
人工智能·音视频
可乐鸡翅yeah_4 小时前
多浏览器 HLS 兼容性差异排查,Chrome、Firefox、Safari 表现不一致定位
chrome·ffmpeg·音视频·firefox·safari·m3u8
烟雨江南7854 小时前
呼叫中心如何用语音识别做客服质检?从人工抽检到全量通话分析的落地方案
人工智能·websocket·音视频·语音识别·ai客服
小柯南敲键盘4 小时前
跨马翻译:跨境电商图片翻译工具,批量处理视频字幕与抠图
python·音视频
ygwelcome5 小时前
视频收割机-VideoHarvester架构功能介绍
pdf·音视频
刘广睿6 小时前
外语素材怎么汉化?字幕翻译与双语字幕的 LLM + ffmpeg 工作流
音视频·短视频·效率工具·字幕·ai剪辑
Likeadust6 小时前
异地评标来回跑?EasyDSS视频会议重塑远程评标新模式
音视频·媒体·easydss
Likeadust6 小时前
本地点播/网络点播EasyDSS点播搭建公开视频资源库
音视频·媒体·easydss