1. 背景
在许多应用中,不可避免地遇到多个系统之间的时钟同步,在RTC中也不例外。很多地方不是简单地使用NTP时间,而是会用到这个思想来解决很多问题。举几个常见的使用例子:
- 两个客户端之间的端到端延迟计算:因为大多数音视频系统都需要经过SFU,不是简单地端到端,如果能够对齐两端NTP,那么计算端到端延迟就会变得非常简单。
- 使用时钟同步思想计算端到端延迟(仅P2P):WebRTC标准里面借用了NTP时钟同步的思想,通过XR来计算端到端延迟。
- 统一整个RTC系统时钟方便分析问题:在分析音视频端到端问题时,很容易遇到的一个问题就是两个客户端以及server之间的时钟不同步,在需要精确到毫秒的场景时会比较麻烦。对于端到端问题自动分析工具来说,时钟不同步也是一个问题。
- KTV合唱场景需要全局时间同步:如今KTV合唱也是一个非常常见的场景,多个客户端如何一起唱也是需要全局时间同步来保障的。在很多需要多端同步的场景都可以使用时钟同步解决问题。
当然,在RTC系统中,应用的地方远不止这么多,个人认为随着RTC系统演进,全局NTP时钟同步是非常必要的。
这篇文章,我们将介绍下NTP时钟同步的原理,以及在WebRTC里面,如何利用时钟同步的原理计算端到端延迟,希望这篇文章能够对大家有所启发。
2. 什么是NTP
NTP,Network Time Protocol。它是一个时钟同步协议,可以用于多个计算机之间的高精度的时钟校正(几毫秒级别)。
我们每天电脑上就自带了时钟同步的客户端,比如windows、mac系统的时间会周期性地和NTP服务器同步。那是不是同步一次就一劳永逸了?肯定不行。我们的PC系统时钟也是基于晶振,虽然说已经较为准确了,但是随着时间推移也会存在一点偏差,时间越长偏差越大。因此,我们才需要定期地和更准确的时钟源同步。这些NTP服务器提供的时钟是UTC时间,准确度也更高,我们任何时候都可以“无条件”相信这个标准时间(实际上NTP服务器也可能不准,后面会介绍如何解决)。
3. NTP时钟同步原理
3.1 基本原理
在同一时刻,有两个端分别是需要同步的端和NTP服务器,他们有各自的NTP时间,但是客户端不是准的,只有NTP服务器的才是准确的,而我们的目标就是得到这两个端的NTP offset,并使用offset校准客户端时间。这两个NTP时间都是随着时间流逝而增加,客户端的精度不是很高,但是能够在一段时间内保持不漂移;服务器的NT