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