开播客户端

OBS架构

配置数据:json表示
libobs接口导出:export、import

多线程中的缓冲队列:circlebuf动态循环缓冲

分层

UI => libobs => 插件
请添加图片描述

libobs

C实现的,拥有一个全局变量控制所有事务。

  • 视频采集渲染线程、视频编码线程:
    频采集渲染线程负责生产视频帧,视频编码线程负责消耗视频帧,两个线程共同操作一个视频帧缓存队列,是一个标准的1对1生产者-消费者模型。
    1. 根据设置的视频输出频率,每隔固定时间处理所有源的输入,并融合成一张图像缓存起来
    2. 如果开启推流和录像,则通过信号通知视频编码线程编码视频帧
    3. 渲染视频到UI窗口,使用户可以编辑推流画面
    采集、渲染、编码都是调用相关的插件接口处理。libobs本身只作为一个框架存在,不处理具体的事务。
  • 音频采集、音频编码
    与视频采集编码一样是一个生产者和消费者的关系。
  • 推流线程

插件系统

插件都是作为一个独立的动态库存在,对外抛出插件定义个接口,在libobs中合适的时候通过dlopen打开插件库,调用具体的接口。

插件的创建

主要是实现几个插件的接口:创建(创建回调)、销毁、update(属性更新)、video_render(视频渲染)等接口。

属性系统

UI属性:插件创建一个obs_property属性。应用层UI在对应的位置去遍历插件的属性接口,拿到属性后,根据对应的类型创建不同的UI。
编解码器属性:编解码器插件把对应的自己的数据注册到创建的属性中,UI层通过对应的编解码器获取到对于的属性。

相关技术

窗口采集

通过findwindow接口找到对应窗口的句柄,再通过BitBlt接口完成数据的拷贝。

桌面采集

可以使用窗口采集的BitBlt方式(桌面也是窗口的一种)。另外,效率较高的是采用DXGI接口采集。

NVENC硬件编码技术

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值