Delete SetRtcpXrRrtrStatus, make it a construction-time setting
Bug: None Change-Id: If2c42af6038c2ce1dc4289b949a0a3a279bae1b9 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/195337 Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Reviewed-by: Åsa Persson <asapersson@webrtc.org> Commit-Queue: Niels Moller <nisse@webrtc.org> Cr-Commit-Position: refs/heads/master@{#32754}
This commit is contained in:
@ -149,7 +149,6 @@ class MockRtpRtcpInterface : public RtpRtcpInterface {
|
|||||||
GetLatestReportBlockData,
|
GetLatestReportBlockData,
|
||||||
(),
|
(),
|
||||||
(const, override));
|
(const, override));
|
||||||
MOCK_METHOD(void, SetRtcpXrRrtrStatus, (bool enable), (override));
|
|
||||||
MOCK_METHOD(void,
|
MOCK_METHOD(void,
|
||||||
SetRemb,
|
SetRemb,
|
||||||
(int64_t bitrate, std::vector<uint32_t> ssrcs),
|
(int64_t bitrate, std::vector<uint32_t> ssrcs),
|
||||||
|
@ -174,7 +174,7 @@ RTCPReceiver::RTCPReceiver(const RtpRtcpInterface::Configuration& config,
|
|||||||
// TODO(bugs.webrtc.org/10774): Remove fallback.
|
// TODO(bugs.webrtc.org/10774): Remove fallback.
|
||||||
remote_ssrc_(0),
|
remote_ssrc_(0),
|
||||||
remote_sender_rtp_time_(0),
|
remote_sender_rtp_time_(0),
|
||||||
xr_rrtr_status_(false),
|
xr_rrtr_status_(config.non_sender_rtt_measurement),
|
||||||
xr_rr_rtt_ms_(0),
|
xr_rr_rtt_ms_(0),
|
||||||
oldest_tmmbr_info_ms_(0),
|
oldest_tmmbr_info_ms_(0),
|
||||||
stats_callback_(config.rtcp_statistics_callback),
|
stats_callback_(config.rtcp_statistics_callback),
|
||||||
@ -256,11 +256,6 @@ int32_t RTCPReceiver::RTT(uint32_t remote_ssrc,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RTCPReceiver::SetRtcpXrRrtrStatus(bool enable) {
|
|
||||||
MutexLock lock(&rtcp_receiver_lock_);
|
|
||||||
xr_rrtr_status_ = enable;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool RTCPReceiver::GetAndResetXrRrRtt(int64_t* rtt_ms) {
|
bool RTCPReceiver::GetAndResetXrRrRtt(int64_t* rtt_ms) {
|
||||||
RTC_DCHECK(rtt_ms);
|
RTC_DCHECK(rtt_ms);
|
||||||
MutexLock lock(&rtcp_receiver_lock_);
|
MutexLock lock(&rtcp_receiver_lock_);
|
||||||
|
@ -86,7 +86,6 @@ class RTCPReceiver final {
|
|||||||
int64_t* min_rtt_ms,
|
int64_t* min_rtt_ms,
|
||||||
int64_t* max_rtt_ms) const;
|
int64_t* max_rtt_ms) const;
|
||||||
|
|
||||||
void SetRtcpXrRrtrStatus(bool enable);
|
|
||||||
bool GetAndResetXrRrRtt(int64_t* rtt_ms);
|
bool GetAndResetXrRrRtt(int64_t* rtt_ms);
|
||||||
|
|
||||||
// Called once per second on the worker thread to do rtt calculations.
|
// Called once per second on the worker thread to do rtt calculations.
|
||||||
@ -252,7 +251,7 @@ class RTCPReceiver final {
|
|||||||
received_rrtrs_ssrc_it_ RTC_GUARDED_BY(rtcp_receiver_lock_);
|
received_rrtrs_ssrc_it_ RTC_GUARDED_BY(rtcp_receiver_lock_);
|
||||||
|
|
||||||
// Estimated rtt, zero when there is no valid estimate.
|
// Estimated rtt, zero when there is no valid estimate.
|
||||||
bool xr_rrtr_status_ RTC_GUARDED_BY(rtcp_receiver_lock_);
|
const bool xr_rrtr_status_;
|
||||||
int64_t xr_rr_rtt_ms_;
|
int64_t xr_rr_rtt_ms_;
|
||||||
|
|
||||||
int64_t oldest_tmmbr_info_ms_ RTC_GUARDED_BY(rtcp_receiver_lock_);
|
int64_t oldest_tmmbr_info_ms_ RTC_GUARDED_BY(rtcp_receiver_lock_);
|
||||||
|
@ -838,11 +838,11 @@ TEST(RtcpReceiverTest, InjectExtendedReportsReceiverReferenceTimePacket) {
|
|||||||
|
|
||||||
TEST(RtcpReceiverTest, ExtendedReportsDlrrPacketNotToUsIgnored) {
|
TEST(RtcpReceiverTest, ExtendedReportsDlrrPacketNotToUsIgnored) {
|
||||||
ReceiverMocks mocks;
|
ReceiverMocks mocks;
|
||||||
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
auto config = DefaultConfiguration(&mocks);
|
||||||
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
||||||
|
|
||||||
// Allow calculate rtt using dlrr/rrtr, simulating media receiver side.
|
// Allow calculate rtt using dlrr/rrtr, simulating media receiver side.
|
||||||
receiver.SetRtcpXrRrtrStatus(true);
|
config.non_sender_rtt_measurement = true;
|
||||||
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
||||||
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
||||||
|
|
||||||
rtcp::ExtendedReports xr;
|
rtcp::ExtendedReports xr;
|
||||||
xr.SetSenderSsrc(kSenderSsrc);
|
xr.SetSenderSsrc(kSenderSsrc);
|
||||||
@ -856,12 +856,13 @@ TEST(RtcpReceiverTest, ExtendedReportsDlrrPacketNotToUsIgnored) {
|
|||||||
|
|
||||||
TEST(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithSubBlock) {
|
TEST(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithSubBlock) {
|
||||||
ReceiverMocks mocks;
|
ReceiverMocks mocks;
|
||||||
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
auto config = DefaultConfiguration(&mocks);
|
||||||
|
config.non_sender_rtt_measurement = true;
|
||||||
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
||||||
receiver.SetRemoteSSRC(kSenderSsrc);
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
||||||
|
|
||||||
const uint32_t kLastRR = 0x12345;
|
const uint32_t kLastRR = 0x12345;
|
||||||
const uint32_t kDelay = 0x23456;
|
const uint32_t kDelay = 0x23456;
|
||||||
receiver.SetRtcpXrRrtrStatus(true);
|
|
||||||
int64_t rtt_ms = 0;
|
int64_t rtt_ms = 0;
|
||||||
EXPECT_FALSE(receiver.GetAndResetXrRrRtt(&rtt_ms));
|
EXPECT_FALSE(receiver.GetAndResetXrRrRtt(&rtt_ms));
|
||||||
|
|
||||||
@ -880,12 +881,13 @@ TEST(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithSubBlock) {
|
|||||||
|
|
||||||
TEST(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithMultipleSubBlocks) {
|
TEST(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithMultipleSubBlocks) {
|
||||||
ReceiverMocks mocks;
|
ReceiverMocks mocks;
|
||||||
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
auto config = DefaultConfiguration(&mocks);
|
||||||
|
config.non_sender_rtt_measurement = true;
|
||||||
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
||||||
receiver.SetRemoteSSRC(kSenderSsrc);
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
||||||
|
|
||||||
const uint32_t kLastRR = 0x12345;
|
const uint32_t kLastRR = 0x12345;
|
||||||
const uint32_t kDelay = 0x56789;
|
const uint32_t kDelay = 0x56789;
|
||||||
receiver.SetRtcpXrRrtrStatus(true);
|
|
||||||
|
|
||||||
rtcp::ExtendedReports xr;
|
rtcp::ExtendedReports xr;
|
||||||
xr.SetSenderSsrc(kSenderSsrc);
|
xr.SetSenderSsrc(kSenderSsrc);
|
||||||
@ -905,11 +907,11 @@ TEST(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithMultipleSubBlocks) {
|
|||||||
|
|
||||||
TEST(RtcpReceiverTest, InjectExtendedReportsPacketWithMultipleReportBlocks) {
|
TEST(RtcpReceiverTest, InjectExtendedReportsPacketWithMultipleReportBlocks) {
|
||||||
ReceiverMocks mocks;
|
ReceiverMocks mocks;
|
||||||
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
auto config = DefaultConfiguration(&mocks);
|
||||||
|
config.non_sender_rtt_measurement = true;
|
||||||
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
||||||
receiver.SetRemoteSSRC(kSenderSsrc);
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
||||||
|
|
||||||
receiver.SetRtcpXrRrtrStatus(true);
|
|
||||||
|
|
||||||
rtcp::Rrtr rrtr;
|
rtcp::Rrtr rrtr;
|
||||||
rtcp::ExtendedReports xr;
|
rtcp::ExtendedReports xr;
|
||||||
xr.SetSenderSsrc(kSenderSsrc);
|
xr.SetSenderSsrc(kSenderSsrc);
|
||||||
@ -927,11 +929,11 @@ TEST(RtcpReceiverTest, InjectExtendedReportsPacketWithMultipleReportBlocks) {
|
|||||||
|
|
||||||
TEST(RtcpReceiverTest, InjectExtendedReportsPacketWithUnknownReportBlock) {
|
TEST(RtcpReceiverTest, InjectExtendedReportsPacketWithUnknownReportBlock) {
|
||||||
ReceiverMocks mocks;
|
ReceiverMocks mocks;
|
||||||
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
auto config = DefaultConfiguration(&mocks);
|
||||||
|
config.non_sender_rtt_measurement = true;
|
||||||
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
||||||
receiver.SetRemoteSSRC(kSenderSsrc);
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
||||||
|
|
||||||
receiver.SetRtcpXrRrtrStatus(true);
|
|
||||||
|
|
||||||
rtcp::Rrtr rrtr;
|
rtcp::Rrtr rrtr;
|
||||||
rtcp::ExtendedReports xr;
|
rtcp::ExtendedReports xr;
|
||||||
xr.SetSenderSsrc(kSenderSsrc);
|
xr.SetSenderSsrc(kSenderSsrc);
|
||||||
@ -955,25 +957,26 @@ TEST(RtcpReceiverTest, InjectExtendedReportsPacketWithUnknownReportBlock) {
|
|||||||
|
|
||||||
TEST(RtcpReceiverTest, TestExtendedReportsRrRttInitiallyFalse) {
|
TEST(RtcpReceiverTest, TestExtendedReportsRrRttInitiallyFalse) {
|
||||||
ReceiverMocks mocks;
|
ReceiverMocks mocks;
|
||||||
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
auto config = DefaultConfiguration(&mocks);
|
||||||
|
config.non_sender_rtt_measurement = true;
|
||||||
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
||||||
receiver.SetRemoteSSRC(kSenderSsrc);
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
||||||
|
|
||||||
receiver.SetRtcpXrRrtrStatus(true);
|
|
||||||
|
|
||||||
int64_t rtt_ms;
|
int64_t rtt_ms;
|
||||||
EXPECT_FALSE(receiver.GetAndResetXrRrRtt(&rtt_ms));
|
EXPECT_FALSE(receiver.GetAndResetXrRrRtt(&rtt_ms));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(RtcpReceiverTest, RttCalculatedAfterExtendedReportsDlrr) {
|
TEST(RtcpReceiverTest, RttCalculatedAfterExtendedReportsDlrr) {
|
||||||
ReceiverMocks mocks;
|
ReceiverMocks mocks;
|
||||||
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
auto config = DefaultConfiguration(&mocks);
|
||||||
|
config.non_sender_rtt_measurement = true;
|
||||||
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
||||||
receiver.SetRemoteSSRC(kSenderSsrc);
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
||||||
|
|
||||||
Random rand(0x0123456789abcdef);
|
Random rand(0x0123456789abcdef);
|
||||||
const int64_t kRttMs = rand.Rand(1, 9 * 3600 * 1000);
|
const int64_t kRttMs = rand.Rand(1, 9 * 3600 * 1000);
|
||||||
const uint32_t kDelayNtp = rand.Rand(0, 0x7fffffff);
|
const uint32_t kDelayNtp = rand.Rand(0, 0x7fffffff);
|
||||||
const int64_t kDelayMs = CompactNtpRttToMs(kDelayNtp);
|
const int64_t kDelayMs = CompactNtpRttToMs(kDelayNtp);
|
||||||
receiver.SetRtcpXrRrtrStatus(true);
|
|
||||||
NtpTime now = TimeMicrosToNtp(mocks.clock.TimeInMicroseconds());
|
NtpTime now = TimeMicrosToNtp(mocks.clock.TimeInMicroseconds());
|
||||||
uint32_t sent_ntp = CompactNtp(now);
|
uint32_t sent_ntp = CompactNtp(now);
|
||||||
mocks.clock.AdvanceTimeMilliseconds(kRttMs + kDelayMs);
|
mocks.clock.AdvanceTimeMilliseconds(kRttMs + kDelayMs);
|
||||||
@ -991,7 +994,9 @@ TEST(RtcpReceiverTest, RttCalculatedAfterExtendedReportsDlrr) {
|
|||||||
|
|
||||||
TEST(RtcpReceiverTest, XrDlrrCalculatesNegativeRttAsOne) {
|
TEST(RtcpReceiverTest, XrDlrrCalculatesNegativeRttAsOne) {
|
||||||
ReceiverMocks mocks;
|
ReceiverMocks mocks;
|
||||||
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
auto config = DefaultConfiguration(&mocks);
|
||||||
|
config.non_sender_rtt_measurement = true;
|
||||||
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
||||||
receiver.SetRemoteSSRC(kSenderSsrc);
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
||||||
|
|
||||||
Random rand(0x0123456789abcdef);
|
Random rand(0x0123456789abcdef);
|
||||||
@ -1001,7 +1006,6 @@ TEST(RtcpReceiverTest, XrDlrrCalculatesNegativeRttAsOne) {
|
|||||||
NtpTime now = TimeMicrosToNtp(mocks.clock.TimeInMicroseconds());
|
NtpTime now = TimeMicrosToNtp(mocks.clock.TimeInMicroseconds());
|
||||||
uint32_t sent_ntp = CompactNtp(now);
|
uint32_t sent_ntp = CompactNtp(now);
|
||||||
mocks.clock.AdvanceTimeMilliseconds(kRttMs + kDelayMs);
|
mocks.clock.AdvanceTimeMilliseconds(kRttMs + kDelayMs);
|
||||||
receiver.SetRtcpXrRrtrStatus(true);
|
|
||||||
|
|
||||||
rtcp::ExtendedReports xr;
|
rtcp::ExtendedReports xr;
|
||||||
xr.SetSenderSsrc(kSenderSsrc);
|
xr.SetSenderSsrc(kSenderSsrc);
|
||||||
|
@ -173,7 +173,8 @@ RTCPSender::RTCPSender(const RtpRtcpInterface::Configuration& config)
|
|||||||
packet_oh_send_(0),
|
packet_oh_send_(0),
|
||||||
max_packet_size_(IP_PACKET_SIZE - 28), // IPv4 + UDP by default.
|
max_packet_size_(IP_PACKET_SIZE - 28), // IPv4 + UDP by default.
|
||||||
|
|
||||||
xr_send_receiver_reference_time_enabled_(false),
|
xr_send_receiver_reference_time_enabled_(
|
||||||
|
config.non_sender_rtt_measurement),
|
||||||
packet_type_counter_observer_(config.rtcp_packet_type_counter_observer),
|
packet_type_counter_observer_(config.rtcp_packet_type_counter_observer),
|
||||||
send_video_bitrate_allocation_(false),
|
send_video_bitrate_allocation_(false),
|
||||||
last_payload_type_(-1) {
|
last_payload_type_(-1) {
|
||||||
@ -896,16 +897,6 @@ void RTCPSender::SetCsrcs(const std::vector<uint32_t>& csrcs) {
|
|||||||
csrcs_ = csrcs;
|
csrcs_ = csrcs;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RTCPSender::SendRtcpXrReceiverReferenceTime(bool enable) {
|
|
||||||
MutexLock lock(&mutex_rtcp_sender_);
|
|
||||||
xr_send_receiver_reference_time_enabled_ = enable;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool RTCPSender::RtcpXrReceiverReferenceTime() const {
|
|
||||||
MutexLock lock(&mutex_rtcp_sender_);
|
|
||||||
return xr_send_receiver_reference_time_enabled_;
|
|
||||||
}
|
|
||||||
|
|
||||||
void RTCPSender::SetTmmbn(std::vector<rtcp::TmmbItem> bounding_set) {
|
void RTCPSender::SetTmmbn(std::vector<rtcp::TmmbItem> bounding_set) {
|
||||||
MutexLock lock(&mutex_rtcp_sender_);
|
MutexLock lock(&mutex_rtcp_sender_);
|
||||||
tmmbn_to_send_ = std::move(bounding_set);
|
tmmbn_to_send_ = std::move(bounding_set);
|
||||||
|
@ -142,12 +142,6 @@ class RTCPSender final {
|
|||||||
void SetTmmbn(std::vector<rtcp::TmmbItem> bounding_set)
|
void SetTmmbn(std::vector<rtcp::TmmbItem> bounding_set)
|
||||||
RTC_LOCKS_EXCLUDED(mutex_rtcp_sender_);
|
RTC_LOCKS_EXCLUDED(mutex_rtcp_sender_);
|
||||||
|
|
||||||
void SendRtcpXrReceiverReferenceTime(bool enable)
|
|
||||||
RTC_LOCKS_EXCLUDED(mutex_rtcp_sender_);
|
|
||||||
|
|
||||||
bool RtcpXrReceiverReferenceTime() const
|
|
||||||
RTC_LOCKS_EXCLUDED(mutex_rtcp_sender_);
|
|
||||||
|
|
||||||
void SetCsrcs(const std::vector<uint32_t>& csrcs)
|
void SetCsrcs(const std::vector<uint32_t>& csrcs)
|
||||||
RTC_LOCKS_EXCLUDED(mutex_rtcp_sender_);
|
RTC_LOCKS_EXCLUDED(mutex_rtcp_sender_);
|
||||||
|
|
||||||
@ -267,8 +261,7 @@ class RTCPSender final {
|
|||||||
size_t max_packet_size_ RTC_GUARDED_BY(mutex_rtcp_sender_);
|
size_t max_packet_size_ RTC_GUARDED_BY(mutex_rtcp_sender_);
|
||||||
|
|
||||||
// True if sending of XR Receiver reference time report is enabled.
|
// True if sending of XR Receiver reference time report is enabled.
|
||||||
bool xr_send_receiver_reference_time_enabled_
|
const bool xr_send_receiver_reference_time_enabled_;
|
||||||
RTC_GUARDED_BY(mutex_rtcp_sender_);
|
|
||||||
|
|
||||||
RtcpPacketTypeCounterObserver* const packet_type_counter_observer_;
|
RtcpPacketTypeCounterObserver* const packet_type_counter_observer_;
|
||||||
RtcpPacketTypeCounter packet_type_counter_ RTC_GUARDED_BY(mutex_rtcp_sender_);
|
RtcpPacketTypeCounter packet_type_counter_ RTC_GUARDED_BY(mutex_rtcp_sender_);
|
||||||
|
@ -523,10 +523,11 @@ TEST_F(RtcpSenderTest, SendXrWithMultipleDlrrSubBlocks) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(RtcpSenderTest, SendXrWithRrtr) {
|
TEST_F(RtcpSenderTest, SendXrWithRrtr) {
|
||||||
auto rtcp_sender = CreateRtcpSender(GetDefaultConfig());
|
RtpRtcpInterface::Configuration config = GetDefaultConfig();
|
||||||
|
config.non_sender_rtt_measurement = true;
|
||||||
|
auto rtcp_sender = CreateRtcpSender(config);
|
||||||
rtcp_sender->SetRTCPStatus(RtcpMode::kCompound);
|
rtcp_sender->SetRTCPStatus(RtcpMode::kCompound);
|
||||||
EXPECT_EQ(0, rtcp_sender->SetSendingStatus(feedback_state(), false));
|
EXPECT_EQ(0, rtcp_sender->SetSendingStatus(feedback_state(), false));
|
||||||
rtcp_sender->SendRtcpXrReceiverReferenceTime(true);
|
|
||||||
NtpTime ntp = TimeMicrosToNtp(clock_.TimeInMicroseconds());
|
NtpTime ntp = TimeMicrosToNtp(clock_.TimeInMicroseconds());
|
||||||
EXPECT_EQ(0, rtcp_sender->SendRTCP(feedback_state(), kRtcpReport));
|
EXPECT_EQ(0, rtcp_sender->SendRTCP(feedback_state(), kRtcpReport));
|
||||||
EXPECT_EQ(1, parser()->xr()->num_packets());
|
EXPECT_EQ(1, parser()->xr()->num_packets());
|
||||||
@ -537,19 +538,21 @@ TEST_F(RtcpSenderTest, SendXrWithRrtr) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(RtcpSenderTest, TestNoXrRrtrSentIfSending) {
|
TEST_F(RtcpSenderTest, TestNoXrRrtrSentIfSending) {
|
||||||
auto rtcp_sender = CreateRtcpSender(GetDefaultConfig());
|
RtpRtcpInterface::Configuration config = GetDefaultConfig();
|
||||||
|
config.non_sender_rtt_measurement = true;
|
||||||
|
auto rtcp_sender = CreateRtcpSender(config);
|
||||||
rtcp_sender->SetRTCPStatus(RtcpMode::kCompound);
|
rtcp_sender->SetRTCPStatus(RtcpMode::kCompound);
|
||||||
EXPECT_EQ(0, rtcp_sender->SetSendingStatus(feedback_state(), true));
|
EXPECT_EQ(0, rtcp_sender->SetSendingStatus(feedback_state(), true));
|
||||||
rtcp_sender->SendRtcpXrReceiverReferenceTime(true);
|
|
||||||
EXPECT_EQ(0, rtcp_sender->SendRTCP(feedback_state(), kRtcpReport));
|
EXPECT_EQ(0, rtcp_sender->SendRTCP(feedback_state(), kRtcpReport));
|
||||||
EXPECT_EQ(0, parser()->xr()->num_packets());
|
EXPECT_EQ(0, parser()->xr()->num_packets());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(RtcpSenderTest, TestNoXrRrtrSentIfNotEnabled) {
|
TEST_F(RtcpSenderTest, TestNoXrRrtrSentIfNotEnabled) {
|
||||||
auto rtcp_sender = CreateRtcpSender(GetDefaultConfig());
|
RtpRtcpInterface::Configuration config = GetDefaultConfig();
|
||||||
|
config.non_sender_rtt_measurement = false;
|
||||||
|
auto rtcp_sender = CreateRtcpSender(config);
|
||||||
rtcp_sender->SetRTCPStatus(RtcpMode::kCompound);
|
rtcp_sender->SetRTCPStatus(RtcpMode::kCompound);
|
||||||
EXPECT_EQ(0, rtcp_sender->SetSendingStatus(feedback_state(), false));
|
EXPECT_EQ(0, rtcp_sender->SetSendingStatus(feedback_state(), false));
|
||||||
rtcp_sender->SendRtcpXrReceiverReferenceTime(false);
|
|
||||||
EXPECT_EQ(0, rtcp_sender->SendRTCP(feedback_state(), kRtcpReport));
|
EXPECT_EQ(0, rtcp_sender->SendRTCP(feedback_state(), kRtcpReport));
|
||||||
EXPECT_EQ(0, parser()->xr()->num_packets());
|
EXPECT_EQ(0, parser()->xr()->num_packets());
|
||||||
}
|
}
|
||||||
|
@ -536,15 +536,6 @@ int32_t ModuleRtpRtcpImpl::SetRTCPApplicationSpecificData(
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModuleRtpRtcpImpl::SetRtcpXrRrtrStatus(bool enable) {
|
|
||||||
rtcp_receiver_.SetRtcpXrRrtrStatus(enable);
|
|
||||||
rtcp_sender_.SendRtcpXrReceiverReferenceTime(enable);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ModuleRtpRtcpImpl::RtcpXrRrtrStatus() const {
|
|
||||||
return rtcp_sender_.RtcpXrReceiverReferenceTime();
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO(asapersson): Replace this method with the one below.
|
// TODO(asapersson): Replace this method with the one below.
|
||||||
int32_t ModuleRtpRtcpImpl::DataCountersRTP(size_t* bytes_sent,
|
int32_t ModuleRtpRtcpImpl::DataCountersRTP(size_t* bytes_sent,
|
||||||
uint32_t* packets_sent) const {
|
uint32_t* packets_sent) const {
|
||||||
|
@ -247,9 +247,6 @@ class ModuleRtpRtcpImpl : public RtpRtcp, public RTCPReceiver::ModuleRtpRtcp {
|
|||||||
const uint8_t* data,
|
const uint8_t* data,
|
||||||
uint16_t length) override;
|
uint16_t length) override;
|
||||||
|
|
||||||
// (XR) Receiver reference time report.
|
|
||||||
void SetRtcpXrRrtrStatus(bool enable) override;
|
|
||||||
|
|
||||||
// Video part.
|
// Video part.
|
||||||
int32_t SendLossNotification(uint16_t last_decoded_seq_num,
|
int32_t SendLossNotification(uint16_t last_decoded_seq_num,
|
||||||
uint16_t last_received_seq_num,
|
uint16_t last_received_seq_num,
|
||||||
|
@ -479,15 +479,6 @@ int32_t ModuleRtpRtcpImpl2::SendRTCP(RTCPPacketType packet_type) {
|
|||||||
return rtcp_sender_.SendRTCP(GetFeedbackState(), packet_type);
|
return rtcp_sender_.SendRTCP(GetFeedbackState(), packet_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModuleRtpRtcpImpl2::SetRtcpXrRrtrStatus(bool enable) {
|
|
||||||
rtcp_receiver_.SetRtcpXrRrtrStatus(enable);
|
|
||||||
rtcp_sender_.SendRtcpXrReceiverReferenceTime(enable);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ModuleRtpRtcpImpl2::RtcpXrRrtrStatus() const {
|
|
||||||
return rtcp_sender_.RtcpXrReceiverReferenceTime();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModuleRtpRtcpImpl2::GetSendStreamDataCounters(
|
void ModuleRtpRtcpImpl2::GetSendStreamDataCounters(
|
||||||
StreamDataCounters* rtp_counters,
|
StreamDataCounters* rtp_counters,
|
||||||
StreamDataCounters* rtx_counters) const {
|
StreamDataCounters* rtx_counters) const {
|
||||||
|
@ -234,9 +234,6 @@ class ModuleRtpRtcpImpl2 final : public RtpRtcpInterface,
|
|||||||
void SendCombinedRtcpPacket(
|
void SendCombinedRtcpPacket(
|
||||||
std::vector<std::unique_ptr<rtcp::RtcpPacket>> rtcp_packets) override;
|
std::vector<std::unique_ptr<rtcp::RtcpPacket>> rtcp_packets) override;
|
||||||
|
|
||||||
// (XR) Receiver reference time report.
|
|
||||||
void SetRtcpXrRrtrStatus(bool enable) override;
|
|
||||||
|
|
||||||
// Video part.
|
// Video part.
|
||||||
int32_t SendLossNotification(uint16_t last_decoded_seq_num,
|
int32_t SendLossNotification(uint16_t last_decoded_seq_num,
|
||||||
uint16_t last_received_seq_num,
|
uint16_t last_received_seq_num,
|
||||||
@ -291,9 +288,6 @@ class ModuleRtpRtcpImpl2 final : public RtpRtcpInterface,
|
|||||||
// Returns true if the module is configured to store packets.
|
// Returns true if the module is configured to store packets.
|
||||||
bool StorePackets() const;
|
bool StorePackets() const;
|
||||||
|
|
||||||
// Returns current Receiver Reference Time Report (RTTR) status.
|
|
||||||
bool RtcpXrRrtrStatus() const;
|
|
||||||
|
|
||||||
TaskQueueBase* const worker_queue_;
|
TaskQueueBase* const worker_queue_;
|
||||||
RTC_NO_UNIQUE_ADDRESS SequenceChecker process_thread_checker_;
|
RTC_NO_UNIQUE_ADDRESS SequenceChecker process_thread_checker_;
|
||||||
|
|
||||||
|
@ -160,6 +160,7 @@ class RtpRtcpModule : public RtcpPacketTypeCounterObserver {
|
|||||||
config.rtcp_report_interval_ms = rtcp_report_interval_ms_;
|
config.rtcp_report_interval_ms = rtcp_report_interval_ms_;
|
||||||
config.local_media_ssrc = is_sender_ ? kSenderSsrc : kReceiverSsrc;
|
config.local_media_ssrc = is_sender_ ? kSenderSsrc : kReceiverSsrc;
|
||||||
config.need_rtp_packet_infos = true;
|
config.need_rtp_packet_infos = true;
|
||||||
|
config.non_sender_rtt_measurement = true;
|
||||||
|
|
||||||
impl_.reset(new ModuleRtpRtcpImpl2(config));
|
impl_.reset(new ModuleRtpRtcpImpl2(config));
|
||||||
impl_->SetRemoteSSRC(is_sender_ ? kReceiverSsrc : kSenderSsrc);
|
impl_->SetRemoteSSRC(is_sender_ ? kReceiverSsrc : kSenderSsrc);
|
||||||
@ -321,8 +322,6 @@ TEST_F(RtpRtcpImpl2Test, Rtt) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(RtpRtcpImpl2Test, RttForReceiverOnly) {
|
TEST_F(RtpRtcpImpl2Test, RttForReceiverOnly) {
|
||||||
receiver_.impl_->SetRtcpXrRrtrStatus(true);
|
|
||||||
|
|
||||||
// Receiver module should send a Receiver time reference report (RTRR).
|
// Receiver module should send a Receiver time reference report (RTRR).
|
||||||
EXPECT_EQ(0, receiver_.impl_->SendRTCP(kRtcpReport));
|
EXPECT_EQ(0, receiver_.impl_->SendRTCP(kRtcpReport));
|
||||||
|
|
||||||
|
@ -155,6 +155,7 @@ class RtpRtcpModule : public RtcpPacketTypeCounterObserver {
|
|||||||
config.rtcp_report_interval_ms = rtcp_report_interval_ms_;
|
config.rtcp_report_interval_ms = rtcp_report_interval_ms_;
|
||||||
config.local_media_ssrc = is_sender_ ? kSenderSsrc : kReceiverSsrc;
|
config.local_media_ssrc = is_sender_ ? kSenderSsrc : kReceiverSsrc;
|
||||||
config.need_rtp_packet_infos = true;
|
config.need_rtp_packet_infos = true;
|
||||||
|
config.non_sender_rtt_measurement = true;
|
||||||
|
|
||||||
impl_.reset(new ModuleRtpRtcpImpl(config));
|
impl_.reset(new ModuleRtpRtcpImpl(config));
|
||||||
impl_->SetRemoteSSRC(is_sender_ ? kReceiverSsrc : kSenderSsrc);
|
impl_->SetRemoteSSRC(is_sender_ ? kReceiverSsrc : kSenderSsrc);
|
||||||
@ -309,8 +310,6 @@ TEST_F(RtpRtcpImplTest, Rtt) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(RtpRtcpImplTest, RttForReceiverOnly) {
|
TEST_F(RtpRtcpImplTest, RttForReceiverOnly) {
|
||||||
receiver_.impl_->SetRtcpXrRrtrStatus(true);
|
|
||||||
|
|
||||||
// Receiver module should send a Receiver time reference report (RTRR).
|
// Receiver module should send a Receiver time reference report (RTRR).
|
||||||
EXPECT_EQ(0, receiver_.impl_->SendRTCP(kRtcpReport));
|
EXPECT_EQ(0, receiver_.impl_->SendRTCP(kRtcpReport));
|
||||||
|
|
||||||
|
@ -144,6 +144,10 @@ class RtpRtcpInterface : public RtcpFeedbackSenderInterface {
|
|||||||
// overhead.
|
// overhead.
|
||||||
bool enable_rtx_padding_prioritization = true;
|
bool enable_rtx_padding_prioritization = true;
|
||||||
|
|
||||||
|
// Estimate RTT as non-sender as described in
|
||||||
|
// https://tools.ietf.org/html/rfc3611#section-4.4 and #section-4.5
|
||||||
|
bool non_sender_rtt_measurement = false;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RTC_DISALLOW_COPY_AND_ASSIGN(Configuration);
|
RTC_DISALLOW_COPY_AND_ASSIGN(Configuration);
|
||||||
};
|
};
|
||||||
@ -369,9 +373,6 @@ class RtpRtcpInterface : public RtcpFeedbackSenderInterface {
|
|||||||
// that pair.
|
// that pair.
|
||||||
virtual std::vector<ReportBlockData> GetLatestReportBlockData() const = 0;
|
virtual std::vector<ReportBlockData> GetLatestReportBlockData() const = 0;
|
||||||
|
|
||||||
// (XR) Sets Receiver Reference Time Report (RTTR) status.
|
|
||||||
virtual void SetRtcpXrRrtrStatus(bool enable) = 0;
|
|
||||||
|
|
||||||
// (REMB) Receiver Estimated Max Bitrate.
|
// (REMB) Receiver Estimated Max Bitrate.
|
||||||
// Schedules sending REMB on next and following sender/receiver reports.
|
// Schedules sending REMB on next and following sender/receiver reports.
|
||||||
void SetRemb(int64_t bitrate_bps, std::vector<uint32_t> ssrcs) override = 0;
|
void SetRemb(int64_t bitrate_bps, std::vector<uint32_t> ssrcs) override = 0;
|
||||||
|
@ -84,6 +84,7 @@ std::unique_ptr<RtpRtcp> CreateRtpRtcpModule(
|
|||||||
RtcpRttStats* rtt_stats,
|
RtcpRttStats* rtt_stats,
|
||||||
RtcpPacketTypeCounterObserver* rtcp_packet_type_counter_observer,
|
RtcpPacketTypeCounterObserver* rtcp_packet_type_counter_observer,
|
||||||
RtcpCnameCallback* rtcp_cname_callback,
|
RtcpCnameCallback* rtcp_cname_callback,
|
||||||
|
bool non_sender_rtt_measurement,
|
||||||
uint32_t local_ssrc) {
|
uint32_t local_ssrc) {
|
||||||
RtpRtcpInterface::Configuration configuration;
|
RtpRtcpInterface::Configuration configuration;
|
||||||
configuration.clock = clock;
|
configuration.clock = clock;
|
||||||
@ -96,6 +97,7 @@ std::unique_ptr<RtpRtcp> CreateRtpRtcpModule(
|
|||||||
rtcp_packet_type_counter_observer;
|
rtcp_packet_type_counter_observer;
|
||||||
configuration.rtcp_cname_callback = rtcp_cname_callback;
|
configuration.rtcp_cname_callback = rtcp_cname_callback;
|
||||||
configuration.local_media_ssrc = local_ssrc;
|
configuration.local_media_ssrc = local_ssrc;
|
||||||
|
configuration.non_sender_rtt_measurement = non_sender_rtt_measurement;
|
||||||
|
|
||||||
std::unique_ptr<RtpRtcp> rtp_rtcp = RtpRtcp::DEPRECATED_Create(configuration);
|
std::unique_ptr<RtpRtcp> rtp_rtcp = RtpRtcp::DEPRECATED_Create(configuration);
|
||||||
rtp_rtcp->SetRTCPStatus(RtcpMode::kCompound);
|
rtp_rtcp->SetRTCPStatus(RtcpMode::kCompound);
|
||||||
@ -255,12 +257,14 @@ RtpVideoStreamReceiver::RtpVideoStreamReceiver(
|
|||||||
config->rtp.extensions)),
|
config->rtp.extensions)),
|
||||||
receiving_(false),
|
receiving_(false),
|
||||||
last_packet_log_ms_(-1),
|
last_packet_log_ms_(-1),
|
||||||
rtp_rtcp_(CreateRtpRtcpModule(clock,
|
rtp_rtcp_(CreateRtpRtcpModule(
|
||||||
|
clock,
|
||||||
rtp_receive_statistics_,
|
rtp_receive_statistics_,
|
||||||
transport,
|
transport,
|
||||||
rtt_stats,
|
rtt_stats,
|
||||||
rtcp_packet_type_counter_observer,
|
rtcp_packet_type_counter_observer,
|
||||||
rtcp_cname_callback,
|
rtcp_cname_callback,
|
||||||
|
config_.rtp.rtcp_xr.receiver_reference_time_report,
|
||||||
config_.rtp.local_ssrc)),
|
config_.rtp.local_ssrc)),
|
||||||
complete_frame_callback_(complete_frame_callback),
|
complete_frame_callback_(complete_frame_callback),
|
||||||
keyframe_request_sender_(keyframe_request_sender),
|
keyframe_request_sender_(keyframe_request_sender),
|
||||||
@ -299,9 +303,6 @@ RtpVideoStreamReceiver::RtpVideoStreamReceiver(
|
|||||||
rtp_receive_statistics_->SetMaxReorderingThreshold(
|
rtp_receive_statistics_->SetMaxReorderingThreshold(
|
||||||
config_.rtp.rtx_ssrc, max_reordering_threshold);
|
config_.rtp.rtx_ssrc, max_reordering_threshold);
|
||||||
}
|
}
|
||||||
if (config_.rtp.rtcp_xr.receiver_reference_time_report)
|
|
||||||
rtp_rtcp_->SetRtcpXrRrtrStatus(true);
|
|
||||||
|
|
||||||
ParseFieldTrial(
|
ParseFieldTrial(
|
||||||
{&forced_playout_delay_max_ms_, &forced_playout_delay_min_ms_},
|
{&forced_playout_delay_max_ms_, &forced_playout_delay_min_ms_},
|
||||||
field_trial::FindFullName("WebRTC-ForcePlayoutDelay"));
|
field_trial::FindFullName("WebRTC-ForcePlayoutDelay"));
|
||||||
|
@ -83,6 +83,7 @@ std::unique_ptr<ModuleRtpRtcpImpl2> CreateRtpRtcpModule(
|
|||||||
RtcpRttStats* rtt_stats,
|
RtcpRttStats* rtt_stats,
|
||||||
RtcpPacketTypeCounterObserver* rtcp_packet_type_counter_observer,
|
RtcpPacketTypeCounterObserver* rtcp_packet_type_counter_observer,
|
||||||
RtcpCnameCallback* rtcp_cname_callback,
|
RtcpCnameCallback* rtcp_cname_callback,
|
||||||
|
bool non_sender_rtt_measurement,
|
||||||
uint32_t local_ssrc) {
|
uint32_t local_ssrc) {
|
||||||
RtpRtcpInterface::Configuration configuration;
|
RtpRtcpInterface::Configuration configuration;
|
||||||
configuration.clock = clock;
|
configuration.clock = clock;
|
||||||
@ -95,6 +96,7 @@ std::unique_ptr<ModuleRtpRtcpImpl2> CreateRtpRtcpModule(
|
|||||||
rtcp_packet_type_counter_observer;
|
rtcp_packet_type_counter_observer;
|
||||||
configuration.rtcp_cname_callback = rtcp_cname_callback;
|
configuration.rtcp_cname_callback = rtcp_cname_callback;
|
||||||
configuration.local_media_ssrc = local_ssrc;
|
configuration.local_media_ssrc = local_ssrc;
|
||||||
|
configuration.non_sender_rtt_measurement = non_sender_rtt_measurement;
|
||||||
|
|
||||||
std::unique_ptr<ModuleRtpRtcpImpl2> rtp_rtcp =
|
std::unique_ptr<ModuleRtpRtcpImpl2> rtp_rtcp =
|
||||||
ModuleRtpRtcpImpl2::Create(configuration);
|
ModuleRtpRtcpImpl2::Create(configuration);
|
||||||
@ -228,12 +230,14 @@ RtpVideoStreamReceiver2::RtpVideoStreamReceiver2(
|
|||||||
config->rtp.extensions)),
|
config->rtp.extensions)),
|
||||||
receiving_(false),
|
receiving_(false),
|
||||||
last_packet_log_ms_(-1),
|
last_packet_log_ms_(-1),
|
||||||
rtp_rtcp_(CreateRtpRtcpModule(clock,
|
rtp_rtcp_(CreateRtpRtcpModule(
|
||||||
|
clock,
|
||||||
rtp_receive_statistics_,
|
rtp_receive_statistics_,
|
||||||
transport,
|
transport,
|
||||||
rtt_stats,
|
rtt_stats,
|
||||||
rtcp_packet_type_counter_observer,
|
rtcp_packet_type_counter_observer,
|
||||||
rtcp_cname_callback,
|
rtcp_cname_callback,
|
||||||
|
config_.rtp.rtcp_xr.receiver_reference_time_report,
|
||||||
config_.rtp.local_ssrc)),
|
config_.rtp.local_ssrc)),
|
||||||
complete_frame_callback_(complete_frame_callback),
|
complete_frame_callback_(complete_frame_callback),
|
||||||
keyframe_request_sender_(keyframe_request_sender),
|
keyframe_request_sender_(keyframe_request_sender),
|
||||||
@ -277,8 +281,6 @@ RtpVideoStreamReceiver2::RtpVideoStreamReceiver2(
|
|||||||
rtp_receive_statistics_->SetMaxReorderingThreshold(
|
rtp_receive_statistics_->SetMaxReorderingThreshold(
|
||||||
config_.rtp.rtx_ssrc, max_reordering_threshold);
|
config_.rtp.rtx_ssrc, max_reordering_threshold);
|
||||||
}
|
}
|
||||||
if (config_.rtp.rtcp_xr.receiver_reference_time_report)
|
|
||||||
rtp_rtcp_->SetRtcpXrRrtrStatus(true);
|
|
||||||
|
|
||||||
ParseFieldTrial(
|
ParseFieldTrial(
|
||||||
{&forced_playout_delay_max_ms_, &forced_playout_delay_min_ms_},
|
{&forced_playout_delay_max_ms_, &forced_playout_delay_min_ms_},
|
||||||
|
Reference in New Issue
Block a user