当前位置: 首页 > article >正文

VoIP之Jitter Buffer(抖动缓冲器)

  Jitter Buffer(抖动缓冲器)是一种VoIP领域用于处理网络传输中数据包抖动和延迟的技术,通过合理的配置和优化,该机制可以确保通话中语音的连续性和清晰度,提高用户的通话体验。

一、Jitter Buffer的产生背景

  在SIP/VoIP通话中,通常使用UDP方式传输RTP语音包,理想情况下,接收端每隔(20ms或40ms)就会收到一个语音包,但网络存在信号强弱、网络拥塞、路由选择等而引发抖动和延迟问题,而UDP又是不可靠的传输方式,因此接收端收到的语音包会存在乱序、延时、抖动等问题。如果终端收到一个语音包就立刻解码播放时,用户听到的声音会有卡顿、不清晰等异常情况。为了解决上述问题,jitter Buffer机制诞生了。

二、 Jitter Buffer的机制原理

  1. 将接收到的RTP包按照RTP包的序列号顺序插入到一个接收队列中,更新Jitter-Buffer的相关计算指标(如包间隔,延迟时间等)

  2. 读取模块根据当前系统时间和jitter-Buffer相关计算指标计算得出一个预期时间戳,返回队列中比该时间戳小的RTP数据

  3. 解码模块解码RTP数据并进行播放,由于Jitter Buffer对RTP包进行了缓存、排序,解决了延迟、乱序问题,因此声音播放起来持续稳定

  4. 如果RTP数据包的延迟超过允许的阈值,Jitter Buffer视其为过期数据,直接丢弃

  5. 网络延迟较小时,数据包能够相对实时播放;当网络延迟较大时,Jitter Buffer会等待一段时间缓存数据,以平滑处理延迟和抖动

三、Jitter Buffer的作用

  • 平滑处理网络传输中的抖动、延迟和乱序问题

  • 确保语音通话的连续性和清晰度

四、参数配置

Jitter Buffer模块一般会支持多个参数设置,如下:

  1. 初始缓冲数据个数或时长(ms)
  2. 模式
    静态:缓冲区大小固定
    动态:缓冲区大小根据接收情况动态调整

注:
  一般选用动态模式
  较大的缓冲区应对网络抖动能力强,但会增加延迟
  较小的缓冲区可以减少延迟,但应对网络抖动能力低

  1. 算法

    计算抖动、延迟等指标时,会用到一些算法(如方差计算等)

五、关键说明

  • 实现逻辑较复杂,实际应用开发中通常使用开源库(如oRTP、WebRTC等)中的Jitter Buffer模块实现
  • 不仅用于音频通话,同样适用于视频等其它以UDP/RTP方式时行媒体传输的场景
  • 在SIP/VoIP领域的媒体传输中是必不可少的模块,是弱网对抗中的一项关键技术
  • 合适的参数配置可以显著提高语音通话的质量和用户体验
  • 能够消除一定程度的网络抖动、延迟等情况,但无法处理延迟过大的情况,不同的开源实现处理能力不同
  • 无法应对丢包问题,丢包问题需要额外机制处理,比如丢包重传或FEC(前向纠错)等

http://www.kler.cn/a/547160.html

相关文章:

  • Oracle RHEL 7.8 安装
  • 【BUG】conda虚拟环境下,pip install安装直接到全局python目录中
  • 总结:使用JDK原生HttpsURLConnection,封装HttpsUtil工具类,加载自定义证书验证,忽略ssl证书验证
  • c# textbox 设置不获取光标
  • 深度学习、传统机器学习和卷积神经网络中的Transformer、scikit-learn和TextCN
  • LeetCode 热门100题-无重复字符的最长子串
  • Windows安装 WSL2、Ubuntu 、docker(详细步骤 , 弃用 docker desktop )
  • Jenkins 配置 Git Repository 五
  • Python爬虫实战:股票分时数据抓取与存储 (1)
  • 51-ArrayList
  • 【第2章:神经网络基础与实现——2.2反向传播算法详解与实现步骤】
  • PostgreSQL技术内幕25:时序数据库插件TimescaleDB
  • 借助 Docker 环境变量,实现1分钟上线在线客服系统
  • 【设计模式】【行为型模式】访问者模式(Visitor)
  • MATLAB中isfield函数用法
  • 使用Redis生成全局唯一ID/分布式唯一ID
  • 网络变压器的主要电性参数与测试方法(1)
  • 基于卷积神经网络的图像融合方法
  • 数据结构 day06
  • STM32 是什么?同类产品有哪些