diff --git a/media/engine/webrtc_video_engine.cc b/media/engine/webrtc_video_engine.cc index 74647a87d7..294e3be6f6 100644 --- a/media/engine/webrtc_video_engine.cc +++ b/media/engine/webrtc_video_engine.cc @@ -507,6 +507,12 @@ RtpCapabilities WebRtcVideoEngine::GetCapabilities() const { webrtc::RtpExtension(webrtc::RtpExtension::kFrameMarkingUri, id++)); capabilities.header_extensions.push_back( webrtc::RtpExtension(webrtc::RtpExtension::kColorSpaceUri, id++)); + capabilities.header_extensions.push_back( + webrtc::RtpExtension(webrtc::RtpExtension::kMidUri, id++)); + capabilities.header_extensions.push_back( + webrtc::RtpExtension(webrtc::RtpExtension::kRidUri, id++)); + capabilities.header_extensions.push_back( + webrtc::RtpExtension(webrtc::RtpExtension::kRepairedRidUri, id++)); if (webrtc::field_trial::IsEnabled("WebRTC-GenericDescriptorAdvertised")) { capabilities.header_extensions.push_back(webrtc::RtpExtension( webrtc::RtpExtension::kGenericFrameDescriptorUri00, id++)); diff --git a/media/engine/webrtc_voice_engine.cc b/media/engine/webrtc_voice_engine.cc index a3b27a5f00..4c3bc84965 100644 --- a/media/engine/webrtc_voice_engine.cc +++ b/media/engine/webrtc_voice_engine.cc @@ -531,6 +531,12 @@ RtpCapabilities WebRtcVoiceEngine::GetCapabilities() const { webrtc::RtpExtension(webrtc::RtpExtension::kAbsSendTimeUri, id++)); capabilities.header_extensions.push_back(webrtc::RtpExtension( webrtc::RtpExtension::kTransportSequenceNumberUri, id++)); + capabilities.header_extensions.push_back( + webrtc::RtpExtension(webrtc::RtpExtension::kMidUri, id++)); + capabilities.header_extensions.push_back( + webrtc::RtpExtension(webrtc::RtpExtension::kRidUri, id++)); + capabilities.header_extensions.push_back( + webrtc::RtpExtension(webrtc::RtpExtension::kRepairedRidUri, id++)); return capabilities; } diff --git a/pc/media_session.cc b/pc/media_session.cc index dd5a814865..873f27dad5 100644 --- a/pc/media_session.cc +++ b/pc/media_session.cc @@ -1357,30 +1357,25 @@ void MediaSessionDescriptionFactory::set_audio_codecs( ComputeAudioCodecsIntersectionAndUnion(); } -static void AddUnifiedPlanExtensions(RtpHeaderExtensions* extensions) { +static void RemoveUnifiedPlanExtensions(RtpHeaderExtensions* extensions) { RTC_DCHECK(extensions); - rtc::UniqueNumberGenerator unique_id_generator; - unique_id_generator.AddKnownId(0); // The first valid RTP extension ID is 1. - for (const webrtc::RtpExtension& extension : *extensions) { - const bool collision_free = unique_id_generator.AddKnownId(extension.id); - RTC_DCHECK(collision_free); - } - - // Unified Plan also offers the MID and RID header extensions. - extensions->push_back(webrtc::RtpExtension(webrtc::RtpExtension::kMidUri, - unique_id_generator())); - extensions->push_back(webrtc::RtpExtension(webrtc::RtpExtension::kRidUri, - unique_id_generator())); - extensions->push_back(webrtc::RtpExtension( - webrtc::RtpExtension::kRepairedRidUri, unique_id_generator())); + extensions->erase( + std::remove_if(extensions->begin(), extensions->end(), + [](auto extension) { + return extension.uri == webrtc::RtpExtension::kMidUri || + extension.uri == webrtc::RtpExtension::kRidUri || + extension.uri == + webrtc::RtpExtension::kRepairedRidUri; + }), + extensions->end()); } RtpHeaderExtensions MediaSessionDescriptionFactory::audio_rtp_header_extensions() const { RtpHeaderExtensions extensions = audio_rtp_extensions_; - if (is_unified_plan_) { - AddUnifiedPlanExtensions(&extensions); + if (!is_unified_plan_) { + RemoveUnifiedPlanExtensions(&extensions); } return extensions; @@ -1389,8 +1384,8 @@ MediaSessionDescriptionFactory::audio_rtp_header_extensions() const { RtpHeaderExtensions MediaSessionDescriptionFactory::video_rtp_header_extensions() const { RtpHeaderExtensions extensions = video_rtp_extensions_; - if (is_unified_plan_) { - AddUnifiedPlanExtensions(&extensions); + if (!is_unified_plan_) { + RemoveUnifiedPlanExtensions(&extensions); } return extensions; diff --git a/pc/media_session_unittest.cc b/pc/media_session_unittest.cc index d2feb1fe04..a2416c4dcc 100644 --- a/pc/media_session_unittest.cc +++ b/pc/media_session_unittest.cc @@ -4441,50 +4441,6 @@ TEST_F(MediaSessionDescriptionFactoryTest, TestSetAudioCodecs) { EXPECT_EQ(no_codecs, sf.audio_sendrecv_codecs()); } -// Checks that the RID extensions are added to the video RTP header extensions. -// Note: This test somewhat shows that |set_video_rtp_header_extensions()| is -// not very well defined, as calling set() and immediately get() will yield -// an object that is not semantically equivalent to the set object. -TEST_F(MediaSessionDescriptionFactoryTest, VideoHasRidExtensionsInUnifiedPlan) { - TransportDescriptionFactory tdf; - UniqueRandomIdGenerator ssrc_generator; - MediaSessionDescriptionFactory sf(&tdf, &ssrc_generator); - sf.set_is_unified_plan(true); - cricket::RtpHeaderExtensions extensions; - sf.set_video_rtp_header_extensions(extensions); - cricket::RtpHeaderExtensions result = sf.video_rtp_header_extensions(); - // Check to see that RID extensions were added to the extension list - EXPECT_GE(result.size(), 2u); - EXPECT_THAT(result, Contains(Field("uri", &RtpExtension::uri, - RtpExtension::kMidUri))); - EXPECT_THAT(result, Contains(Field("uri", &RtpExtension::uri, - RtpExtension::kRidUri))); - EXPECT_THAT(result, Contains(Field("uri", &RtpExtension::uri, - RtpExtension::kRepairedRidUri))); -} - -// Checks that the RID extensions are added to the audio RTP header extensions. -// Note: This test somewhat shows that |set_audio_rtp_header_extensions()| is -// not very well defined, as calling set() and immediately get() will yield -// an object that is not semantically equivalent to the set object. -TEST_F(MediaSessionDescriptionFactoryTest, AudioHasRidExtensionsInUnifiedPlan) { - TransportDescriptionFactory tdf; - UniqueRandomIdGenerator ssrc_generator; - MediaSessionDescriptionFactory sf(&tdf, &ssrc_generator); - sf.set_is_unified_plan(true); - cricket::RtpHeaderExtensions extensions; - sf.set_audio_rtp_header_extensions(extensions); - cricket::RtpHeaderExtensions result = sf.audio_rtp_header_extensions(); - // Check to see that RID extensions were added to the extension list - EXPECT_GE(result.size(), 2u); - EXPECT_THAT(result, Contains(Field("uri", &RtpExtension::uri, - RtpExtension::kMidUri))); - EXPECT_THAT(result, Contains(Field("uri", &RtpExtension::uri, - RtpExtension::kRidUri))); - EXPECT_THAT(result, Contains(Field("uri", &RtpExtension::uri, - RtpExtension::kRepairedRidUri))); -} - namespace { // Compare the two vectors of codecs ignoring the payload type. template