实时应用环境中的延迟和抖动有什么区别?

时间:2013-12-18 09:18:13

标签: networking streaming real-time

根据维基百科抖动是假设周期信号的真实周期性的不希望的偏差,根据我正在阅读的QoS报告抖动被称为延迟变化。在实时应用的背景下是否有任何抖动的定义?是否存在对抖动敏感但对延迟不敏感的应用?例如,如果流应用程序在向用户显示数据包之前使用某种缓冲区来存储数据包,那么此应用程序是否可能对延迟不敏感但对抖动敏感?

2 个答案:

答案 0 :(得分:7)

延迟:数据(信号)到达目的地所需的时间。现在,更高的延迟通常意味着某种类型的通信链路中断。

抖动:是延迟时间的变化。当系统不处于确定性状态时会发生这种情况,例如。视频流受抖动的影响很大,因为传输的数据量非常大,因此没有办法说明传输可能需要多长时间。

如果您的应用程序对抖动敏感,则对延迟肯定很敏感。

答案 1 :(得分:2)

在实时协议(RTP,RFC3550)中,标头包含时间戳字段。它的值通常来自单调递增的计数器,增量的频率是时钟速率。该时钟速​​率必须与参与者想要具有时间戳字段的内容相同。计数器具有不同的基本偏移,因为开始时间可能不同或者由于安全原因等而包含它...总而言之,我们说时钟不是同步的。

要在示例中显示它,请考虑我们是否引用snd_timestamp和rcv_timestamp来自RTP头字段的最新数据包发送方时间戳和接收方使用相同时钟速率生成的接收方时间戳。 错误的结论是

delay_in_timestamp_unit = rcv_timestamp - snd_timestamp

如果接收器和发送器时钟速率具有不同的基本偏移(它们有),这不会给你延迟,也不会考虑绕过32位无符号整数。

但是,如果我们想要一个适当的播出自适应算法,或者我们想要检测并避免拥塞,那么监控传送数据包的时间是必要的。

另请注意,如果我们有同步时钟,则delay_in_timestamp_unit可能不准时表示纯网络延迟,因为发送方或接收方的组件在添加和/或执行时间戳之后和/或之前保留这些数据包。因此,如果您计算参与者之间的2秒延迟,但您知道您的网络延迟大约为100毫秒,那么您的数据包会在发送方或/和接收方端遭受额外延迟。但是这种额外的延迟在某种程度上(或者至少你希望它是)是恒定的,所以唯一的延迟时间变化 - 希望是 - 网络延迟。所以你不应该说如果包延迟> 500ms然后我们有拥塞,因为如果你只使用一个数据包发送器和接收器时间戳信息,你不知道实际的网络延迟是什么。

但是,两个连续数据包的延迟之间的差异可能会为您提供有关网络天气错误的信息。

diff_delay = delay_t0 - delay_t1

如果diff_delay等于0,则延迟相同,如果大于0,则新到达的数据包需要的时间比前一个更多,如果小于0则需要更少的时间。

根据连续两次延迟的相关信息,你可以说些什么。

如果时钟不同步,如何确定两个延迟之间的差异?

考虑您将最后一个时间戳存储在rcv_timestamp_t1和snd_timestamp_t1

diff_delay =(rcv_timestamp_t0 - snd_timestamp_t0) - (rcv_timestamp_t1 - snd_timestamp_t1)

但如果没有维护发送方和接收方的基本偏移,那就会出现问题,所以重新排序:

diff_delay =(rcv_timestamp_t0 - rcv_timestamp_t1) - (snd_timestamp_t0 - snd_timestamp_t1)

并且在这里你可以相互减去rcv时间戳,它消除了rcv和snd包含的偏移量,然后你可以从snd_diff中提取rcv_diff,它会为你提供有关两个连续数据包的延迟差异的信息。时钟单位。

现在,根据RFC3550,抖动是"估计RTP数据包到达间隔时间的统计方差"。

为了最终得到你的问题 "实时应用环境中的延迟和抖动有什么区别?"

微小的注意,但实时应用程序通常指的是系统处理数据的纳秒范围,所以我认为你指的是端到端系统。

尽管有几个改变的抖动定义,但它都使用到达数据包延迟的差异,从而为您提供有关网络延迟相对变化的信息,同时延迟本身是传递时间的绝对值。