@Akagi201
2016-08-02
- 启动延迟
- 播放延迟
- 累计延迟
- 总结
- 定义: 视频播放要等到 IDR 才能开始播放, 假设 RTMP 没有缓冲(Gop Cache off), 有一帧数据就发一帧数据. 如果用户开启播放的时刻正是在 GOP 组的中间 1/3, 用户要等到下一个 IDR 到来时才能播放, 则等待画面出现时间为 2/3 GOP. 平均时间为 1/2 (GOP time).
- 解决办法: 开启 Gop Cache.
- 引入问题: 播放延迟增大.
- 原因: 由于开启 Gop Cache, 服务器在用户连接时, 会从上一个 IDR 位置发包, 则引入播放延迟, 同样这个播放延迟的均值为 1/2 (GOP time).
- 定义: 用户播放画面的时间, 与推流端画面的时间差.
- 解析: 如果客户端(缓存关闭), 服务器(缓存关闭), 编码器(B帧无), 那么延迟可以做到最低: 编码时间+网络延迟(包含路由器缓存的网络往返时间).
- Gop Cache on, 将极大影响播放延迟均值为 1/2 (Gop time), 但关闭会引发启动延迟均值为 1/2 (Gop time).
- 解决方案: Gop time 在推流端调小, 这样可以兼顾启动延迟和播放延迟.
- 引入问题: 视频编码效率变低, 带宽消耗变大, 国人带宽变好, 影响会越来越小, 但公司成本上升.
- 定义: 由于推流端与播放端的带宽速度不对称, 而 RTMP 为 TCP 连接, 不丢包. 所以, 当播放器端卡顿时, 推流速度大于播放速度, 而在卡顿后播放器并不加速播放, 将使服务器的缓存空间变大, 客户端缓存变大, 使得播放延迟变大.
- 服务端解决办法: 删除缓存数据至上一个 GOP 的 IDR 位置.
- 客户端解决办法: 当客户端缓存太大, 客户端自动断开连接重连.
- Gop cache 开启, 可解决启动延迟问题, 但加大播放延迟.
- 延迟要可控的话, 与 Gop time 有重大关系, 推流端要求可控.
- 实际某次测试的延迟与开启播放的时间点有关, 当播放端开启播放的时刻恰好在 IDR 位置, 则直播延迟为 (0+网络延迟).所以延迟应用均值表示较为妥当, 同时测试时, 也应在多个时间点采样.
- 累计延迟要用以上办法规避.
Thanks
Contribute your ideas!