在 OBS 插件或二次开发中,很多开发者遇到过这样的问题:
在录制过程中使用 OBS 内部接口进行截图时,得到的图像却始终为黑屏。
本文将详细介绍出现黑屏的原因,并分享一种简单有效的解决方案——通过手动激活源来确保 OBS 渲染出有效帧。
问题背景
在我们的项目中,我们通过 AreaCaptureStrategy
搭建了一个主场景(mainScene),用于实现区域录制。
在录制过程中,OBS 内部已经在后台采集屏幕内容,并将视频帧编码保存到文件中。但当我们尝试调用类似下面的代码进行截图时:
// 原来的截图代码,仅仅调用渲染接口 obs_source_video_render(sceneSource);
有时得到的却是全黑的图像。原因在于,即使录制文件中有内容,OBS 内部的截图操作和录制流程是两个独立的处理通道——截图需要通过 obs_source_video_render()
获取当前帧,但如果该源没有被“主动”激活,则不会输出有效的图像数据。
为什么会出现黑屏
在 OBS 内部,添加了捕获 Source 并不意味着它马上会产生输出画面。实际中,OBS 会根据源的状态来决定是否启动渲染采集流程: