抖动的概念:在接收端计算。拿音频来说,接收连续两包音频的时间差(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);
  }

}

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐