什么是抖动?如何使用抖动缓冲区来减少抖动

在视频通话或观看直播时,您是否遇到过不稳定、缓冲、质量下降或音视频不同步等令人沮丧的情况?您可能会觉得不得不反复刷新页面,或者心灰意冷地退出应用程序,这是可以理解的。这些问题确实可能是网络抖动造成的。

作为专业的音视频开发人员,我们必须了解抖动的原因并找到解决方案,从而为用户提供高质量的音视频通话服务和直播体验。

什么是抖动?

首先,让我们了解一下什么是数据包。在采集音频视频数据后,发送方会将这些数据编码并封装成一系列小数据包,然后通过网络传输给接收方。接收方接收到数据包后,进行解包和解码等操作,最后将处理好的音频数据传送给播放器播放。

在实时音频视频传输过程中,由于网络延迟、数据包丢失、带宽限制等因素,数据包在网络上的传输速度可能会发生变化。这会导致数据包到达接收方的时间不稳定,从而产生抖动。

抖动的原因

抖动通常与网络传输和播放过程的不稳定性有关。以下是一些可能导致抖动的原因:

  • 网络延迟:在实时音频视频传输过程中,数据包在网络上传输时可能会遇到不同程度的延迟。这可能导致数据包的到达时间不稳定,从而导致抖动。
  • 数据包丢失:网络环境中的数据包丢失会导致某些视频帧无法到达接收方,从而造成跳帧或冻结等抖动现象。
  • 带宽限制:当网络带宽不足以支持高质量数据传输时,会导致数据包传输速度不稳定,从而引起抖动。
  • 编解码器性能:编解码器的性能也会影响抖动。如果编解码器的处理速度跟不上数据包的传输速度,就会导致抖动或跳帧现象。
  • 播放器问题:如果播放器在处理视频帧时无法保持稳定的播放速度,也会导致视频抖动。

抖动的测量

测量网络抖动主要涉及计算数据包到达时间的波动程度。以下是一些常用的抖动测量方法:

  • 平均抖动:计算连续数据包到达时间之间的时间差,并计算这些时间差的平均值。平均抖动反映了网络延迟的整体波动,但可能无法准确描述瞬时抖动现象。
  • 抖动方差:计算连续数据包到达时间之间的时间差,然后计算这些时间差的方差。抖动方差反映了网络延迟波动的程度,数值越大表示抖动越严重。
  • 最大抖动:计算连续数据包到达时间之间的时差,找出最大时差。最大抖动反映了网络延迟的最大波动,但可能会受到极端值的影响。
  • 百分位抖动:计算连续数据包到达时间之间的时间差,然后计算这些时间差的特定百分位值(如第 95 百分位)。百分位抖动反映了网络延迟的波动,同时减少了极端值的影响。
  • 端到端延迟:计算发送方和接收方之间的总延迟。该指标包含网络延迟、处理延迟等各种因素,可全面反映抖动对通信质量的影响。

在实际应用中,可以根据具体的场景和需求选择合适的抖动测量方法,也可以结合丢包率、带宽等其他网络指标来评估网络状况和通信质量。

如何减少抖动

由于音频和视频的实时性和时间性,抖动对音频和视频的质量有很大影响。为减少抖动,可采用以下技术手段和策略:

  • 丢帧策略:当网络条件较差时,可以选择性地丢弃非关键帧,以降低质量但保持流畅性。
  • 帧同步算法:通过算法预测和调整数据帧的到达时间,在播放过程中保持稳定的间隔。
  • 自适应比特率调整:根据网络条件动态调整视频比特率,以适应不同的带宽环境,降低抖动的可能性。
  • 抖动缓冲区:在接收端设置抖动缓冲区,以存储和调整接收到的数据包顺序,减少播放过程中的抖动。
  • 优化编解码器性能:选择性能更高的编解码器或优化现有编解码器的性能,以提高处理速度,减少卡顿或跳帧。
  • 网络优化:在网络层面采取措施,如选择更好的传输协议和优化网络路由,以减少网络延迟和数据包丢失,提高数据传输的稳定性。
  • 播放器缓冲:在播放器端设置缓冲区,缓存接收到的数据。这在一定程度上可延长播放时间,减少抖动。
  • 优化播放器性能:优化播放器的内部处理流程,确保能以稳定的速度播放数据帧,从而减少抖动。

抖动缓冲区(Jitter Buffer)

让我们重点介绍一下抖动缓冲区。抖动缓冲区是一种用于减少实时音频和视频传输中抖动的技术。通过在接收端设置一个缓冲区,它可以存储和调整接收到的数据包顺序,从而减少播放过程中的抖动。

简单地说,抖动缓冲区就像一个蓄水池,可以缓冲来自网络的不均匀数据包,然后再将它们均匀地传送到解码器进行解码。

为了实现这一目标,可以使用不同的算法来控制抖动缓冲区的行为。下面是一些常见的抖动缓冲区算法:

  • 固定大小的抖动缓冲区:这是最简单的算法,为抖动缓冲区设定一个固定大小(即它能存储的数据包数量)。这种算法易于实施,但可能无法很好地适应不断变化的网络条件。
  • 自适应抖动缓冲区:这种算法可根据网络条件动态调整抖动缓冲区的大小。例如,当检测到明显的网络延迟波动时,可以增加抖动缓冲区的大小,以降低数据包丢失的可能性。反之,当网络状况良好时,可以减小抖动缓冲区的大小,以尽量减少播放延迟。
  • 基于延迟预测的抖动缓冲区:这种算法通过预测接收到的数据包的延迟来决定何时从抖动缓冲区检索数据包进行播放。
  • 基于丢包率的抖动缓冲区:该算法根据接收端的数据包丢失率调整抖动缓冲区的大小。当数据包丢失率较高时,可以增加抖动缓冲区的大小,以降低数据包丢失的可能性。相反,当数据包丢失率较低时,可以减小抖动缓冲区的大小,以降低播放延迟。

WebRTC 中的抖动缓冲区

WebRTC 是一个开源项目,旨在为Web浏览器和移动应用程序提供简单高效的实时音频和视频通信功能。通过 JavaScript API 和相关网络协议,WebRTC 使开发人员能够直接在网页中实现实时音频和视频通信,而无需任何插件或第三方软件。

在 WebRTC 中,抖动缓冲区的实现依赖于几个关键组件:

  • RTP(实时传输协议):WebRTC 使用 RTP 传输音频和视频数据。RTP 数据包包含序列号和时间戳等重要信息,这些信息对抖动缓冲区的实施至关重要,因为它们有助于确定数据包顺序和播放定时。
  • RTCP(实时控制协议):WebRTC 利用 RTCP 收集和传输有关网络状况的统计信息,如数据包丢失率和延迟。这些信息可以指导抖动缓冲区的行为,如动态调整缓冲区大小。
  • NACK(否定确认):NACK 是一种用于请求重新传输丢失数据包的机制。在 WebRTC 中,如果抖动缓冲区检测到数据包丢失,它可以发送 NACK 消息,要求发送方重新传输该数据包。这有助于减少抖动。
  • 媒体流处理:WebRTC 中的媒体流处理模块负责对接收到的 RTP 数据包进行解码、解包和播放。在此过程中,抖动缓冲区会根据数据包的序列号和时间戳对数据包进行分类和调整,以确保正确的播放顺序和时间。

具体来说,WebRTC 中抖动缓冲区的实现可分为以下几个步骤:

  • 接收 RTP 数据包:收到 RTP 数据包后,WebRTC 会将其存储到抖动缓冲区中。
  • 数据包排序:根据序列号和时间戳对数据包进行排序,以确保正确的播放顺序。
  • 缓冲区管理:根据延迟和数据包丢失率等网络条件动态调整抖动缓冲区的大小。这可以通过 RTCP 收集的统计信息来实现。
  • 数据包丢失处理:如果检测到数据包丢失,可发送 NACK 消息,要求发送方重新传输该数据包。
  • 数据包检索:根据数据包的时间戳和当前播放时间,从抖动缓冲区中检索数据包进行解码和播放。
  • 同步处理:在音频和视频同步的情况下,可能需要根据音频和视频之间的延迟差调整抖动缓冲区的行为,以尝试恢复同步。

通过以上步骤,WebRTC 实现了稳健的抖动缓冲区,有效减少了抖动现象,提高了实时音频和视频通信的质量。

使用即构实时音视频RTC

即构实时音视频 RTC 是一款实时的音视频互动服务产品,能够为开发者提供便捷接入、高可靠、多平台互通的音视频服务。通过低至 200 ms 的端到端平均时延,业内领先的保障弱网质量的 QoS 策略,并结合强大的 3A 处理能力,完美支持一对多、多对多的实时音视频通话、直播、会议等场景。

针对实时音视频领域的抖动问题,即构实时音视频RTC有以下优势:

  • 动态码率调整:可根据网络状况和设备性能,动态调整音视频码率,适应不同的网络环境,降低抖动的概率。
  • 抖动缓冲:在弱网环境下,利用良好的抖动缓冲策略找到延时与流畅的最佳契合点。
  • 自研编解码器:即构自研Z264编解码器,在VMAF值、码率控制、质量方差等方面有显著优势,在弱网下解决了码率与画质之间的矛盾。
  • 网络优化:依托全球网络节点,通过智能路由选择、QoS等优化技术,降低网络延迟和丢包率,提高音视频传输的稳定性。

总之,使用即构实时音视频RTC,开发者即使70% 丢包或抖动 1000ms 极端弱⽹环境下,时延能控制在 1000ms 以内,保持流畅的通话体验。现在免费注册创建音视频应用程序,立即体验。

什么是抖动?如何使用抖动缓冲区来减少抖动

原创文章,作者:ZEGO即构科技,如若转载,请注明出处:https://market-blogs.zego.im/reports-baike/1602/

(0)
上一篇 7月 18, 2024 9:29 上午
下一篇 7月 23, 2024 7:39 上午

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注