Add support for receiving congestion control messages to rtcp transceiver
Congestion control feedback messages follow RFC 8888. BUG: webrtc:42225697 Change-Id: If7e55249ac479636c0bab5cbcf96e70c1976a51d Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/370161 Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Commit-Queue: Per Kjellander <perkj@webrtc.org> Cr-Commit-Position: refs/heads/main@{#43486}
This commit is contained in:
parent
ad63489c58
commit
ae1ad04077
@ -23,6 +23,7 @@
|
||||
#include "modules/rtp_rtcp/source/rtcp_packet.h"
|
||||
#include "modules/rtp_rtcp/source/rtcp_packet/bye.h"
|
||||
#include "modules/rtp_rtcp/source/rtcp_packet/common_header.h"
|
||||
#include "modules/rtp_rtcp/source/rtcp_packet/congestion_control_feedback.h"
|
||||
#include "modules/rtp_rtcp/source/rtcp_packet/extended_reports.h"
|
||||
#include "modules/rtp_rtcp/source/rtcp_packet/fir.h"
|
||||
#include "modules/rtp_rtcp/source/rtcp_packet/nack.h"
|
||||
@ -464,6 +465,9 @@ void RtcpTransceiverImpl::HandleRtpFeedback(
|
||||
case rtcp::TransportFeedback::kFeedbackMessageType:
|
||||
HandleTransportFeedback(rtcp_packet_header, now);
|
||||
break;
|
||||
case rtcp::CongestionControlFeedback::kFeedbackMessageType:
|
||||
HandleCongestionControlFeedback(rtcp_packet_header, now);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -493,6 +497,20 @@ void RtcpTransceiverImpl::HandleTransportFeedback(
|
||||
}
|
||||
}
|
||||
|
||||
void RtcpTransceiverImpl::HandleCongestionControlFeedback(
|
||||
const rtcp::CommonHeader& rtcp_packet_header,
|
||||
Timestamp now) {
|
||||
RTC_DCHECK_EQ(rtcp_packet_header.fmt(),
|
||||
rtcp::CongestionControlFeedback::kFeedbackMessageType);
|
||||
if (config_.network_link_observer == nullptr) {
|
||||
return;
|
||||
}
|
||||
rtcp::CongestionControlFeedback feedback;
|
||||
if (feedback.Parse(rtcp_packet_header)) {
|
||||
config_.network_link_observer->OnCongestionControlFeedback(now, feedback);
|
||||
}
|
||||
}
|
||||
|
||||
void RtcpTransceiverImpl::HandleExtendedReports(
|
||||
const rtcp::CommonHeader& rtcp_packet_header,
|
||||
Timestamp now) {
|
||||
|
||||
@ -114,6 +114,9 @@ class RtcpTransceiverImpl {
|
||||
void HandleNack(const rtcp::CommonHeader& rtcp_packet_header);
|
||||
void HandleTransportFeedback(const rtcp::CommonHeader& rtcp_packet_header,
|
||||
Timestamp now);
|
||||
void HandleCongestionControlFeedback(
|
||||
const rtcp::CommonHeader& rtcp_packet_header,
|
||||
Timestamp now);
|
||||
void HandleExtendedReports(const rtcp::CommonHeader& rtcp_packet_header,
|
||||
Timestamp now);
|
||||
// Extended Reports blocks handlers.
|
||||
|
||||
@ -30,6 +30,7 @@
|
||||
#include "modules/rtp_rtcp/source/rtcp_packet/app.h"
|
||||
#include "modules/rtp_rtcp/source/rtcp_packet/bye.h"
|
||||
#include "modules/rtp_rtcp/source/rtcp_packet/compound_packet.h"
|
||||
#include "modules/rtp_rtcp/source/rtcp_packet/congestion_control_feedback.h"
|
||||
#include "system_wrappers/include/clock.h"
|
||||
#include "test/gmock.h"
|
||||
#include "test/gtest.h"
|
||||
@ -1403,6 +1404,31 @@ TEST_F(RtcpTransceiverImplTest, ParsesTransportFeedback) {
|
||||
rtcp_transceiver.ReceivePacket(tb.Build(), receive_time);
|
||||
}
|
||||
|
||||
TEST_F(RtcpTransceiverImplTest, ParsesCongestionControlFeedback) {
|
||||
MockNetworkLinkRtcpObserver link_observer;
|
||||
RtcpTransceiverConfig config = DefaultTestConfig();
|
||||
config.network_link_observer = &link_observer;
|
||||
const uint32_t receive_time_ntp = 5678;
|
||||
Timestamp receive_time = Timestamp::Seconds(9843);
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
|
||||
EXPECT_CALL(link_observer, OnCongestionControlFeedback(receive_time, _))
|
||||
.WillOnce(WithArg<1>([](const rtcp::CongestionControlFeedback& message) {
|
||||
EXPECT_EQ(message.report_timestamp_compact_ntp(), 5678u);
|
||||
EXPECT_THAT(message.packets(), SizeIs(2));
|
||||
}));
|
||||
|
||||
std::vector<rtcp::CongestionControlFeedback::PacketInfo> packets = {
|
||||
{.ssrc = 1,
|
||||
.sequence_number = 321,
|
||||
.arrival_time_offset = TimeDelta::Millis(15)},
|
||||
{.ssrc = 1,
|
||||
.sequence_number = 322,
|
||||
.arrival_time_offset = TimeDelta::Millis(17)}};
|
||||
rtcp::CongestionControlFeedback ccfb(std::move(packets), receive_time_ntp);
|
||||
rtcp_transceiver.ReceivePacket(ccfb.Build(), receive_time);
|
||||
}
|
||||
|
||||
TEST_F(RtcpTransceiverImplTest, ParsesRemb) {
|
||||
MockNetworkLinkRtcpObserver link_observer;
|
||||
RtcpTransceiverConfig config = DefaultTestConfig();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user