本文主要是介绍OBS 源码分析- 采集方案之三(游戏采集),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 1、OBS采集方案
- 2、OBS 游戏采集
- 游戏采集原理
- 游戏采集过程
- 初始化
- 获取数据
1、OBS采集方案
obs的视屏录制主要分3种:
窗口采集:采集应用程序窗口
显示器采集:也叫全屏采集,可以采集整个屏幕,当有多个显示器时,可以设置采集其中一个显示器
游戏采集:可以采集游戏窗口
extern struct obs_source_info duplicator_capture_info;
extern struct obs_source_info monitor_capture_info;
extern struct obs_source_info window_capture_info;
extern struct obs_source_info game_capture_info;
2、OBS 游戏采集
游戏采集原理
对于直播而言,游戏是一个重要分支,对于游戏自身而言,都是为了尽可能争取到高性能的渲染,而基本上采用DirectX、OpenGL、VulKan等与显卡紧密结合的渲染SDK进行游戏画面的渲染,游戏的帧率,也普遍非常之高。高清高速高性能的追求,对于数据采集而言,本就是一个挑战,如果采样前述的窗口捕获的方式,对于DMA带宽占用,本身就会影响当下游戏性能,而且游戏帧率随着场景变化,对于我们设置的采样间隔,会造成极大的浪费。所以,游戏这种捕获,OBS采用了独立功能和产品模块来实现捕获,以获取最佳性能。
为了能掌控渲染帧数的变化,实时获取图像帧数据,基本方式是:注入 + 绘制函数Hook。
TODO: 未完待续
游戏采集过程
init_hook
初始化
init_shmem_capture
共享内存
共享纹理
获取数据
1、共享内存
if (gc->copy_texture) {obs_enter_graphics();gc->copy_texture(gc);obs_leave_graphics();}
2、纹理共享
这篇关于OBS 源码分析- 采集方案之三(游戏采集)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!