diff --git a/audio/channel.cc b/audio/channel.cc index df34ca22ce..73459c1c5f 100644 --- a/audio/channel.cc +++ b/audio/channel.cc @@ -916,9 +916,7 @@ bool Channel::IsPacketRetransmitted(const RTPHeader& header, if (!statistician) return false; // Check if this is a retransmission. - int64_t min_rtt = 0; - _rtpRtcpModule->RTT(rtp_receiver_->SSRC(), NULL, NULL, &min_rtt, NULL); - return !in_order && statistician->IsRetransmitOfOldPacket(header, min_rtt); + return !in_order && statistician->IsRetransmitOfOldPacket(header); } int32_t Channel::ReceivedRTCPPacket(const uint8_t* data, size_t length) { diff --git a/modules/rtp_rtcp/include/receive_statistics.h b/modules/rtp_rtcp/include/receive_statistics.h index 55c2c056e7..acf8317b59 100644 --- a/modules/rtp_rtcp/include/receive_statistics.h +++ b/modules/rtp_rtcp/include/receive_statistics.h @@ -49,8 +49,7 @@ class StreamStatistician { // Returns true if the packet with RTP header |header| is likely to be a // retransmitted packet, false otherwise. - virtual bool IsRetransmitOfOldPacket(const RTPHeader& header, - int64_t min_rtt) const = 0; + virtual bool IsRetransmitOfOldPacket(const RTPHeader& header) const = 0; // Returns true if |sequence_number| is received in order, false otherwise. virtual bool IsPacketInOrder(uint16_t sequence_number) const = 0; diff --git a/modules/rtp_rtcp/source/receive_statistics_impl.cc b/modules/rtp_rtcp/source/receive_statistics_impl.cc index 49d29f00d1..bb2833f610 100644 --- a/modules/rtp_rtcp/source/receive_statistics_impl.cc +++ b/modules/rtp_rtcp/source/receive_statistics_impl.cc @@ -301,7 +301,7 @@ uint32_t StreamStatisticianImpl::BitrateReceived() const { } bool StreamStatisticianImpl::IsRetransmitOfOldPacket( - const RTPHeader& header, int64_t min_rtt) const { + const RTPHeader& header) const { rtc::CritScope cs(&stream_lock_); if (InOrderPacketInternal(header.sequenceNumber)) { return false; @@ -317,20 +317,17 @@ bool StreamStatisticianImpl::IsRetransmitOfOldPacket( uint32_t rtp_time_stamp_diff_ms = timestamp_diff / frequency_khz; int64_t max_delay_ms = 0; - if (min_rtt == 0) { - // Jitter standard deviation in samples. - float jitter_std = sqrt(static_cast(jitter_q4_ >> 4)); - // 2 times the standard deviation => 95% confidence. - // And transform to milliseconds by dividing by the frequency in kHz. - max_delay_ms = static_cast((2 * jitter_std) / frequency_khz); + // Jitter standard deviation in samples. + float jitter_std = sqrt(static_cast(jitter_q4_ >> 4)); - // Min max_delay_ms is 1. - if (max_delay_ms == 0) { - max_delay_ms = 1; - } - } else { - max_delay_ms = (min_rtt / 3) + 1; + // 2 times the standard deviation => 95% confidence. + // And transform to milliseconds by dividing by the frequency in kHz. + max_delay_ms = static_cast((2 * jitter_std) / frequency_khz); + + // Min max_delay_ms is 1. + if (max_delay_ms == 0) { + max_delay_ms = 1; } return time_diff_ms > rtp_time_stamp_diff_ms + max_delay_ms; } diff --git a/modules/rtp_rtcp/source/receive_statistics_impl.h b/modules/rtp_rtcp/source/receive_statistics_impl.h index d53787fece..d0cd865764 100644 --- a/modules/rtp_rtcp/source/receive_statistics_impl.h +++ b/modules/rtp_rtcp/source/receive_statistics_impl.h @@ -39,8 +39,7 @@ class StreamStatisticianImpl : public StreamStatistician { void GetReceiveStreamDataCounters( StreamDataCounters* data_counters) const override; uint32_t BitrateReceived() const override; - bool IsRetransmitOfOldPacket(const RTPHeader& header, - int64_t min_rtt) const override; + bool IsRetransmitOfOldPacket(const RTPHeader& header) const override; bool IsPacketInOrder(uint16_t sequence_number) const override; void IncomingPacket(const RTPHeader& rtp_header, diff --git a/video/rtp_video_stream_receiver.cc b/video/rtp_video_stream_receiver.cc index eddd2e6ba0..448559f060 100644 --- a/video/rtp_video_stream_receiver.cc +++ b/video/rtp_video_stream_receiver.cc @@ -552,11 +552,8 @@ bool RtpVideoStreamReceiver::IsPacketRetransmitted(const RTPHeader& header, rtp_receive_statistics_->GetStatistician(header.ssrc); if (!statistician) return false; - // Check if this is a retransmission. - int64_t min_rtt = 0; - rtp_rtcp_->RTT(config_.rtp.remote_ssrc, nullptr, nullptr, &min_rtt, nullptr); return !in_order && - statistician->IsRetransmitOfOldPacket(header, min_rtt); + statistician->IsRetransmitOfOldPacket(header); } void RtpVideoStreamReceiver::UpdateHistograms() {