直播过程中影响延迟的因素以及优化方法
一. 直播推流到拉流流程如(图1)所示
二. 采集端延迟优化
-
视频采集优化
- 在可接受范围内降低采集分辨率和帧率,在保证画质的前提下减少数据量
- 使用硬件编码器(如 iOS 的 VideoToolbox,Android 的 MediaCodec)
- 优化采集缓冲区大小,减少缓冲时间。适当减少缓冲区会更快速的把编码好的音视频推出去,但如果缓冲区太小可能会由于设备的性能波动而造成流的卡顿。
-
音频采集优化
- 选择合适的音频采样率和声道数
- 减少音频缓冲区大小
- 使用高效的音频编码格式(如 AAC-LC)
三. 编码环节优化
-
视频编码优化
- 选择适当的编码参数(码率、GOP大小等),根据分辨率、帧率适当调整码率。
- 使用硬件编码提升编码速度。如果采集端是客户端,一般都会用硬编码,因为Android和iOS设备一般都有对应的硬编码能力,如果采集端是pc或者其他设备可能会用软编码,软编码效率通常就没有硬编码高。
- 根据网络状况动态调整编码参数。一般可能动态调节码率和丢弃非关键帧。
- 选择合适的编码档位,在清晰度和延迟之间找到平衡
-
音频编码优化
- 选择低延迟的音频编码配置
- 优化音频帧长度
- 减少音频编码缓冲区大小
四. 推流传输优化
-
网络传输优化
- 使用更快的网络协议(如 QUIC)
- 实现网络自适应策略
- 选择就近的推流节点,如果使用的是三方的CDN服务,全权交给三方即可,但是也需要给予足够的测试。
- 使用 TCP BBR 等现代拥塞控制算法
-
推流协议选择
- 选择低延迟的推流协议(如 RTMP 2.0)
- 优化协议参数配置
- 实现断线自动重连机制
五. CDN分发优化
-
节点优化
- 选择优质的 CDN 服务商
- 合理配置节点分发策略
- 启用边缘节点加速
- 优化节点间的调度策略
-
缓存策略优化
- 减少 CDN 节点缓存时间
- 优化缓存刷新机制
- 实现智能预加载
六. 拉流端优化
-
播放器优化
- 减少播放缓冲区大小,如果网络状况很好,可以适当减小缓冲区大小
- 使用硬件解码
- 优化首屏加载速度,在视觉和最早时间点上进行拉流处理
-
解码优化
- 选择高效的解码器
- 优化解码线程调度
- 实现解码预加载机制
七. 延迟监控与优化
-
延迟监控
- 实现全链路延迟监控
- 建立延迟基准指标
- 设置延迟告警机制。可以通过在视频SEI帧中添加编码时间,拉流端解析这个时间即可得出延迟时间。
-
数据分析与优化
- 收集和分析延迟数据
- 识别延迟瓶颈
- 持续优化和调整参数
八. 总结
直播延迟是一个系统工程,需要从采集、编码、传输、分发到播放全链路进行优化。在实际应用中,需要根据具体场景和需求,在延迟、画质和流畅度之间找到最佳平衡点。通过以上优化方案的综合应用,可以将直播延迟控制在较低的水平,提供更好的用户体验。