知其然要知其所以然,只有了解了OBS和直播的逻辑,才能找到对应的解决办法,所以做了大量的技术调研。我们来看下目前传统直播的流程。如下图

从推流到播放,会引入延迟的环节有编码延迟网络丢包网络抖动视频的分段传输节点播放器的缓存等等。由于RTMP基于TCP不会丢包,所以当网络状态差时,服务器会将包缓存起来,导致累计的延迟。一个经过优化的RTMP-CDN网络端到端的延迟大概在2-3秒,移动端考虑兼容性多为HLS流即M3U8协议,延迟会更高,基于15秒到1分钟之间。


我们从上得知RTMP协议是无法修改的,CDN拉流是目前行业已经成熟的方案,如果要基于这套传输链路,只能从OBS的软件编码配置上优化。OBS确实也提供了低延迟的方案,如下图。

这一套参数的逻辑就是尽可能的优化编码和缓存,达到低延迟的效果,解决了推流部分的问题,但极容易造成推流卡顿,也并没有解决移动端HLS拉流延迟的问题,所以这不是最优方案。

别走,干货来了,OBS无延迟最优解

正当我发愁的时候,发现我们公司采购的直播平台推出了无延迟的直播模式,所以我赶紧去创建无延迟直播间体验了一下,发现确实是没什么延迟的。

特别好奇怎么做到的,我打开了该直播平台的软件目录,发现基本上和OBS一致,所以我断定OBS也可以做真正的无延迟。

左边是公司采购的直播平台目录,右边是OBS Studio的安装目录

经过对比后,我发现相比于OBS,该平台的直播软件多出来了几个dll库文件,其中有些关键信息RTC。

RTC这个协议是谷歌提出的开放实时通信框架,确实能实现实时交互,难道是在OBS中加入RTC?带着这份好奇,我专门咨询了该平台的售后,他们说近期会推出OBS无延迟的插件,豁然开朗,那我就等等。

终于在经过一段时间的等待后,我拿到了OBS的无延迟插件包,确实如我所想,是将他们自主研发的RTC库打包到了OBS中,在经过一定的文件配置后就可以实现无延迟直播了。配置的流程大致如下。

大家点击查看吧

https://www.polyv.net/news/hy1169.html