mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
668 字
2 分钟
为什么流媒体直播的延迟很高
2023-06-07

流媒体直播已经成为互联网的主要应用场景,但直播延迟一直是一个难以解决的问题。为什么流媒体直播的延迟这么高?

一、直播延迟的来源#

1.1 延迟的构成#

flowchart LR subgraph 直播延迟来源 C[编码延迟] --> T[总延迟] G[ GOP 延迟] --> T C2[CDN 延迟] --> T P[播放器缓冲] --> T N[网络延迟] --> T end
延迟来源典型值说明
编码延迟1-8 秒GOP 大小决定
CDN 延迟1-30 秒边缘节点分发
播放器缓冲2-30 秒防止卡顿
网络延迟0.1-0.5 秒物理距离

1.2 为什么延迟难以消除#

延迟 = 编码延迟 + GOP 大小 + CDN 分发 + 播放器缓冲

关键问题:**GOP(Group of Pictures)**决定了编码延迟的下限。

二、编码器的延迟#

2.1 GOP 的工作原理#

flowchart LR subgraph GOP 结构 I[I 帧<br/>完整画面] P[P 帧<br/>预测帧] B[B 帧<br/>双向预测] end subgraph 帧序列 F[I] --> F2[P] F2 --> F3[B] F3 --> F4[B] F4 --> F5[P] end Note: GOP 越大,压缩率越高<br/>但延迟也越大

2.2 编码延迟与质量的权衡#

编码模式GOP 大小延迟画质
低延迟0.5-1 秒0.5-2 秒
平衡2-4 秒2-6 秒
高质量8-10 秒8-12 秒

2.3 实时编码 vs 离线编码#

# 实时编码需要很小的 GOP
# 这会严重影响压缩效率
# 离线编码可以使用大 GOP
# 压缩效率高,画质好

三、CDN 分发的延迟#

3.1 CDN 的工作原理#

sequenceDiagram participant O as 源站 participant E1 as 边缘节点 1 participant E2 as 边缘节点 2 participant U as 用户 O->>E1: 直播流 O->>E2: 直播流 E1->>U: 视频流 U->>E1: 请求 Note over E1,U: 用户到边缘节点的延迟 Note over O,E1: 源站到边缘节点的延迟

3.2 直播流的分发方式#

分发方式延迟说明
HLS15-30 秒Apple 的 HTTP 直播协议
HLS (低延迟)3-8 秒LL-HLS
DASH10-30 秒MPEG 的自适应协议
RTMP1-3 秒基于 TCP,需要 Flash
FLV2-10 秒通过 HTTP 分发

3.3 HLS 的分段机制#

flowchart LR subgraph HLS 工作方式 A[直播流] --> B[TS 切片器] B --> C1[切片 1] B --> C2[切片 2] B --> C3[切片 3] end C1 --> M1[m3u8 播放列表] C2 --> M1 C3 --> M1 Note: 每个切片 2-10 秒<br/>播放器需要缓冲多个切片才能开始播放

四、播放器缓冲的延迟#

4.1 为什么要缓冲?#

# 播放器缓冲的原因
# 1. 网络波动会导致卡顿
# 2. 视频需要持续的数据流
# 3. 解码需要一定数量的帧
buffer = []
while len(buffer) < min_buffer:
buffer.append(fetch_segment())
# 如果缓冲太小,网络波动时容易卡顿
# 如果缓冲太大,延迟增加

4.2 缓冲策略#

策略缓冲时间延迟卡顿率
低延迟1-3 秒
平衡5-10 秒
流畅优先15-30 秒很低

4.3 适应性的挑战#

flowchart LR subgraph 网络波动 G[好] -->|突然变差| B[卡顿] B -->|恢复| G end subgraph 播放器反应 R[检测到波动] --> I[增加缓冲] I --> W[等待网络恢复] W -->|恢复| D[逐步减少缓冲] end Note: 适应需要时间,增加延迟

五、低延迟直播的技术#

5.1 LL-HLS(低延迟 HLS)#

sequenceDiagram participant S as 服务器 participant P as 播放器 Note over S,P: 传统 HLS S->>P: 发送 6 秒切片 P->>P: 缓冲 4 个切片才能播放 Note over S,P: LL-HLS S->>P: 发送 0.5-2 秒切片 P->>P: 只需缓冲 2-3 个切片

5.2 WebRTC#

sequenceDiagram participant C as 摄像头 participant E as 编码器 participant R as WebRTC 服务器 participant P as 播放器 C->>E: 原始帧 E->>R: RTP 包 R->>P: 转发 RTP 包 P->>P: 直接解码播放 Note over P: 延迟可以做到 1 秒以内
技术延迟复杂度兼容性
HLS15-30 秒
LL-HLS3-8 秒Apple 设备
DASH10-30 秒
WebRTC0.5-2 秒

六、实际案例分析#

6.1 电商直播#

flowchart LR subgraph 电商直播架构 C[主播] --> E[编码推流] E --> O[CDN] O --> P1[观众 1] O --> P2[观众 2] O --> P3[观众 N] end Note: 延迟要求:2-5 秒<br/>太高会影响互动体验

延迟控制策略

  • 使用低延迟编码设置
  • 选择边缘节点靠近观众的 CDN
  • 动态调整播放器缓冲

6.2 游戏直播#

flowchart LR G[游戏画面] --> E[低延迟编码] E --> S[CDN] S --> V[观众] Note: 游戏直播延迟要求更低<br/>通常 1-3 秒

七、总结#

7.1 直播延迟的根源#

根源影响优化方式
GOP 大小编码延迟使用低 GOP 编码
CDN 分发边缘缓存选择边缘节点
播放器缓冲防止卡顿动态调整
协议限制切片机制使用 LL-HLS/WebRTC

7.2 低延迟方案#

方案延迟适用场景
HLS15-30 秒通用直播
LL-HLS3-8 秒低延迟需求
WebRTC0.5-2 秒实时互动
SRT1-3 秒专业广播

核心观点:直播延迟是多个因素叠加的结果,需要在画质、延迟和稳定性之间做权衡。没有完美的解决方案,只有适合场景的选择。

参考资料#

支持与分享

如果这篇文章对你有帮助,欢迎支持作者或分享给更多人

为什么流媒体直播的延迟很高
https://blog.souloss.com/posts/why-the-design/why-live-streaming-has-high-latency/
作者
Souloss
发布于
2023-06-07
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时