WebRTC的Jitter计算

本文详细解析了WebRTC中计算音频抖动的过程,从接收端的时间差计算到转换为RTP时间,再到利用采样频率进行调整。通过StreamStatisticianImpl类的UpdateJitter方法,展示了如何计算并更新抖动值,确保音视频同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

抖动的概念:在接收端计算。拿音频来说,接收连续两包音频的时间差(R2-R1),减去这个2包rtp包的时间差--转换成ms时间。对视频来说,是一帧数据,而不是一包。 

WebRtcVoiceMediaChannel::GetStats
--| AudioReceiveStream::GetStats--除以采样频率
   --| ChannelReceive::GetRTCPStatistics()
      --| StreamStatisticianImpl::GetStats()
         stats.jitter = jitter_q4_ >> 4;


StreamStatisticianImpl::UpdateJitter{

int64_t receive_diff_ms = receive_time_ms - last_receive_time_ms_;//R2-R1的时间
  
  uint32_t receive_diff_rtp = static_cast<uint32_t>(
      (receive_diff_ms * packet.payload_type_frequency()) / 1000); //换算成rtp时间
  int32_t time_diff_samples =
      receive_diff_rtp - (packet.Timestamp() - last_received_timestamp_);

  time_diff_samples = std::abs(time_diff_samples); //rtp的时间戳
if (time_diff_samples < 450000) {
    // Note we calculate in Q4 to avoid using float.
    int32_t jitter_diff_q4 = (time_diff_samples << 4) - jitter_q4_;
    jitter_q4_ += ((jitter_diff_q4 + 8) >> 4);
  }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值