diff --git a/audio/audio_receive_stream.cc b/audio/audio_receive_stream.cc
index d4c7910..f45f608 100644
--- a/audio/audio_receive_stream.cc
+++ b/audio/audio_receive_stream.cc
@@ -265,6 +265,11 @@
   config_.rtp.extensions = std::move(extensions);
 }
 
+const std::vector<RtpExtension>& AudioReceiveStream::GetRtpExtensions() const {
+  RTC_DCHECK_RUN_ON(&worker_thread_checker_);
+  return config_.rtp.extensions;
+}
+
 webrtc::AudioReceiveStream::Stats AudioReceiveStream::GetStats(
     bool get_and_clear_legacy_stats) const {
   RTC_DCHECK_RUN_ON(&worker_thread_checker_);
diff --git a/audio/audio_receive_stream.h b/audio/audio_receive_stream.h
index 252ab13..6a4c022 100644
--- a/audio/audio_receive_stream.h
+++ b/audio/audio_receive_stream.h
@@ -95,6 +95,7 @@
   void SetFrameDecryptor(rtc::scoped_refptr<webrtc::FrameDecryptorInterface>
                              frame_decryptor) override;
   void SetRtpExtensions(std::vector<RtpExtension> extensions) override;
+  const std::vector<RtpExtension>& GetRtpExtensions() const override;
 
   webrtc::AudioReceiveStream::Stats GetStats(
       bool get_and_clear_legacy_stats) const override;
diff --git a/call/call.cc b/call/call.cc
index 0703fd4..ae6c767 100644
--- a/call/call.cc
+++ b/call/call.cc
@@ -79,10 +79,10 @@
   return true;
 }
 
-bool UseSendSideBwe(const ReceiveStream::RtpConfig& rtp) {
-  if (!rtp.transport_cc)
+bool UseSendSideBwe(const ReceiveStream* stream) {
+  if (!stream->rtp_config().transport_cc)
     return false;
-  for (const auto& extension : rtp.extensions) {
+  for (const auto& extension : stream->GetRtpExtensions()) {
     if (extension.uri == RtpExtension::kTransportSequenceNumberUri ||
         extension.uri == RtpExtension::kTransportSequenceNumberV2Uri)
       return true;
@@ -1010,8 +1010,7 @@
 
   uint32_t ssrc = audio_receive_stream->remote_ssrc();
   receive_side_cc_
-      .GetRemoteBitrateEstimator(
-          UseSendSideBwe(audio_receive_stream->rtp_config()))
+      .GetRemoteBitrateEstimator(UseSendSideBwe(audio_receive_stream))
       ->RemoveStream(ssrc);
 
   audio_receive_streams_.erase(audio_receive_stream);
@@ -1189,6 +1188,7 @@
   // TODO(bugs.webrtc.org/11993): Unregister on the network thread.
   receive_stream_impl->UnregisterFromTransport();
 
+  // TODO(tommi): Remove `rtp()` accessor.
   const webrtc::VideoReceiveStream::Config::Rtp& rtp =
       receive_stream_impl->rtp();
 
@@ -1201,7 +1201,8 @@
   video_receive_streams_.erase(receive_stream_impl);
   ConfigureSync(receive_stream_impl->sync_group());
 
-  receive_side_cc_.GetRemoteBitrateEstimator(UseSendSideBwe(rtp))
+  receive_side_cc_
+      .GetRemoteBitrateEstimator(UseSendSideBwe(receive_stream_impl))
       ->RemoveStream(rtp.remote_ssrc);
 
   UpdateAggregateNetworkState();
@@ -1251,8 +1252,7 @@
   // Remove all SSRCs pointing to the FlexfecReceiveStreamImpl to be
   // destroyed.
   receive_side_cc_
-      .GetRemoteBitrateEstimator(
-          UseSendSideBwe(receive_stream_impl->rtp_config()))
+      .GetRemoteBitrateEstimator(UseSendSideBwe(receive_stream_impl))
       ->RemoveStream(ssrc);
 
   delete receive_stream_impl;
@@ -1694,10 +1694,10 @@
   }
 
   packet.IdentifyExtensions(
-      RtpHeaderExtensionMap(it->second->rtp_config().extensions));
+      RtpHeaderExtensionMap(it->second->GetRtpExtensions()));
 
   if (use_send_side_bwe) {
-    *use_send_side_bwe = UseSendSideBwe(it->second->rtp_config());
+    *use_send_side_bwe = UseSendSideBwe(it->second);
   }
 
   return true;
diff --git a/call/flexfec_receive_stream_impl.cc b/call/flexfec_receive_stream_impl.cc
index 6c8378d..24e2120 100644
--- a/call/flexfec_receive_stream_impl.cc
+++ b/call/flexfec_receive_stream_impl.cc
@@ -210,4 +210,10 @@
       std::move(extensions);
 }
 
+const std::vector<RtpExtension>& FlexfecReceiveStreamImpl::GetRtpExtensions()
+    const {
+  RTC_DCHECK_RUN_ON(&packet_sequence_checker_);
+  return config_.rtp.extensions;
+}
+
 }  // namespace webrtc
diff --git a/call/flexfec_receive_stream_impl.h b/call/flexfec_receive_stream_impl.h
index c640ac6..0bc9faa 100644
--- a/call/flexfec_receive_stream_impl.h
+++ b/call/flexfec_receive_stream_impl.h
@@ -60,6 +60,7 @@
 
   // ReceiveStream impl.
   void SetRtpExtensions(std::vector<RtpExtension> extensions) override;
+  const std::vector<RtpExtension>& GetRtpExtensions() const override;
   const RtpConfig& rtp_config() const override { return config_.rtp; }
   uint32_t remote_ssrc() const { return config_.rtp.remote_ssrc; }
 
diff --git a/call/receive_stream.h b/call/receive_stream.h
index a6756fc..5413387 100644
--- a/call/receive_stream.h
+++ b/call/receive_stream.h
@@ -55,6 +55,11 @@
   // delivery thread.
   virtual void SetRtpExtensions(std::vector<RtpExtension> extensions) = 0;
 
+  // Access the currently set rtp extensions. Must be called on the packet
+  // delivery thread.
+  // TODO(tommi): Consider using `RtpHeaderExtensionMap` instead.
+  virtual const std::vector<RtpExtension>& GetRtpExtensions() const = 0;
+
   // Called on the packet delivery thread since some members of the config may
   // change mid-stream (e.g. the local ssrc). All mutation must also happen on
   // the packet delivery thread. Return value can be assumed to
diff --git a/media/engine/fake_webrtc_call.cc b/media/engine/fake_webrtc_call.cc
index 20651d1..d235e20 100644
--- a/media/engine/fake_webrtc_call.cc
+++ b/media/engine/fake_webrtc_call.cc
@@ -130,6 +130,11 @@
   config_.rtp.extensions = std::move(extensions);
 }
 
+const std::vector<webrtc::RtpExtension>&
+FakeAudioReceiveStream::GetRtpExtensions() const {
+  return config_.rtp.extensions;
+}
+
 webrtc::AudioReceiveStream::Stats FakeAudioReceiveStream::GetStats(
     bool get_and_clear_legacy_stats) const {
   return stats_;
@@ -380,6 +385,11 @@
   config_.rtp.extensions = std::move(extensions);
 }
 
+const std::vector<webrtc::RtpExtension>&
+FakeVideoReceiveStream::GetRtpExtensions() const {
+  return config_.rtp.extensions;
+}
+
 void FakeVideoReceiveStream::Start() {
   receiving_ = true;
 }
@@ -402,6 +412,11 @@
   config_.rtp.extensions = std::move(extensions);
 }
 
+const std::vector<webrtc::RtpExtension>&
+FakeFlexfecReceiveStream::GetRtpExtensions() const {
+  return config_.rtp.extensions;
+}
+
 const webrtc::FlexfecReceiveStream::Config&
 FakeFlexfecReceiveStream::GetConfig() const {
   return config_;
diff --git a/media/engine/fake_webrtc_call.h b/media/engine/fake_webrtc_call.h
index 338996a..47d7b18 100644
--- a/media/engine/fake_webrtc_call.h
+++ b/media/engine/fake_webrtc_call.h
@@ -128,6 +128,7 @@
   void SetFrameDecryptor(rtc::scoped_refptr<webrtc::FrameDecryptorInterface>
                              frame_decryptor) override;
   void SetRtpExtensions(std::vector<webrtc::RtpExtension> extensions) override;
+  const std::vector<webrtc::RtpExtension>& GetRtpExtensions() const override;
 
   webrtc::AudioReceiveStream::Stats GetStats(
       bool get_and_clear_legacy_stats) const override;
@@ -266,6 +267,7 @@
  private:
   // webrtc::VideoReceiveStream implementation.
   void SetRtpExtensions(std::vector<webrtc::RtpExtension> extensions) override;
+  const std::vector<webrtc::RtpExtension>& GetRtpExtensions() const override;
 
   const webrtc::ReceiveStream::RtpConfig& rtp_config() const override {
     return config_.rtp;
@@ -298,6 +300,7 @@
       const webrtc::FlexfecReceiveStream::Config& config);
 
   void SetRtpExtensions(std::vector<webrtc::RtpExtension> extensions) override;
+  const std::vector<webrtc::RtpExtension>& GetRtpExtensions() const override;
 
   const webrtc::ReceiveStream::RtpConfig& rtp_config() const override {
     return config_.rtp;
diff --git a/media/engine/webrtc_voice_engine.cc b/media/engine/webrtc_voice_engine.cc
index 1672a71..82a30ff 100644
--- a/media/engine/webrtc_voice_engine.cc
+++ b/media/engine/webrtc_voice_engine.cc
@@ -1262,9 +1262,8 @@
   webrtc::RtpParameters GetRtpParameters() const {
     webrtc::RtpParameters rtp_parameters;
     rtp_parameters.encodings.emplace_back();
-    const auto& config = stream_->rtp_config();
     rtp_parameters.encodings[0].ssrc = stream_->remote_ssrc();
-    rtp_parameters.header_extensions = config.extensions;
+    rtp_parameters.header_extensions = stream_->GetRtpExtensions();
     return rtp_parameters;
   }
 
diff --git a/video/video_receive_stream2.cc b/video/video_receive_stream2.cc
index 890edc6..dcc2f80 100644
--- a/video/video_receive_stream2.cc
+++ b/video/video_receive_stream2.cc
@@ -487,6 +487,12 @@
   c.rtp.extensions = std::move(extensions);
 }
 
+const std::vector<RtpExtension>& VideoReceiveStream2::GetRtpExtensions() const {
+  RTC_DCHECK_RUN_ON(&packet_sequence_checker_);
+  // TODO(tommi): return the state held by `rtp_video_stream_receiver_`.
+  return config_.rtp.extensions;
+}
+
 void VideoReceiveStream2::CreateAndRegisterExternalDecoder(
     const Decoder& decoder) {
   TRACE_EVENT0("webrtc",
diff --git a/video/video_receive_stream2.h b/video/video_receive_stream2.h
index 726e91b..e5acf30 100644
--- a/video/video_receive_stream2.h
+++ b/video/video_receive_stream2.h
@@ -135,6 +135,7 @@
   void Stop() override;
 
   void SetRtpExtensions(std::vector<RtpExtension> extensions) override;
+  const std::vector<RtpExtension>& GetRtpExtensions() const override;
 
   const RtpConfig& rtp_config() const override { return rtp(); }
 
