来源
:Demuxed 2021

主讲
:Yurong Jiang @ LinkedIn

翻译
:钟宏成

想象一下直播观众想知道他们的直播视频的延迟,或者直播基础设施工程师想捕捉管道的延迟性能,如何系统地大规模测量延迟?
目录
  • 流媒体直播流的延迟
  • 测量实时延迟
    • 1. 处理延迟测量
    • 2. 摄取到 CDN 延迟
    • 3. 摄取到客户端渲染延迟
  • 经验教训

流媒体直播流的延迟

对于一个经典的实时流媒体工作流,从内容的制作生成到分发,延迟是在每个环节累积的。我们在这里不讨论屏幕到屏幕的延迟,因为我们不能真正控制内容生产侧的延迟。我们关注工作流中的以下三个延迟:
  1. 处理延迟
  2. 摄取到 CDN 延迟
  3. 摄取到客户端渲染延迟
图 1:经典实时流媒体工作流

测量实时延迟

我们如何测量延迟?当视频沿着工作流被传输、转码、分发,我们可以在这些步骤中维护一个媒体时间戳。因此测量实时延迟的关键就是维护、追踪媒体时间戳
图 2:测量实时延迟

1. 处理延迟测量

处理延迟指的是视频到摄取服务器,被转码再传输到源端服务器的延迟。测量的方法是操作在 fmp4 容器中创建和使用 PRFT(Producer Reference Time Box) 插入时间戳。

2. 摄取到 CDN 延迟

这里指的是从视频帧到达摄取服务器开始,到用户设备从 CDN 下载到对应的视频帧的延迟。这个过程中可能会发生很多问题,比如设备的配置导致不能高效的渲染视频帧,可能会因为各种原因丢帧。因此,为了得到可靠的、干净的延迟数据,我们需要更可靠、更可控的客户端
为了实现这个目标,我们在云上设置了一个服务器用来直接从CDN下载数据,我们称作 Cloud Watcher。这一步延迟测量的关键就是利用 cloud watcher 来测量延迟。我们创建了一个 Event Pipeline 连接 ingestion server 与 cloud watcher,cloud watcher 从 pipeline 获取时间戳,同时也从 CDN 下载数据,然后计算延迟。

3. 摄取到客户端渲染延迟

与上一步类似,这里也用一个 Event Pipeline 连接,但是因为在用户设备端直接获取时间戳比较困难,并且为了防止用户端增加额外的计算,因此引入了一个边缘服务器,计算延迟。

经验教训

  1. 计算的时候必须是实时视频,否则会引入不准确性;
  2. 消费时钟应该在摄取事件时钟之前,以获得有效的计算;
  3. 事件采样率越高,结果越精确;
  4. 播放器事件必须报告实时边缘时间戳。
附上演讲视频:
继续阅读
阅读原文