diff --git a/pc/media_session.cc b/pc/media_session.cc index a118beebb0..f146562b37 100644 --- a/pc/media_session.cc +++ b/pc/media_session.cc @@ -1254,17 +1254,6 @@ void NegotiateRtpHeaderExtensions(const RtpHeaderExtensions& local_extensions, const RtpHeaderExtensions& offered_extensions, webrtc::RtpExtension::Filter filter, RtpHeaderExtensions* negotiated_extensions) { - // TransportSequenceNumberV2 is not offered by default. The special logic for - // the TransportSequenceNumber extensions works as follows: - // Offer Answer - // V1 V1 if in local_extensions. - // V1 and V2 V2 regardless of local_extensions. - // V2 V2 regardless of local_extensions. - const webrtc::RtpExtension* transport_sequence_number_v2_offer = - FindHeaderExtensionByUriDiscardUnsupported( - offered_extensions, - webrtc::RtpExtension::kTransportSequenceNumberV2Uri, filter); - bool frame_descriptor_in_local = false; bool dependency_descriptor_in_local = false; bool abs_capture_time_in_local = false; @@ -1276,29 +1265,16 @@ void NegotiateRtpHeaderExtensions(const RtpHeaderExtensions& local_extensions, dependency_descriptor_in_local = true; else if (ours.uri == webrtc::RtpExtension::kAbsoluteCaptureTimeUri) abs_capture_time_in_local = true; + const webrtc::RtpExtension* theirs = FindHeaderExtensionByUriDiscardUnsupported(offered_extensions, ours.uri, filter); if (theirs) { - if (transport_sequence_number_v2_offer && - ours.uri == webrtc::RtpExtension::kTransportSequenceNumberUri) { - // Don't respond to - // http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 - // if we get an offer including - // http://www.webrtc.org/experiments/rtp-hdrext/transport-wide-cc-02 - continue; - } else { - // We respond with their RTP header extension id. - negotiated_extensions->push_back(*theirs); - } + // We respond with their RTP header extension id. + negotiated_extensions->push_back(*theirs); } } - if (transport_sequence_number_v2_offer) { - // Respond that we support kTransportSequenceNumberV2Uri. - negotiated_extensions->push_back(*transport_sequence_number_v2_offer); - } - // Frame descriptors support. If the extension is not present locally, but is // in the offer, we add it to the list. if (!dependency_descriptor_in_local) { diff --git a/pc/media_session_unittest.cc b/pc/media_session_unittest.cc index f4fd09cba0..ecfb4397bb 100644 --- a/pc/media_session_unittest.cc +++ b/pc/media_session_unittest.cc @@ -1731,30 +1731,72 @@ TEST_F(MediaSessionDescriptionFactoryTest, TestOfferAnswerWithRtpExtensions) { } // Create a audio/video offer and answer and ensure that the -// TransportSequenceNumber RTP header extensions are handled correctly. 02 is -// supported and should take precedence even though not listed among locally -// supported extensions. +// TransportSequenceNumber RTP v1 and v2 header extensions are handled +// correctly. TEST_F(MediaSessionDescriptionFactoryTest, - TestOfferAnswerWithTransportSequenceNumberInOffer) { + TestOfferAnswerWithTransportSequenceNumberV1LocalAndV1InOffer) { TestTransportSequenceNumberNegotiation( MAKE_VECTOR(kRtpExtensionTransportSequenceNumber01), // Local. MAKE_VECTOR(kRtpExtensionTransportSequenceNumber01), // Offer. MAKE_VECTOR(kRtpExtensionTransportSequenceNumber01)); // Expected answer. } TEST_F(MediaSessionDescriptionFactoryTest, - TestOfferAnswerWithTransportSequenceNumber01And02InOffer) { + TestOfferAnswerWithTransportSequenceNumberV1LocalAndV1V2InOffer) { TestTransportSequenceNumberNegotiation( MAKE_VECTOR(kRtpExtensionTransportSequenceNumber01), // Local. MAKE_VECTOR(kRtpExtensionTransportSequenceNumber01And02), // Offer. + MAKE_VECTOR(kRtpExtensionTransportSequenceNumber01)); // Expected answer. +} +TEST_F(MediaSessionDescriptionFactoryTest, + TestOfferAnswerWithTransportSequenceNumberV1LocalAndV2InOffer) { + TestTransportSequenceNumberNegotiation( + MAKE_VECTOR(kRtpExtensionTransportSequenceNumber01), // Local. + MAKE_VECTOR(kRtpExtensionTransportSequenceNumber02), // Offer. + {}); // Expected answer. +} +TEST_F(MediaSessionDescriptionFactoryTest, + TestOfferAnswerWithTransportSequenceNumberV2LocalAndV1InOffer) { + TestTransportSequenceNumberNegotiation( + MAKE_VECTOR(kRtpExtensionTransportSequenceNumber02), // Local. + MAKE_VECTOR(kRtpExtensionTransportSequenceNumber01), // Offer. + {}); // Expected answer. +} +TEST_F(MediaSessionDescriptionFactoryTest, + TestOfferAnswerWithTransportSequenceNumberV2LocalAndV1V2InOffer) { + TestTransportSequenceNumberNegotiation( + MAKE_VECTOR(kRtpExtensionTransportSequenceNumber02), // Local. + MAKE_VECTOR(kRtpExtensionTransportSequenceNumber01And02), // Offer. MAKE_VECTOR(kRtpExtensionTransportSequenceNumber02)); // Expected answer. } TEST_F(MediaSessionDescriptionFactoryTest, - TestOfferAnswerWithTransportSequenceNumber02InOffer) { + TestOfferAnswerWithTransportSequenceNumberV2LocalAndV2InOffer) { TestTransportSequenceNumberNegotiation( - MAKE_VECTOR(kRtpExtensionTransportSequenceNumber01), // Local. + MAKE_VECTOR(kRtpExtensionTransportSequenceNumber02), // Local. MAKE_VECTOR(kRtpExtensionTransportSequenceNumber02), // Offer. MAKE_VECTOR(kRtpExtensionTransportSequenceNumber02)); // Expected answer. } +TEST_F(MediaSessionDescriptionFactoryTest, + TestOfferAnswerWithTransportSequenceNumberV1V2LocalAndV1InOffer) { + TestTransportSequenceNumberNegotiation( + MAKE_VECTOR(kRtpExtensionTransportSequenceNumber01And02), // Local. + MAKE_VECTOR(kRtpExtensionTransportSequenceNumber01), // Offer. + MAKE_VECTOR(kRtpExtensionTransportSequenceNumber01)); // Expected answer. +} +TEST_F(MediaSessionDescriptionFactoryTest, + TestOfferAnswerWithTransportSequenceNumberV1V2LocalAndV2InOffer) { + TestTransportSequenceNumberNegotiation( + MAKE_VECTOR(kRtpExtensionTransportSequenceNumber01And02), // Local. + MAKE_VECTOR(kRtpExtensionTransportSequenceNumber02), // Offer. + MAKE_VECTOR(kRtpExtensionTransportSequenceNumber02)); // Expected answer. +} +TEST_F(MediaSessionDescriptionFactoryTest, + TestOfferAnswerWithTransportSequenceNumberV1V2LocalAndV1V2InOffer) { + TestTransportSequenceNumberNegotiation( + MAKE_VECTOR(kRtpExtensionTransportSequenceNumber01And02), // Local. + MAKE_VECTOR(kRtpExtensionTransportSequenceNumber01And02), // Offer. + MAKE_VECTOR( + kRtpExtensionTransportSequenceNumber01And02)); // Expected answer. +} TEST_F(MediaSessionDescriptionFactoryTest, TestNegotiateFrameDescriptorWhenUnexposedLocally) {