解密:EasyGBS如何做到低延迟播放?

2021-10-21 10:28:46 浏览数 (1)

播放器如果要提供播放效率和秒开其实本质上是做好解复用(Demux),Demux是指解析视频的封装格式,得到包含的音视频原始码流,Demux时间越短,就越快得到视频流,从而加快秒开速度,实现我们想要的低延迟播放的效果。

以TSINGSEE青犀视频流媒体平台为例,EasyGBS中的Demux过程主要是解析RTP负载数据,每个RTP包,去除头部12字节头部数据后就是负载数据(真实数据)。由于国标视频基本都是封装为PS流格式,所以需要解复用PS流,从PS流里得到原始视频数据。

对于PS流的Demux有两个方法,一个是自己熟悉过程自己操刀自己写,还有一个方法是使用ffmpeg。对于ffmpeg如何Demux PS流,可以参考ffmpeg的avio_reading例子,通过探测流的方式Demux PS流。如果是使用ffmpeg做PS流的Demux,有几点需要注意:由于ffmpeg Demux未知流时,需要探测一定大小数据,甚至会尝试解码未知流,这个过程如果不做优化会耗时很久。

EasyGBS在Demux PS流需要搜索各种头部,由于存在丢包等异常情况,所以搜索头部太久时需要做处理,丢弃无用的数据,避免耗时太久。由于PS中包长度都是用两字节表示,长度为216,所以我们可以设置一个值,比216大一点,当搜索的字节数大于这个值还没搜索一个PS流的包头(0x000001开头),此时就要丢弃之前数据,处理新数据,因为之前数据很大可能丢包或其他问题。

Demux得到原始视频码流后就可以开始解码了,能硬解码就硬解码,因为硬解码速度会优于软解,特别是在多路解码时。

解码得到YUV或RGB数据后,我们需要渲染到屏幕显示,这是最后一步了。

渲染也存在是否硬件加速的区别。比如Windows平台,优先D3D硬件加速渲染,充分发挥显卡的能力,加快渲染速度。如果前面解码是用硬解码,此时也必须硬件加速渲染,否则又要搬运显存中的硬解数据到内存。由于解码后的数据一般较大,所以这个过程很耗时,同时影响性能,提高CPU占用率。

0 人点赞