diff --git a/api/rtptransceiverinterface.h b/api/rtptransceiverinterface.h
index 5d74ae1..4106793 100644
--- a/api/rtptransceiverinterface.h
+++ b/api/rtptransceiverinterface.h
@@ -63,6 +63,10 @@
 // https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiver
 class RtpTransceiverInterface : public rtc::RefCountInterface {
  public:
+  // Media type of the transceiver. Any sender(s)/receiver(s) will have this
+  // type as well.
+  virtual cricket::MediaType media_type() const = 0;
+
   // The mid attribute is the mid negotiated and present in the local and
   // remote descriptions. Before negotiation is complete, the mid value may be
   // null. After rollbacks, the value may change from a non-null value to null.
diff --git a/pc/peerconnection.cc b/pc/peerconnection.cc
index 4ec26fa..e565e57 100644
--- a/pc/peerconnection.cc
+++ b/pc/peerconnection.cc
@@ -774,12 +774,12 @@
   // Destroy video channels first since they may have a pointer to a voice
   // channel.
   for (auto transceiver : transceivers_) {
-    if (transceiver->internal()->media_type() == cricket::MEDIA_TYPE_VIDEO) {
+    if (transceiver->media_type() == cricket::MEDIA_TYPE_VIDEO) {
       DestroyTransceiverChannel(transceiver);
     }
   }
   for (auto transceiver : transceivers_) {
-    if (transceiver->internal()->media_type() == cricket::MEDIA_TYPE_AUDIO) {
+    if (transceiver->media_type() == cricket::MEDIA_TYPE_AUDIO) {
       DestroyTransceiverChannel(transceiver);
     }
   }
@@ -1148,7 +1148,7 @@
   RTC_DCHECK(track);
   for (auto transceiver : transceivers_) {
     if (!transceiver->sender()->track() &&
-        cricket::MediaTypeToString(transceiver->internal()->media_type()) ==
+        cricket::MediaTypeToString(transceiver->media_type()) ==
             track->kind() &&
         !transceiver->internal()->has_ever_been_used_to_send()) {
       return transceiver;
@@ -1640,8 +1640,7 @@
       rtc::scoped_refptr<RtpTransceiverProxyWithInternal<RtpTransceiver>>>
       receiving_transceivers;
   for (auto transceiver : transceivers_) {
-    if (!transceiver->stopped() &&
-        transceiver->internal()->media_type() == media_type &&
+    if (!transceiver->stopped() && transceiver->media_type() == media_type &&
         RtpTransceiverDirectionHasRecv(transceiver->direction())) {
       receiving_transceivers.push_back(transceiver);
     }
@@ -2318,13 +2317,12 @@
     }
   } else {
     if (!channel) {
-      if (transceiver->internal()->media_type() == cricket::MEDIA_TYPE_AUDIO) {
+      if (transceiver->media_type() == cricket::MEDIA_TYPE_AUDIO) {
         channel = CreateVoiceChannel(
             content.name,
             GetTransportNameForMediaSection(content.name, bundle_group));
       } else {
-        RTC_DCHECK_EQ(cricket::MEDIA_TYPE_VIDEO,
-                      transceiver->internal()->media_type());
+        RTC_DCHECK_EQ(cricket::MEDIA_TYPE_VIDEO, transceiver->media_type());
         channel = CreateVideoChannel(
             content.name,
             GetTransportNameForMediaSection(content.name, bundle_group));
@@ -2425,7 +2423,7 @@
     }
   }
   RTC_DCHECK(transceiver);
-  if (transceiver->internal()->media_type() != media_desc->type()) {
+  if (transceiver->media_type() != media_desc->type()) {
     LOG_AND_RETURN_ERROR(
         RTCErrorType::INVALID_PARAMETER,
         "Transceiver type does not match media description type.");
@@ -2471,7 +2469,7 @@
   // associated with any m= section and are not stopped, find the first such
   // RtpTransceiver.
   for (auto transceiver : transceivers_) {
-    if (transceiver->internal()->media_type() == media_type &&
+    if (transceiver->media_type() == media_type &&
         transceiver->internal()->created_by_addtrack() && !transceiver->mid() &&
         !transceiver->stopped()) {
       return transceiver;
@@ -2497,7 +2495,7 @@
     // Plan B only allows at most one audio and one video section, so use the
     // first media section of that type.
     return cricket::GetFirstMediaContent(sdesc->description()->contents(),
-                                         transceiver->internal()->media_type());
+                                         transceiver->media_type());
   }
 }
 
@@ -3318,7 +3316,7 @@
         transceiver,
     const std::string& mid) {
   cricket::MediaDescriptionOptions media_description_options(
-      transceiver->internal()->media_type(), mid, transceiver->direction(),
+      transceiver->media_type(), mid, transceiver->direction(),
       transceiver->stopped());
   // This behavior is specified in JSEP. The gist is that:
   // 1. The MSID is included if the RtpTransceiver's direction is sendonly or
@@ -3383,10 +3381,9 @@
       // rejected in either the local or remote description.
       if (had_been_rejected) {
         session_options->media_description_options.push_back(
-            cricket::MediaDescriptionOptions(
-                transceiver->internal()->media_type(), mid,
-                RtpTransceiverDirection::kInactive,
-                /*stopped=*/true));
+            cricket::MediaDescriptionOptions(transceiver->media_type(), mid,
+                                             RtpTransceiverDirection::kInactive,
+                                             /*stopped=*/true));
         recycleable_mline_indices.push(i);
       } else {
         session_options->media_description_options.push_back(
@@ -4083,7 +4080,7 @@
   // audio/video transceiver.
   RTC_DCHECK(!IsUnifiedPlan());
   for (auto transceiver : transceivers_) {
-    if (transceiver->internal()->media_type() == cricket::MEDIA_TYPE_AUDIO) {
+    if (transceiver->media_type() == cricket::MEDIA_TYPE_AUDIO) {
       return transceiver;
     }
   }
@@ -4097,7 +4094,7 @@
   // audio/video transceiver.
   RTC_DCHECK(!IsUnifiedPlan());
   for (auto transceiver : transceivers_) {
-    if (transceiver->internal()->media_type() == cricket::MEDIA_TYPE_VIDEO) {
+    if (transceiver->media_type() == cricket::MEDIA_TYPE_VIDEO) {
       return transceiver;
     }
   }
@@ -5603,7 +5600,7 @@
       const std::string& transport_name =
           transceiver->internal()->channel()->transport_name();
       media_types_by_transport_name[transport_name].insert(
-          transceiver->internal()->media_type());
+          transceiver->media_type());
     }
   }
   if (rtp_data_channel()) {
diff --git a/pc/peerconnection_bundle_unittest.cc b/pc/peerconnection_bundle_unittest.cc
index a6dccd7..116a598 100644
--- a/pc/peerconnection_bundle_unittest.cc
+++ b/pc/peerconnection_bundle_unittest.cc
@@ -79,7 +79,7 @@
     auto transceivers =
         GetInternalPeerConnection()->GetTransceiversForTesting();
     for (auto transceiver : transceivers) {
-      if (transceiver->internal()->media_type() == cricket::MEDIA_TYPE_AUDIO) {
+      if (transceiver->media_type() == cricket::MEDIA_TYPE_AUDIO) {
         return static_cast<cricket::VoiceChannel*>(
             transceiver->internal()->channel());
       }
@@ -99,7 +99,7 @@
     auto transceivers =
         GetInternalPeerConnection()->GetTransceiversForTesting();
     for (auto transceiver : transceivers) {
-      if (transceiver->internal()->media_type() == cricket::MEDIA_TYPE_VIDEO) {
+      if (transceiver->media_type() == cricket::MEDIA_TYPE_VIDEO) {
         return static_cast<cricket::VideoChannel*>(
             transceiver->internal()->channel());
       }
diff --git a/pc/peerconnection_ice_unittest.cc b/pc/peerconnection_ice_unittest.cc
index 6f6bd73..c1d7551 100644
--- a/pc/peerconnection_ice_unittest.cc
+++ b/pc/peerconnection_ice_unittest.cc
@@ -197,7 +197,7 @@
             pc_wrapper_ptr->pc());
     PeerConnection* pc = static_cast<PeerConnection*>(pc_proxy->internal());
     for (auto transceiver : pc->GetTransceiversForTesting()) {
-      if (transceiver->internal()->media_type() == cricket::MEDIA_TYPE_AUDIO) {
+      if (transceiver->media_type() == cricket::MEDIA_TYPE_AUDIO) {
         cricket::BaseChannel* channel = transceiver->internal()->channel();
         if (channel) {
           return channel->rtp_dtls_transport()->ice_transport()->GetIceRole();
diff --git a/pc/peerconnection_jsep_unittest.cc b/pc/peerconnection_jsep_unittest.cc
index 737b0c9..ae51c9e 100644
--- a/pc/peerconnection_jsep_unittest.cc
+++ b/pc/peerconnection_jsep_unittest.cc
@@ -257,12 +257,10 @@
 
   auto transceivers = callee->pc()->GetTransceivers();
   ASSERT_EQ(2u, transceivers.size());
-  EXPECT_EQ(cricket::MEDIA_TYPE_AUDIO,
-            transceivers[0]->receiver()->media_type());
+  EXPECT_EQ(cricket::MEDIA_TYPE_AUDIO, transceivers[0]->media_type());
   EXPECT_EQ(caller_audio->mid(), transceivers[0]->mid());
   EXPECT_EQ(RtpTransceiverDirection::kRecvOnly, transceivers[0]->direction());
-  EXPECT_EQ(cricket::MEDIA_TYPE_VIDEO,
-            transceivers[1]->receiver()->media_type());
+  EXPECT_EQ(cricket::MEDIA_TYPE_VIDEO, transceivers[1]->media_type());
   EXPECT_EQ(caller_video->mid(), transceivers[1]->mid());
   EXPECT_EQ(RtpTransceiverDirection::kRecvOnly, transceivers[1]->direction());
 }
@@ -645,9 +643,9 @@
   auto callee_transceivers = callee->pc()->GetTransceivers();
   ASSERT_EQ(2u, callee_transceivers.size());
   EXPECT_EQ(rtc::nullopt, callee_transceivers[0]->mid());
-  EXPECT_EQ(first_type_, callee_transceivers[0]->receiver()->media_type());
+  EXPECT_EQ(first_type_, callee_transceivers[0]->media_type());
   EXPECT_EQ(second_mid, callee_transceivers[1]->mid());
-  EXPECT_EQ(second_type_, callee_transceivers[1]->receiver()->media_type());
+  EXPECT_EQ(second_type_, callee_transceivers[1]->media_type());
 
   // The answer should have only one media section for the new transceiver.
   auto answer = callee->CreateAnswer();
diff --git a/pc/peerconnection_rtp_unittest.cc b/pc/peerconnection_rtp_unittest.cc
index f19388f..023ce92 100644
--- a/pc/peerconnection_rtp_unittest.cc
+++ b/pc/peerconnection_rtp_unittest.cc
@@ -462,6 +462,7 @@
   auto caller = CreatePeerConnectionWithUnifiedPlan();
 
   auto transceiver = caller->AddTransceiver(cricket::MEDIA_TYPE_AUDIO);
+  EXPECT_EQ(cricket::MEDIA_TYPE_AUDIO, transceiver->media_type());
 
   ASSERT_TRUE(transceiver->sender());
   EXPECT_EQ(cricket::MEDIA_TYPE_AUDIO, transceiver->sender()->media_type());
@@ -482,6 +483,7 @@
   auto caller = CreatePeerConnectionWithUnifiedPlan();
 
   auto transceiver = caller->AddTransceiver(cricket::MEDIA_TYPE_VIDEO);
+  EXPECT_EQ(cricket::MEDIA_TYPE_VIDEO, transceiver->media_type());
 
   ASSERT_TRUE(transceiver->sender());
   EXPECT_EQ(cricket::MEDIA_TYPE_VIDEO, transceiver->sender()->media_type());
diff --git a/pc/rtptransceiver.cc b/pc/rtptransceiver.cc
index ecb8ec8..310c4c4 100644
--- a/pc/rtptransceiver.cc
+++ b/pc/rtptransceiver.cc
@@ -94,7 +94,7 @@
     rtc::scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>> sender) {
   RTC_DCHECK(!unified_plan_);
   RTC_DCHECK(sender);
-  RTC_DCHECK_EQ(media_type(), sender->internal()->media_type());
+  RTC_DCHECK_EQ(media_type(), sender->media_type());
   RTC_DCHECK(std::find(senders_.begin(), senders_.end(), sender) ==
              senders_.end());
   senders_.push_back(sender);
@@ -119,7 +119,7 @@
         receiver) {
   RTC_DCHECK(!unified_plan_);
   RTC_DCHECK(receiver);
-  RTC_DCHECK_EQ(media_type(), receiver->internal()->media_type());
+  RTC_DCHECK_EQ(media_type(), receiver->media_type());
   RTC_DCHECK(std::find(receivers_.begin(), receivers_.end(), receiver) ==
              receivers_.end());
   receivers_.push_back(receiver);
@@ -152,6 +152,10 @@
   return receivers_[0]->internal();
 }
 
+cricket::MediaType RtpTransceiver::media_type() const {
+  return media_type_;
+}
+
 rtc::Optional<std::string> RtpTransceiver::mid() const {
   return mid_;
 }
diff --git a/pc/rtptransceiver.h b/pc/rtptransceiver.h
index 40ab2f0..e44b4ae 100644
--- a/pc/rtptransceiver.h
+++ b/pc/rtptransceiver.h
@@ -68,8 +68,6 @@
           receiver);
   ~RtpTransceiver() override;
 
-  cricket::MediaType media_type() const { return media_type_; }
-
   // Returns the Voice/VideoChannel set for this transceiver. May be null if
   // the transceiver is not in the currently set local/remote description.
   cricket::BaseChannel* channel() const { return channel_; }
@@ -157,6 +155,7 @@
   }
 
   // RtpTransceiverInterface implementation.
+  cricket::MediaType media_type() const override;
   rtc::Optional<std::string> mid() const override;
   rtc::scoped_refptr<RtpSenderInterface> sender() const override;
   rtc::scoped_refptr<RtpReceiverInterface> receiver() const override;
@@ -191,6 +190,7 @@
 
 BEGIN_SIGNALING_PROXY_MAP(RtpTransceiver)
 PROXY_SIGNALING_THREAD_DESTRUCTOR()
+PROXY_CONSTMETHOD0(cricket::MediaType, media_type);
 PROXY_CONSTMETHOD0(rtc::Optional<std::string>, mid);
 PROXY_CONSTMETHOD0(rtc::scoped_refptr<RtpSenderInterface>, sender);
 PROXY_CONSTMETHOD0(rtc::scoped_refptr<RtpReceiverInterface>, receiver);
