obs中将渲染和生产推流数据,推流分为三个线程,整个过程交织在一起,不容易理清整个过程。下面先分别对三个过程进行分析,然后将整个过程链接起来:
1.渲染:
//初始化
Obs.c: obs_reset_video
//设置画布
Obs.c: obs_init_graphics
graphics.c : gs_create //一般创建使用opengl作为绘制设备
graphics.c : gs_enter_context 创建渲染画布thread_graphics
//初始化video
obs.c : obs_init_video
//开启渲染线程
obs.c : thread: obs_graphics_thread
obs-vidio.c: obs_graphics_thread //绘制线程
obs-vidio.c : while
{
tick_sources: 拿源数据,(window capture, image ,camera…)
output_frame; 绘制到texture上, 并将绘制后的帧数据缓存,等待发送线程获取
render_displays;//将opengl textture数据绘制到窗口
}
Output_frame分支:
{
obs-vidio.c : render_video
{
obs-vidio.c : render_main_texture
obs-view.c : obs_view_render
obs-source.c : obs_source_video_render(source)
obs-source.c : render_video(source)
obs-source.c : obs_source_render_async_video(source)
obs-source.c : obs_source_draw_async_texture(source)
obs