一. 直播推流到拉流流程如(图1)所示

avatar

二. 采集端延迟优化

  1. 视频采集优化

    • 在可接受范围内降低采集分辨率和帧率,在保证画质的前提下减少数据量
    • 使用硬件编码器(如 iOS 的 VideoToolbox,Android 的 MediaCodec)
    • 优化采集缓冲区大小,减少缓冲时间。适当减少缓冲区会更快速的把编码好的音视频推出去,但如果缓冲区太小可能会由于设备的性能波动而造成流的卡顿。
  2. 音频采集优化

    • 选择合适的音频采样率和声道数
    • 减少音频缓冲区大小
    • 使用高效的音频编码格式(如 AAC-LC)

三. 编码环节优化

  1. 视频编码优化

    • 选择适当的编码参数(码率、GOP大小等),根据分辨率、帧率适当调整码率。
    • 使用硬件编码提升编码速度。如果采集端是客户端,一般都会用硬编码,因为Android和iOS设备一般都有对应的硬编码能力,如果采集端是pc或者其他设备可能会用软编码,软编码效率通常就没有硬编码高。
    • 根据网络状况动态调整编码参数。一般可能动态调节码率和丢弃非关键帧。
    • 选择合适的编码档位,在清晰度和延迟之间找到平衡
  2. 音频编码优化

    • 选择低延迟的音频编码配置
    • 优化音频帧长度
    • 减少音频编码缓冲区大小

四. 推流传输优化

  1. 网络传输优化

    • 使用更快的网络协议(如 QUIC)
    • 实现网络自适应策略
    • 选择就近的推流节点,如果使用的是三方的CDN服务,全权交给三方即可,但是也需要给予足够的测试。
    • 使用 TCP BBR 等现代拥塞控制算法
  2. 推流协议选择

    • 选择低延迟的推流协议(如 RTMP 2.0)
    • 优化协议参数配置
    • 实现断线自动重连机制

五. CDN分发优化

  1. 节点优化

    • 选择优质的 CDN 服务商
    • 合理配置节点分发策略
    • 启用边缘节点加速
    • 优化节点间的调度策略
  2. 缓存策略优化

    • 减少 CDN 节点缓存时间
    • 优化缓存刷新机制
    • 实现智能预加载

六. 拉流端优化

  1. 播放器优化

    • 减少播放缓冲区大小,如果网络状况很好,可以适当减小缓冲区大小
    • 使用硬件解码
    • 优化首屏加载速度,在视觉和最早时间点上进行拉流处理
  2. 解码优化

    • 选择高效的解码器
    • 优化解码线程调度
    • 实现解码预加载机制

七. 延迟监控与优化

  1. 延迟监控

    • 实现全链路延迟监控
    • 建立延迟基准指标
    • 设置延迟告警机制。可以通过在视频SEI帧中添加编码时间,拉流端解析这个时间即可得出延迟时间。
  2. 数据分析与优化

    • 收集和分析延迟数据
    • 识别延迟瓶颈
    • 持续优化和调整参数

八. 总结

直播延迟是一个系统工程,需要从采集、编码、传输、分发到播放全链路进行优化。在实际应用中,需要根据具体场景和需求,在延迟、画质和流畅度之间找到最佳平衡点。通过以上优化方案的综合应用,可以将直播延迟控制在较低的水平,提供更好的用户体验。