From 9f6ae375e30d8be0183f7ae848fbce2d5d30662d Mon Sep 17 00:00:00 2001 From: Philipp Hancke Date: Mon, 6 Mar 2023 18:08:31 +0100 Subject: [PATCH] Rename header extension API methods MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit following spec updates from https://github.com/w3c/webrtc-extensions/pull/142 BUG=chromium:1051821 Change-Id: I1fd991a5024d38ac59ebe510ea1a48fd6f42d23b Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/296321 Reviewed-by: Henrik Boström Reviewed-by: Harald Alvestrand Commit-Queue: Philipp Hancke Cr-Commit-Position: refs/heads/main@{#39491} --- api/rtp_parameters.h | 4 +- api/rtp_transceiver_interface.h | 38 +++++++++++++--- api/test/mock_rtp_transceiver.h | 14 +++--- ...er_connection_header_extension_unittest.cc | 20 ++++----- pc/rtp_transceiver.cc | 30 +++++++------ pc/rtp_transceiver.h | 24 +++++----- pc/rtp_transceiver_unittest.cc | 45 ++++++++++--------- pc/sdp_offer_answer.cc | 2 +- 8 files changed, 104 insertions(+), 73 deletions(-) diff --git a/api/rtp_parameters.h b/api/rtp_parameters.h index 0d3c9dfd22..1373527346 100644 --- a/api/rtp_parameters.h +++ b/api/rtp_parameters.h @@ -229,8 +229,8 @@ struct RTC_EXPORT RtpHeaderExtensionCapability { bool preferred_encrypt = false; // The direction of the extension. The kStopped value is only used with - // RtpTransceiverInterface::HeaderExtensionsToOffer() and - // SetOfferedRtpHeaderExtensions(). + // RtpTransceiverInterface::SetHeaderExtensionsToNegotiate() and + // SetHeaderExtensionsToNegotiate(). RtpTransceiverDirection direction = RtpTransceiverDirection::kSendRecv; // Constructors for convenience. diff --git a/api/rtp_transceiver_interface.h b/api/rtp_transceiver_interface.h index c9d911fac1..b131f9e903 100644 --- a/api/rtp_transceiver_interface.h +++ b/api/rtp_transceiver_interface.h @@ -149,25 +149,49 @@ class RTC_EXPORT RtpTransceiverInterface : public rtc::RefCountInterface { rtc::ArrayView codecs) = 0; virtual std::vector codec_preferences() const = 0; - // Readonly attribute which contains the set of header extensions that was set - // with SetOfferedRtpHeaderExtensions, or a default set if it has not been + // Returns the set of header extensions that was set + // with SetHeaderExtensionsToNegotiate, or a default set if it has not been // called. // https://w3c.github.io/webrtc-extensions/#rtcrtptransceiver-interface + // TODO(crbug.com/1051821): remove old name after Chromium roll, make pure + // virtual again. + virtual std::vector + GetHeaderExtensionsToNegotiate() const { + return {}; + } virtual std::vector HeaderExtensionsToOffer() - const = 0; + const { + return GetHeaderExtensionsToNegotiate(); + } - // Readonly attribute which is either empty if negotation has not yet + // Returns either the empty set if negotation has not yet // happened, or a vector of the negotiated header extensions. // https://w3c.github.io/webrtc-extensions/#rtcrtptransceiver-interface + // TODO(crbug.com/1051821): remove old name after Chromium roll, make pure + // virtual again. + virtual std::vector + GetNegotiatedHeaderExtensions() const { + return {}; + } virtual std::vector HeaderExtensionsNegotiated() - const = 0; + const { + return GetNegotiatedHeaderExtensions(); + } - // The SetOfferedRtpHeaderExtensions method modifies the next SDP negotiation + // The SetHeaderExtensionsToNegotiate method modifies the next SDP negotiation // so that it negotiates use of header extensions which are not kStopped. // https://w3c.github.io/webrtc-extensions/#rtcrtptransceiver-interface + // TODO(crbug.com/1051821): remove old name after Chromium roll, make pure + // virtual again. + virtual webrtc::RTCError SetHeaderExtensionsToNegotiate( + rtc::ArrayView header_extensions) { + return RTCError::OK(); + } virtual webrtc::RTCError SetOfferedRtpHeaderExtensions( rtc::ArrayView - header_extensions_to_offer) = 0; + header_extensions_to_offer) { + return SetHeaderExtensionsToNegotiate(header_extensions_to_offer); + } protected: ~RtpTransceiverInterface() override = default; diff --git a/api/test/mock_rtp_transceiver.h b/api/test/mock_rtp_transceiver.h index 1d21bce5eb..72a69f1bd0 100644 --- a/api/test/mock_rtp_transceiver.h +++ b/api/test/mock_rtp_transceiver.h @@ -68,18 +68,18 @@ class MockRtpTransceiver : public RtpTransceiverInterface { (), (const, override)); MOCK_METHOD(std::vector, - HeaderExtensionsToOffer, + GetHeaderExtensionsToNegotiate, (), (const, override)); MOCK_METHOD(std::vector, - HeaderExtensionsNegotiated, + GetNegotiatedHeaderExtensions, (), (const, override)); - MOCK_METHOD(webrtc::RTCError, - SetOfferedRtpHeaderExtensions, - (rtc::ArrayView - header_extensions_to_offer), - (override)); + MOCK_METHOD( + webrtc::RTCError, + SetHeaderExtensionsToNegotiate, + (rtc::ArrayView header_extensions), + (override)); }; } // namespace webrtc diff --git a/pc/peer_connection_header_extension_unittest.cc b/pc/peer_connection_header_extension_unittest.cc index 9bbc32b7e0..9db547fb57 100644 --- a/pc/peer_connection_header_extension_unittest.cc +++ b/pc/peer_connection_header_extension_unittest.cc @@ -132,7 +132,7 @@ TEST_P(PeerConnectionHeaderExtensionTest, TransceiverOffersHeaderExtensions) { std::unique_ptr wrapper = CreatePeerConnection(media_type, semantics); auto transceiver = wrapper->AddTransceiver(media_type); - EXPECT_EQ(transceiver->HeaderExtensionsToOffer(), extensions_); + EXPECT_EQ(transceiver->GetHeaderExtensionsToNegotiate(), extensions_); } TEST_P(PeerConnectionHeaderExtensionTest, @@ -184,11 +184,11 @@ TEST_P(PeerConnectionHeaderExtensionTest, OffersUnstoppedModifiedExtensions) { std::unique_ptr wrapper = CreatePeerConnection(media_type, semantics); auto transceiver = wrapper->AddTransceiver(media_type); - auto modified_extensions = transceiver->HeaderExtensionsToOffer(); + auto modified_extensions = transceiver->GetHeaderExtensionsToNegotiate(); modified_extensions[0].direction = RtpTransceiverDirection::kSendRecv; modified_extensions[3].direction = RtpTransceiverDirection::kStopped; EXPECT_TRUE( - transceiver->SetOfferedRtpHeaderExtensions(modified_extensions).ok()); + transceiver->SetHeaderExtensionsToNegotiate(modified_extensions).ok()); auto session_description = wrapper->CreateOffer(); EXPECT_THAT(session_description->description() ->contents()[0] @@ -208,9 +208,9 @@ TEST_P(PeerConnectionHeaderExtensionTest, NegotiatedExtensionsAreAccessible) { std::unique_ptr pc1 = CreatePeerConnection(media_type, semantics); auto transceiver1 = pc1->AddTransceiver(media_type); - auto modified_extensions = transceiver1->HeaderExtensionsToOffer(); + auto modified_extensions = transceiver1->GetHeaderExtensionsToNegotiate(); modified_extensions[3].direction = RtpTransceiverDirection::kStopped; - transceiver1->SetOfferedRtpHeaderExtensions(modified_extensions); + transceiver1->SetHeaderExtensionsToNegotiate(modified_extensions); auto offer = pc1->CreateOfferAndSetAsLocal( PeerConnectionInterface::RTCOfferAnswerOptions()); @@ -224,7 +224,7 @@ TEST_P(PeerConnectionHeaderExtensionTest, NegotiatedExtensionsAreAccessible) { // PC1 has exts 2-4 unstopped and PC2 has exts 1-3 unstopped -> ext 2, 3 // survives. - EXPECT_THAT(transceiver1->HeaderExtensionsNegotiated(), + EXPECT_THAT(transceiver1->GetNegotiatedHeaderExtensions(), ElementsAre(Field(&RtpHeaderExtensionCapability::uri, "uri2"), Field(&RtpHeaderExtensionCapability::uri, "uri3"))); } @@ -238,9 +238,9 @@ TEST_P(PeerConnectionHeaderExtensionTest, OfferedExtensionsArePerTransceiver) { std::unique_ptr pc1 = CreatePeerConnection(media_type, semantics); auto transceiver1 = pc1->AddTransceiver(media_type); - auto modified_extensions = transceiver1->HeaderExtensionsToOffer(); + auto modified_extensions = transceiver1->GetHeaderExtensionsToNegotiate(); modified_extensions[3].direction = RtpTransceiverDirection::kStopped; - transceiver1->SetOfferedRtpHeaderExtensions(modified_extensions); + transceiver1->SetHeaderExtensionsToNegotiate(modified_extensions); auto transceiver2 = pc1->AddTransceiver(media_type); auto session_description = pc1->CreateOffer(); @@ -278,10 +278,10 @@ TEST_P(PeerConnectionHeaderExtensionTest, RemovalAfterRenegotiation) { PeerConnectionInterface::RTCOfferAnswerOptions()); pc1->SetRemoteDescription(std::move(answer)); - auto modified_extensions = transceiver1->HeaderExtensionsToOffer(); + auto modified_extensions = transceiver1->GetHeaderExtensionsToNegotiate(); modified_extensions[3].direction = RtpTransceiverDirection::kStopped; modified_extensions[3].direction = RtpTransceiverDirection::kStopped; - transceiver1->SetOfferedRtpHeaderExtensions(modified_extensions); + transceiver1->SetHeaderExtensionsToNegotiate(modified_extensions); auto session_description = pc1->CreateOffer(); EXPECT_THAT(session_description->description() ->contents()[0] diff --git a/pc/rtp_transceiver.cc b/pc/rtp_transceiver.cc index c1619c7349..9bc24be63a 100644 --- a/pc/rtp_transceiver.cc +++ b/pc/rtp_transceiver.cc @@ -150,13 +150,14 @@ RtpTransceiver::RtpTransceiver( rtc::scoped_refptr> receiver, ConnectionContext* context, - std::vector header_extensions_offered, + std::vector header_extensions_to_negotiate, std::function on_negotiation_needed) : thread_(GetCurrentTaskQueueOrThread()), unified_plan_(true), media_type_(sender->media_type()), context_(context), - header_extensions_to_offer_(std::move(header_extensions_offered)), + header_extensions_to_negotiate_( + std::move(header_extensions_to_negotiate)), on_negotiation_needed_(std::move(on_negotiation_needed)) { RTC_DCHECK(media_type_ == cricket::MEDIA_TYPE_AUDIO || media_type_ == cricket::MEDIA_TYPE_VIDEO); @@ -664,12 +665,12 @@ RTCError RtpTransceiver::SetCodecPreferences( } std::vector -RtpTransceiver::HeaderExtensionsToOffer() const { - return header_extensions_to_offer_; +RtpTransceiver::GetHeaderExtensionsToNegotiate() const { + return header_extensions_to_negotiate_; } std::vector -RtpTransceiver::HeaderExtensionsNegotiated() const { +RtpTransceiver::GetNegotiatedHeaderExtensions() const { RTC_DCHECK_RUN_ON(thread_); std::vector result; for (const auto& ext : negotiated_header_extensions_) { @@ -687,10 +688,9 @@ bool IsMandatoryHeaderExtension(const std::string& uri) { return uri == RtpExtension::kMidUri; } -RTCError RtpTransceiver::SetOfferedRtpHeaderExtensions( - rtc::ArrayView - header_extensions_to_offer) { - for (const auto& entry : header_extensions_to_offer) { +RTCError RtpTransceiver::SetHeaderExtensionsToNegotiate( + rtc::ArrayView header_extensions) { + for (const auto& entry : header_extensions) { // Handle unsupported requests for mandatory extensions as per // https://w3c.github.io/webrtc-extensions/#rtcrtptransceiver-interface. // Note: @@ -701,9 +701,10 @@ RTCError RtpTransceiver::SetOfferedRtpHeaderExtensions( // Step 2.2. // Handle unknown extensions. auto it = std::find_if( - header_extensions_to_offer_.begin(), header_extensions_to_offer_.end(), + header_extensions_to_negotiate_.begin(), + header_extensions_to_negotiate_.end(), [&entry](const auto& offered) { return entry.uri == offered.uri; }); - if (it == header_extensions_to_offer_.end()) { + if (it == header_extensions_to_negotiate_.end()) { return RTCError(RTCErrorType::UNSUPPORTED_PARAMETER, "Attempted to modify an unoffered extension."); } @@ -718,15 +719,16 @@ RTCError RtpTransceiver::SetOfferedRtpHeaderExtensions( // Set all current extensions but the mandatory ones to stopped. // This means that anything filtered from the input will not show up. - for (auto& entry : header_extensions_to_offer_) { + for (auto& entry : header_extensions_to_negotiate_) { if (!IsMandatoryHeaderExtension(entry.uri)) { entry.direction = RtpTransceiverDirection::kStopped; } } // Apply mutation after error checking. - for (const auto& entry : header_extensions_to_offer) { + for (const auto& entry : header_extensions) { auto it = std::find_if( - header_extensions_to_offer_.begin(), header_extensions_to_offer_.end(), + header_extensions_to_negotiate_.begin(), + header_extensions_to_negotiate_.end(), [&entry](const auto& offered) { return entry.uri == offered.uri; }); it->direction = entry.direction; } diff --git a/pc/rtp_transceiver.h b/pc/rtp_transceiver.h index 530522a24a..4a9442e483 100644 --- a/pc/rtp_transceiver.h +++ b/pc/rtp_transceiver.h @@ -91,14 +91,14 @@ class RtpTransceiver : public RtpTransceiverInterface { // Construct a Unified Plan-style RtpTransceiver with the given sender and // receiver. The media type will be derived from the media types of the sender // and receiver. The sender and receiver should have the same media type. - // `HeaderExtensionsToOffer` is used for initializing the return value of - // HeaderExtensionsToOffer(). + // `HeaderExtensionsToNegotiate` is used for initializing the return value of + // HeaderExtensionsToNegotiate(). RtpTransceiver( rtc::scoped_refptr> sender, rtc::scoped_refptr> receiver, ConnectionContext* context, - std::vector HeaderExtensionsToOffer, + std::vector HeaderExtensionsToNegotiate, std::function on_negotiation_needed); ~RtpTransceiver() override; @@ -274,13 +274,13 @@ class RtpTransceiver : public RtpTransceiverInterface { std::vector codec_preferences() const override { return codec_preferences_; } - std::vector HeaderExtensionsToOffer() + std::vector GetHeaderExtensionsToNegotiate() const override; - std::vector HeaderExtensionsNegotiated() + std::vector GetNegotiatedHeaderExtensions() const override; - RTCError SetOfferedRtpHeaderExtensions( - rtc::ArrayView - header_extensions_to_offer) override; + RTCError SetHeaderExtensionsToNegotiate( + rtc::ArrayView header_extensions) + override; // Called on the signaling thread when the local or remote content description // is updated. Used to update the negotiated header extensions. @@ -333,7 +333,7 @@ class RtpTransceiver : public RtpTransceiverInterface { std::unique_ptr channel_ = nullptr; ConnectionContext* const context_; std::vector codec_preferences_; - std::vector header_extensions_to_offer_; + std::vector header_extensions_to_negotiate_; // `negotiated_header_extensions_` is read and written to on the signaling // thread from the SdpOfferAnswerHandler class (e.g. @@ -364,11 +364,11 @@ PROXY_METHOD1(webrtc::RTCError, rtc::ArrayView) PROXY_CONSTMETHOD0(std::vector, codec_preferences) PROXY_CONSTMETHOD0(std::vector, - HeaderExtensionsToOffer) + GetHeaderExtensionsToNegotiate) PROXY_CONSTMETHOD0(std::vector, - HeaderExtensionsNegotiated) + GetNegotiatedHeaderExtensions) PROXY_METHOD1(webrtc::RTCError, - SetOfferedRtpHeaderExtensions, + SetHeaderExtensionsToNegotiate, rtc::ArrayView) END_PROXY_MAP(RtpTransceiver) diff --git a/pc/rtp_transceiver_unittest.cc b/pc/rtp_transceiver_unittest.cc index cdbd5511cb..efb651c863 100644 --- a/pc/rtp_transceiver_unittest.cc +++ b/pc/rtp_transceiver_unittest.cc @@ -246,7 +246,7 @@ TEST_F(RtpTransceiverTestForHeaderExtensions, OffersChannelManagerList) { EXPECT_CALL(*sender_.get(), SetTransceiverAsStopped()); EXPECT_CALL(*sender_.get(), Stop()); - EXPECT_EQ(transceiver_->HeaderExtensionsToOffer(), extensions_); + EXPECT_EQ(transceiver_->GetHeaderExtensionsToNegotiate(), extensions_); } TEST_F(RtpTransceiverTestForHeaderExtensions, ModifiesDirection) { @@ -258,20 +258,24 @@ TEST_F(RtpTransceiverTestForHeaderExtensions, ModifiesDirection) { auto modified_extensions = extensions_; modified_extensions[0].direction = RtpTransceiverDirection::kSendOnly; EXPECT_TRUE( - transceiver_->SetOfferedRtpHeaderExtensions(modified_extensions).ok()); - EXPECT_EQ(transceiver_->HeaderExtensionsToOffer(), modified_extensions); + transceiver_->SetHeaderExtensionsToNegotiate(modified_extensions).ok()); + EXPECT_EQ(transceiver_->GetHeaderExtensionsToNegotiate(), + modified_extensions); modified_extensions[0].direction = RtpTransceiverDirection::kRecvOnly; EXPECT_TRUE( - transceiver_->SetOfferedRtpHeaderExtensions(modified_extensions).ok()); - EXPECT_EQ(transceiver_->HeaderExtensionsToOffer(), modified_extensions); + transceiver_->SetHeaderExtensionsToNegotiate(modified_extensions).ok()); + EXPECT_EQ(transceiver_->GetHeaderExtensionsToNegotiate(), + modified_extensions); modified_extensions[0].direction = RtpTransceiverDirection::kSendRecv; EXPECT_TRUE( - transceiver_->SetOfferedRtpHeaderExtensions(modified_extensions).ok()); - EXPECT_EQ(transceiver_->HeaderExtensionsToOffer(), modified_extensions); + transceiver_->SetHeaderExtensionsToNegotiate(modified_extensions).ok()); + EXPECT_EQ(transceiver_->GetHeaderExtensionsToNegotiate(), + modified_extensions); modified_extensions[0].direction = RtpTransceiverDirection::kInactive; EXPECT_TRUE( - transceiver_->SetOfferedRtpHeaderExtensions(modified_extensions).ok()); - EXPECT_EQ(transceiver_->HeaderExtensionsToOffer(), modified_extensions); + transceiver_->SetHeaderExtensionsToNegotiate(modified_extensions).ok()); + EXPECT_EQ(transceiver_->GetHeaderExtensionsToNegotiate(), + modified_extensions); } TEST_F(RtpTransceiverTestForHeaderExtensions, AcceptsStoppedExtension) { @@ -283,8 +287,9 @@ TEST_F(RtpTransceiverTestForHeaderExtensions, AcceptsStoppedExtension) { auto modified_extensions = extensions_; modified_extensions[0].direction = RtpTransceiverDirection::kStopped; EXPECT_TRUE( - transceiver_->SetOfferedRtpHeaderExtensions(modified_extensions).ok()); - EXPECT_EQ(transceiver_->HeaderExtensionsToOffer(), modified_extensions); + transceiver_->SetHeaderExtensionsToNegotiate(modified_extensions).ok()); + EXPECT_EQ(transceiver_->GetHeaderExtensionsToNegotiate(), + modified_extensions); } TEST_F(RtpTransceiverTestForHeaderExtensions, RejectsUnsupportedExtension) { @@ -296,9 +301,9 @@ TEST_F(RtpTransceiverTestForHeaderExtensions, RejectsUnsupportedExtension) { std::vector modified_extensions( {RtpHeaderExtensionCapability("uri3", 1, RtpTransceiverDirection::kSendRecv)}); - EXPECT_THAT(transceiver_->SetOfferedRtpHeaderExtensions(modified_extensions), + EXPECT_THAT(transceiver_->SetHeaderExtensionsToNegotiate(modified_extensions), Property(&RTCError::type, RTCErrorType::UNSUPPORTED_PARAMETER)); - EXPECT_EQ(transceiver_->HeaderExtensionsToOffer(), extensions_); + EXPECT_EQ(transceiver_->GetHeaderExtensionsToNegotiate(), extensions_); } TEST_F(RtpTransceiverTestForHeaderExtensions, @@ -311,9 +316,9 @@ TEST_F(RtpTransceiverTestForHeaderExtensions, std::vector modified_extensions = extensions_; // Attempting to stop the mandatory MID extension. modified_extensions[2].direction = RtpTransceiverDirection::kStopped; - EXPECT_THAT(transceiver_->SetOfferedRtpHeaderExtensions(modified_extensions), + EXPECT_THAT(transceiver_->SetHeaderExtensionsToNegotiate(modified_extensions), Property(&RTCError::type, RTCErrorType::INVALID_MODIFICATION)); - EXPECT_EQ(transceiver_->HeaderExtensionsToOffer(), extensions_); + EXPECT_EQ(transceiver_->GetHeaderExtensionsToNegotiate(), extensions_); } TEST_F(RtpTransceiverTestForHeaderExtensions, @@ -322,7 +327,7 @@ TEST_F(RtpTransceiverTestForHeaderExtensions, EXPECT_CALL(*receiver_.get(), SetMediaChannel(_)); EXPECT_CALL(*sender_.get(), SetTransceiverAsStopped()); EXPECT_CALL(*sender_.get(), Stop()); - EXPECT_THAT(transceiver_->HeaderExtensionsNegotiated(), ElementsAre()); + EXPECT_THAT(transceiver_->GetNegotiatedHeaderExtensions(), ElementsAre()); } TEST_F(RtpTransceiverTestForHeaderExtensions, @@ -344,7 +349,7 @@ TEST_F(RtpTransceiverTestForHeaderExtensions, EXPECT_CALL(*mock_channel, SetRtpTransport(_)).WillRepeatedly(Return(true)); transceiver_->SetChannel(std::move(mock_channel), [](const std::string&) { return nullptr; }); - EXPECT_THAT(transceiver_->HeaderExtensionsNegotiated(), ElementsAre()); + EXPECT_THAT(transceiver_->GetNegotiatedHeaderExtensions(), ElementsAre()); EXPECT_CALL(*mock_channel_ptr, SetFirstPacketReceivedCallback(_)); ClearChannel(); @@ -376,7 +381,7 @@ TEST_F(RtpTransceiverTestForHeaderExtensions, ReturnsNegotiatedHdrExts) { transceiver_->SetChannel(std::move(mock_channel), [](const std::string&) { return nullptr; }); - EXPECT_THAT(transceiver_->HeaderExtensionsNegotiated(), + EXPECT_THAT(transceiver_->GetNegotiatedHeaderExtensions(), ElementsAre(RtpHeaderExtensionCapability( "uri1", 1, RtpTransceiverDirection::kSendRecv), RtpHeaderExtensionCapability( @@ -399,7 +404,7 @@ TEST_F(RtpTransceiverTestForHeaderExtensions, description.set_rtp_header_extensions(extensions); transceiver_->OnNegotiationUpdate(SdpType::kAnswer, &description); - EXPECT_THAT(transceiver_->HeaderExtensionsNegotiated(), + EXPECT_THAT(transceiver_->GetNegotiatedHeaderExtensions(), ElementsAre(RtpHeaderExtensionCapability( "uri1", 1, RtpTransceiverDirection::kSendRecv), RtpHeaderExtensionCapability( @@ -410,7 +415,7 @@ TEST_F(RtpTransceiverTestForHeaderExtensions, description.set_rtp_header_extensions(extensions); transceiver_->OnNegotiationUpdate(SdpType::kAnswer, &description); - EXPECT_THAT(transceiver_->HeaderExtensionsNegotiated(), + EXPECT_THAT(transceiver_->GetNegotiatedHeaderExtensions(), ElementsAre(RtpHeaderExtensionCapability( "uri3", 4, RtpTransceiverDirection::kSendRecv), RtpHeaderExtensionCapability( diff --git a/pc/sdp_offer_answer.cc b/pc/sdp_offer_answer.cc index ade3be7e98..33e6e7a3a0 100644 --- a/pc/sdp_offer_answer.cc +++ b/pc/sdp_offer_answer.cc @@ -694,7 +694,7 @@ cricket::MediaDescriptionOptions GetMediaDescriptionOptionsForTransceiver( media_description_options.codec_preferences = transceiver->codec_preferences(); media_description_options.header_extensions = - transceiver->HeaderExtensionsToOffer(); + transceiver->GetHeaderExtensionsToNegotiate(); // This behavior is specified in JSEP. The gist is that: // 1. The MSID is included if the RtpTransceiver's direction is sendonly or // sendrecv.