当我们使用媒体服务的直播功能,会发现有时候会有较大的延迟,而延迟的产生和客户端以及推送软件的配置也有关系,本文以Wirecast为例进行分析
- Encoder导致的延迟:在编码这一步骤的时候,它会消耗机器大量的CPU以及内存资源,如果您执行wirecast的那台电脑性能较低,这会导致较高的延迟;同时编码本身也是需要缓存数据并对其整理的过程,这一步本身也会产生延迟的。
- 网络延迟:摄入数据那段的带宽是可以支撑将所有的比特率请求,如果带宽不够,这也会导致一定的延迟。
- 处理采集的信息在内部的延迟:对于服务器来说,这个延迟是必需的。默认情况下,媒体服务通道配置接受每2秒一个关键帧的数据,而动态打包技术针对 HLS 输出采用 3 比 1 映射配置,也就是说,如果输入每 2 秒一个关键帧配置的数据,HLS 输出部分将是 6 秒(3 * 2 秒)
- 客户端相关的延迟:在播放的时候,客户端都会先需要几秒钟缓存一些数据,基本需要5秒左右的时间。
- 客户端的带宽:最终用户在观看的时候,如果本地带宽不佳,也会造成比较大的延迟
关于如何降低延迟,后台团队也有一些建议如下:
- 经过测试发现,使用MPEG-DASH比Smooth Streaming以及HLS的延迟都要低。
- 建议修改wirecast的相关参数,在您编码的配置界面,修改Frames per second和Key Frame的数值,使其关键帧的间隔降低(默认是2秒,Frames per second的含义是每秒帧数,Key frame every的含义是每隔多少帧插入一个关键帧)
- 参考文档