diff --git a/media/base/media_channel.h b/media/base/media_channel.h
index 578c0a2..dbcb30c 100644
--- a/media/base/media_channel.h
+++ b/media/base/media_channel.h
@@ -183,58 +183,14 @@
   virtual ~MediaChannelNetworkInterface() {}
 };
 
-// Functions shared across all MediaChannel interfaces.
-// Because there are implementation types that implement multiple
-// interfaces, this is not a base class (no diamond inheritance).
-template <class T>
-class MediaBaseChannelInterface {
- public:
-  virtual ~MediaBaseChannelInterface() = default;
-  virtual cricket::MediaType media_type() const = 0;
-
-  // Networking functions. We assume that both the send channel and the
-  // receive channel send RTP packets (RTCP packets in the case of a receive
-  // channel).
-
-  // Called on the network when an RTP packet is received.
-  virtual void OnPacketReceived(const webrtc::RtpPacketReceived& packet) = 0;
-  // Called on the network thread after a transport has finished sending a
-  // packet.
-  virtual void OnPacketSent(const rtc::SentPacket& sent_packet) = 0;
-  // Called when the socket's ability to send has changed.
-  virtual void OnReadyToSend(bool ready) = 0;
-  // Called when the network route used for sending packets changed.
-  virtual void OnNetworkRouteChanged(
-      absl::string_view transport_name,
-      const rtc::NetworkRoute& network_route) = 0;
-
-  // Corresponds to the SDP attribute extmap-allow-mixed, see RFC8285.
-  // Set to true if it's allowed to mix one- and two-byte RTP header extensions
-  // in the same stream. The setter and getter must only be called from
-  // worker_thread.
-  virtual void SetExtmapAllowMixed(bool extmap_allow_mixed) = 0;
-  virtual bool ExtmapAllowMixed() const = 0;
-
-  // Sets the abstract interface class for sending RTP/RTCP data.
-  virtual void SetInterface(MediaChannelNetworkInterface* iface) = 0;
-
-  // Returns `true` if a non-null MediaChannelNetworkInterface pointer is held.
-  // Must be called on the network thread.
-  virtual bool HasNetworkInterface() const = 0;
-
-  // Get the underlying send/receive implementation channel for testing.
-  // TODO(bugs.webrtc.org/13931): Remove method and the fakes that depend on it.
-  virtual MediaChannel* ImplForTesting() = 0;
-};
-
-class MediaSendChannelInterface
-    : public MediaBaseChannelInterface<MediaSendChannelInterface> {
+class MediaSendChannelInterface {
  public:
   virtual ~MediaSendChannelInterface() = default;
 
   virtual VideoMediaSendChannelInterface* AsVideoSendChannel() = 0;
 
   virtual VoiceMediaSendChannelInterface* AsVoiceSendChannel() = 0;
+  virtual cricket::MediaType media_type() const = 0;
 
   // Creates a new outgoing media stream with SSRCs and CNAME as described
   // by sp.
@@ -244,6 +200,29 @@
   // multiple SSRCs. In the case of an ssrc of 0, the possibly cached
   // StreamParams is removed.
   virtual bool RemoveSendStream(uint32_t ssrc) = 0;
+  // Called on the network thread after a transport has finished sending a
+  // packet.
+  virtual void OnPacketSent(const rtc::SentPacket& sent_packet) = 0;
+  // Called when the socket's ability to send has changed.
+  virtual void OnReadyToSend(bool ready) = 0;
+  // Called when the network route used for sending packets changed.
+  virtual void OnNetworkRouteChanged(
+      absl::string_view transport_name,
+      const rtc::NetworkRoute& network_route) = 0;
+  // Sets the abstract interface class for sending RTP/RTCP data.
+  virtual void SetInterface(MediaChannelNetworkInterface* iface) = 0;
+
+  // Returns `true` if a non-null MediaChannelNetworkInterface pointer is held.
+  // Must be called on the network thread.
+  virtual bool HasNetworkInterface() const = 0;
+
+  // Corresponds to the SDP attribute extmap-allow-mixed, see RFC8285.
+  // Set to true if it's allowed to mix one- and two-byte RTP header extensions
+  // in the same stream. The setter and getter must only be called from
+  // worker_thread.
+  virtual void SetExtmapAllowMixed(bool extmap_allow_mixed) = 0;
+  virtual bool ExtmapAllowMixed() const = 0;
+
   // Set the frame encryptor to use on all outgoing frames. This is optional.
   // This pointers lifetime is managed by the set of RtpSender it is attached
   // to.
@@ -271,17 +250,19 @@
   // Called whenever the list of sending SSRCs changes.
   virtual void SetSsrcListChangedCallback(
       absl::AnyInvocable<void(const std::set<uint32_t>&)> callback) = 0;
+  // Get the underlying send/receive implementation channel for testing.
+  // TODO(bugs.webrtc.org/13931): Remove method and the fakes that depend on it.
+  virtual MediaChannel* ImplForTesting() = 0;
 };
 
-class MediaReceiveChannelInterface
-    : public MediaBaseChannelInterface<MediaReceiveChannelInterface>,
-      public Delayable {
+class MediaReceiveChannelInterface : public Delayable {
  public:
   virtual ~MediaReceiveChannelInterface() = default;
 
   virtual VideoMediaReceiveChannelInterface* AsVideoReceiveChannel() = 0;
   virtual VoiceMediaReceiveChannelInterface* AsVoiceReceiveChannel() = 0;
 
+  virtual cricket::MediaType media_type() const = 0;
   // Creates a new incoming media stream with SSRCs, CNAME as described
   // by sp. In the case of a sp without SSRCs, the unsignaled sp is cached
   // to be used later for unsignaled streams received.
@@ -293,6 +274,10 @@
   // Resets any cached StreamParams for an unsignaled RecvStream, and removes
   // any existing unsignaled streams.
   virtual void ResetUnsignaledRecvStream() = 0;
+  // Sets the abstract interface class for sending RTP/RTCP data.
+  virtual void SetInterface(MediaChannelNetworkInterface* iface) = 0;
+  // Called on the network when an RTP packet is received.
+  virtual void OnPacketReceived(const webrtc::RtpPacketReceived& packet) = 0;
   // Gets the current unsignaled receive stream's SSRC, if there is one.
   virtual absl::optional<uint32_t> GetUnsignaledSsrc() const = 0;
   // Sets the local SSRC for listening to incoming RTCP reports.
@@ -322,6 +307,9 @@
       uint32_t ssrc,
       rtc::scoped_refptr<webrtc::FrameTransformerInterface>
           frame_transformer) = 0;
+  // Get the underlying send/receive implementation channel for testing.
+  // TODO(bugs.webrtc.org/13931): Remove method and the fakes that depend on it.
+  virtual MediaChannel* ImplForTesting() = 0;
 };
 
 // The stats information is structured as follows:
diff --git a/media/base/media_channel_impl.h b/media/base/media_channel_impl.h
index 57d9a4e..35e0124 100644
--- a/media/base/media_channel_impl.h
+++ b/media/base/media_channel_impl.h
@@ -369,9 +369,6 @@
 
   // Implementation of MediaBaseChannelInterface
   cricket::MediaType media_type() const override { return MEDIA_TYPE_AUDIO; }
-  void OnPacketReceived(const webrtc::RtpPacketReceived& packet) override {
-    impl()->OnPacketReceived(packet);
-  }
   void OnPacketSent(const rtc::SentPacket& sent_packet) override {
     impl()->OnPacketSent(sent_packet);
   }
@@ -475,24 +472,9 @@
   void OnPacketReceived(const webrtc::RtpPacketReceived& packet) override {
     impl()->OnPacketReceived(packet);
   }
-  void OnPacketSent(const rtc::SentPacket& sent_packet) override {
-    impl()->OnPacketSent(sent_packet);
-  }
-  void OnReadyToSend(bool ready) override { impl()->OnReadyToSend(ready); }
-  void OnNetworkRouteChanged(absl::string_view transport_name,
-                             const rtc::NetworkRoute& network_route) override {
-    impl()->OnNetworkRouteChanged(transport_name, network_route);
-  }
-  void SetExtmapAllowMixed(bool extmap_allow_mixed) override {
-    impl()->SetExtmapAllowMixed(extmap_allow_mixed);
-  }
-  bool ExtmapAllowMixed() const override { return impl()->ExtmapAllowMixed(); }
   void SetInterface(MediaChannelNetworkInterface* iface) override {
     return impl()->SetInterface(iface);
   }
-  bool HasNetworkInterface() const override {
-    return impl()->HasNetworkInterface();
-  }
   // Implementation of Delayable
   bool SetBaseMinimumPlayoutDelayMs(uint32_t ssrc, int delay_ms) override {
     return impl()->SetBaseMinimumPlayoutDelayMs(ssrc, delay_ms);
@@ -592,9 +574,6 @@
 
   // Implementation of MediaBaseChannelInterface
   cricket::MediaType media_type() const override { return MEDIA_TYPE_VIDEO; }
-  void OnPacketReceived(const webrtc::RtpPacketReceived& packet) override {
-    impl()->OnPacketReceived(packet);
-  }
   void OnPacketSent(const rtc::SentPacket& sent_packet) override {
     impl()->OnPacketSent(sent_packet);
   }
@@ -713,24 +692,6 @@
   void OnPacketReceived(const webrtc::RtpPacketReceived& packet) override {
     impl()->OnPacketReceived(packet);
   }
-  void OnPacketSent(const rtc::SentPacket& sent_packet) override {
-    impl()->OnPacketSent(sent_packet);
-  }
-  void OnReadyToSend(bool ready) override { impl()->OnReadyToSend(ready); }
-  void OnNetworkRouteChanged(absl::string_view transport_name,
-                             const rtc::NetworkRoute& network_route) override {
-    impl()->OnNetworkRouteChanged(transport_name, network_route);
-  }
-  void SetExtmapAllowMixed(bool extmap_allow_mixed) override {
-    impl()->SetExtmapAllowMixed(extmap_allow_mixed);
-  }
-  bool ExtmapAllowMixed() const override { return impl()->ExtmapAllowMixed(); }
-  void SetInterface(MediaChannelNetworkInterface* iface) override {
-    return impl()->SetInterface(iface);
-  }
-  bool HasNetworkInterface() const override {
-    return impl()->HasNetworkInterface();
-  }
   // Implementation of Delayable
   bool SetBaseMinimumPlayoutDelayMs(uint32_t ssrc, int delay_ms) override {
     return impl()->SetBaseMinimumPlayoutDelayMs(ssrc, delay_ms);
@@ -740,6 +701,9 @@
     return impl()->GetBaseMinimumPlayoutDelayMs(ssrc);
   }
   // Implementation of MediaReceiveChannelInterface
+  void SetInterface(MediaChannelNetworkInterface* iface) override {
+    return impl()->SetInterface(iface);
+  }
   bool AddRecvStream(const StreamParams& sp) override {
     return impl()->AddRecvStream(sp);
   }
diff --git a/media/engine/webrtc_video_engine_unittest.cc b/media/engine/webrtc_video_engine_unittest.cc
index 7958987..e63199d 100644
--- a/media/engine/webrtc_video_engine_unittest.cc
+++ b/media/engine/webrtc_video_engine_unittest.cc
@@ -937,7 +937,7 @@
       RtpExtension::kTransportSequenceNumberUri, kTransportSeqExtensionId));
   ASSERT_TRUE(channel->SetRecvParameters(parameters));
   channel->SetInterface(&network);
-  channel->AsVideoReceiveChannel()->OnReadyToSend(true);
+  channel->AsVideoSendChannel()->OnReadyToSend(true);
   channel->AsVideoReceiveChannel()->SetReceive(true);
 
   // Inject a RTX packet.
diff --git a/pc/channel.cc b/pc/channel.cc
index d5c02f8..bf98278 100644
--- a/pc/channel.cc
+++ b/pc/channel.cc
@@ -245,7 +245,6 @@
     }
 
     RTC_DCHECK(!media_send_channel()->HasNetworkInterface());
-    RTC_DCHECK(!media_receive_channel()->HasNetworkInterface());
     media_send_channel()->SetInterface(this);
     media_receive_channel()->SetInterface(this);
 
@@ -379,7 +378,6 @@
   // work correctly. Intentionally leave it broken to simplify the code and
   // encourage the users to stop using non-muxing RTCP.
   media_send_channel()->OnNetworkRouteChanged(transport_name(), new_route);
-  media_receive_channel()->OnNetworkRouteChanged(transport_name(), new_route);
 }
 
 void BaseChannel::SetFirstPacketReceivedCallback(
