diff --git a/modules/rtp_rtcp/include/rtp_header_parser.h b/modules/rtp_rtcp/include/rtp_header_parser.h index 2d84fc1e69..85eab90a73 100644 --- a/modules/rtp_rtcp/include/rtp_header_parser.h +++ b/modules/rtp_rtcp/include/rtp_header_parser.h @@ -10,6 +10,7 @@ #ifndef MODULES_RTP_RTCP_INCLUDE_RTP_HEADER_PARSER_H_ #define MODULES_RTP_RTCP_INCLUDE_RTP_HEADER_PARSER_H_ +#include "api/rtpparameters.h" #include "modules/rtp_rtcp/include/rtp_rtcp_defines.h" namespace webrtc { @@ -36,8 +37,14 @@ class RtpHeaderParser { virtual bool RegisterRtpHeaderExtension(RTPExtensionType type, uint8_t id) = 0; + // Registers an RTP header extension. + virtual bool RegisterRtpHeaderExtension(RtpExtension extension) = 0; + // De-registers an RTP header extension. virtual bool DeregisterRtpHeaderExtension(RTPExtensionType type) = 0; + + // De-registers an RTP header extension. + virtual bool DeregisterRtpHeaderExtension(RtpExtension extension) = 0; }; } // namespace webrtc #endif // MODULES_RTP_RTCP_INCLUDE_RTP_HEADER_PARSER_H_ diff --git a/modules/rtp_rtcp/source/rtp_header_parser.cc b/modules/rtp_rtcp/source/rtp_header_parser.cc index bc05033efa..6481a403a0 100644 --- a/modules/rtp_rtcp/source/rtp_header_parser.cc +++ b/modules/rtp_rtcp/source/rtp_header_parser.cc @@ -28,8 +28,10 @@ class RtpHeaderParserImpl : public RtpHeaderParser { RTPHeader* header) const override; bool RegisterRtpHeaderExtension(RTPExtensionType type, uint8_t id) override; + bool RegisterRtpHeaderExtension(RtpExtension extension) override; bool DeregisterRtpHeaderExtension(RTPExtensionType type) override; + bool DeregisterRtpHeaderExtension(RtpExtension extension) override; private: rtc::CriticalSection critical_section_; @@ -66,6 +68,10 @@ bool RtpHeaderParserImpl::Parse(const uint8_t* packet, } return true; } +bool RtpHeaderParserImpl::RegisterRtpHeaderExtension(RtpExtension extension) { + rtc::CritScope cs(&critical_section_); + return rtp_header_extension_map_.RegisterByUri(extension.id, extension.uri); +} bool RtpHeaderParserImpl::RegisterRtpHeaderExtension(RTPExtensionType type, uint8_t id) { @@ -73,6 +79,12 @@ bool RtpHeaderParserImpl::RegisterRtpHeaderExtension(RTPExtensionType type, return rtp_header_extension_map_.RegisterByType(id, type); } +bool RtpHeaderParserImpl::DeregisterRtpHeaderExtension(RtpExtension extension) { + rtc::CritScope cs(&critical_section_); + return rtp_header_extension_map_.Deregister( + rtp_header_extension_map_.GetType(extension.id)); +} + bool RtpHeaderParserImpl::DeregisterRtpHeaderExtension(RTPExtensionType type) { rtc::CritScope cs(&critical_section_); return rtp_header_extension_map_.Deregister(type) == 0; diff --git a/test/scenario/audio_stream.cc b/test/scenario/audio_stream.cc index dc8e02ceda..076b4eaf86 100644 --- a/test/scenario/audio_stream.cc +++ b/test/scenario/audio_stream.cc @@ -181,6 +181,7 @@ ReceiveAudioStream::ReceiveAudioStream( recv_config.rtp.extensions = { {RtpExtension::kTransportSequenceNumberUri, 8}}; } + receiver_->AddExtensions(recv_config.rtp.extensions); recv_config.decoder_factory = decoder_factory; recv_config.decoder_map = { {CallTest::kAudioSendPayloadType, {"opus", 48000, 2}}}; diff --git a/test/scenario/call_client.cc b/test/scenario/call_client.cc index 0fbd2bc8f2..86eb4dc1db 100644 --- a/test/scenario/call_client.cc +++ b/test/scenario/call_client.cc @@ -209,6 +209,11 @@ std::string CallClient::GetNextPriorityId() { return kPriorityStreamId; } +void CallClient::AddExtensions(std::vector extensions) { + for (const auto& extension : extensions) + header_parser_->RegisterRtpHeaderExtension(extension); +} + CallClientPair::~CallClientPair() = default; } // namespace test diff --git a/test/scenario/call_client.h b/test/scenario/call_client.h index fe39bd87be..a12e06a065 100644 --- a/test/scenario/call_client.h +++ b/test/scenario/call_client.h @@ -85,6 +85,7 @@ class CallClient : public NetworkReceiverInterface { uint32_t GetNextAudioSsrc(); uint32_t GetNextRtxSsrc(); std::string GetNextPriorityId(); + void AddExtensions(std::vector extensions); Clock* clock_; LoggingNetworkControllerFactory network_controller_factory_; diff --git a/test/scenario/video_stream.cc b/test/scenario/video_stream.cc index 9a5d4619fb..528a9cc2c5 100644 --- a/test/scenario/video_stream.cc +++ b/test/scenario/video_stream.cc @@ -319,6 +319,7 @@ ReceiveVideoStream::ReceiveVideoStream(CallClient* receiver, recv_config.rtp.transport_cc = config.stream.packet_feedback; recv_config.rtp.local_ssrc = CallTest::kReceiverLocalVideoSsrc; recv_config.rtp.extensions = GetVideoRtpExtensions(config); + receiver_->AddExtensions(recv_config.rtp.extensions); RTC_DCHECK(!config.stream.use_rtx || config.stream.nack_history_time > TimeDelta::Zero()); recv_config.rtp.nack.rtp_history_ms = config.stream.nack_history_time.ms();