Revert "Change FakeMediaEngine to use send/receive channels"

This reverts commit 70429d45a64a79300471001214e0a543928f29d0.

Reason for revert: Needed to unblock another rollback.

Original change's description:
> Change FakeMediaEngine to use send/receive channels
>
> Also update the tests that depend on FakeMediaEngine.
>
> Bug: webrtc:13931
> Change-Id: Ia608c4ce68a29e45174b68ba0103af31e9a7d3d1
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/294280
> Reviewed-by: Henrik Boström <hbos@webrtc.org>
> Commit-Queue: Harald Alvestrand <hta@webrtc.org>
> Cr-Commit-Position: refs/heads/main@{#39345}

Bug: webrtc:13931
Change-Id: I975ed0edc0a9a4a44efec1d37202f33b40134be1
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/295680
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#39430}
diff --git a/media/base/fake_media_engine.cc b/media/base/fake_media_engine.cc
index de8073b..7a8a409 100644
--- a/media/base/fake_media_engine.cc
+++ b/media/base/fake_media_engine.cc
@@ -463,36 +463,14 @@
 
   FakeVoiceMediaChannel* ch =
       new FakeVoiceMediaChannel(role, this, options, call->network_thread());
-  switch (role) {
-    case MediaChannel::Role::kSend:
-      send_channels_.push_back(ch);
-      break;
-    case MediaChannel::Role::kReceive:
-      receive_channels_.push_back(ch);
-      break;
-    default:
-      // kBoth isn't supported any more.
-      RTC_CHECK_NOTREACHED();
-  }
+  channels_.push_back(ch);
   return ch;
 }
-FakeVoiceMediaChannel* FakeVoiceEngine::GetSendChannel(size_t index) {
-  return (send_channels_.size() > index) ? send_channels_[index] : NULL;
-}
-FakeVoiceMediaChannel* FakeVoiceEngine::GetReceiveChannel(size_t index) {
-  return (receive_channels_.size() > index) ? receive_channels_[index] : NULL;
+FakeVoiceMediaChannel* FakeVoiceEngine::GetChannel(size_t index) {
+  return (channels_.size() > index) ? channels_[index] : NULL;
 }
 void FakeVoiceEngine::UnregisterChannel(VoiceMediaChannel* channel) {
-  switch (channel->role()) {
-    case MediaChannel::Role::kSend:
-      send_channels_.erase(absl::c_find(send_channels_, channel));
-      break;
-    case MediaChannel::Role::kReceive:
-      receive_channels_.erase(absl::c_find(receive_channels_, channel));
-      break;
-    default:
-      RTC_CHECK_NOTREACHED();
-  }
+  channels_.erase(absl::c_find(channels_, channel));
 }
 const std::vector<AudioCodec>& FakeVoiceEngine::send_codecs() const {
   return send_codecs_;
@@ -557,41 +535,16 @@
 
   FakeVideoMediaChannel* ch =
       new FakeVideoMediaChannel(role, this, options, call->network_thread());
-  switch (role) {
-    case MediaChannel::Role::kSend:
-      send_channels_.emplace_back(ch);
-      break;
-    case MediaChannel::Role::kReceive:
-      receive_channels_.emplace_back(ch);
-      break;
-    default:
-      // kBoth isn't supported
-      RTC_CHECK_NOTREACHED();
-  }
+  channels_.emplace_back(ch);
   return ch;
 }
-FakeVideoMediaChannel* FakeVideoEngine::GetSendChannel(size_t index) {
-  return (send_channels_.size() > index) ? send_channels_[index] : nullptr;
-}
-FakeVideoMediaChannel* FakeVideoEngine::GetReceiveChannel(size_t index) {
-  return (receive_channels_.size() > index) ? receive_channels_[index]
-                                            : nullptr;
+FakeVideoMediaChannel* FakeVideoEngine::GetChannel(size_t index) {
+  return (channels_.size() > index) ? channels_[index] : nullptr;
 }
 void FakeVideoEngine::UnregisterChannel(VideoMediaChannel* channel) {
-  switch (channel->role()) {
-    case MediaChannel::Role::kSend: {
-      auto it = absl::c_find(send_channels_, channel);
-      RTC_DCHECK(it != send_channels_.end());
-      send_channels_.erase(it);
-    } break;
-    case MediaChannel::Role::kReceive: {
-      auto it = absl::c_find(receive_channels_, channel);
-      RTC_DCHECK(it != receive_channels_.end());
-      receive_channels_.erase(it);
-    } break;
-    default:
-      RTC_CHECK_NOTREACHED();
-  }
+  auto it = absl::c_find(channels_, channel);
+  RTC_DCHECK(it != channels_.end());
+  channels_.erase(it);
 }
 std::vector<VideoCodec> FakeVideoEngine::send_codecs(bool use_rtx) const {
   return send_codecs_;
@@ -644,17 +597,11 @@
   video_->SetRecvCodecs(codecs);
 }
 
-FakeVoiceMediaChannel* FakeMediaEngine::GetVoiceSendChannel(size_t index) {
-  return voice_->GetSendChannel(index);
+FakeVoiceMediaChannel* FakeMediaEngine::GetVoiceChannel(size_t index) {
+  return voice_->GetChannel(index);
 }
-FakeVideoMediaChannel* FakeMediaEngine::GetVideoSendChannel(size_t index) {
-  return video_->GetSendChannel(index);
-}
-FakeVoiceMediaChannel* FakeMediaEngine::GetVoiceReceiveChannel(size_t index) {
-  return voice_->GetReceiveChannel(index);
-}
-FakeVideoMediaChannel* FakeMediaEngine::GetVideoReceiveChannel(size_t index) {
-  return video_->GetReceiveChannel(index);
+FakeVideoMediaChannel* FakeMediaEngine::GetVideoChannel(size_t index) {
+  return video_->GetChannel(index);
 }
 
 void FakeMediaEngine::set_fail_create_channel(bool fail) {
diff --git a/media/base/fake_media_engine.h b/media/base/fake_media_engine.h
index ac55fd1..7a117d5 100644
--- a/media/base/fake_media_engine.h
+++ b/media/base/fake_media_engine.h
@@ -555,8 +555,7 @@
       const AudioOptions& options,
       const webrtc::CryptoOptions& crypto_options,
       webrtc::AudioCodecPairId codec_pair_id) override;
-  FakeVoiceMediaChannel* GetSendChannel(size_t index);
-  FakeVoiceMediaChannel* GetReceiveChannel(size_t index);
+  FakeVoiceMediaChannel* GetChannel(size_t index);
   void UnregisterChannel(VoiceMediaChannel* channel);
 
   // TODO(ossu): For proper testing, These should either individually settable
@@ -577,8 +576,7 @@
       std::vector<webrtc::RtpHeaderExtensionCapability> header_extensions);
 
  private:
-  std::vector<FakeVoiceMediaChannel*> send_channels_;
-  std::vector<FakeVoiceMediaChannel*> receive_channels_;
+  std::vector<FakeVoiceMediaChannel*> channels_;
   std::vector<AudioCodec> recv_codecs_;
   std::vector<AudioCodec> send_codecs_;
   bool fail_create_channel_;
@@ -599,8 +597,7 @@
       const webrtc::CryptoOptions& crypto_options,
       webrtc::VideoBitrateAllocatorFactory* video_bitrate_allocator_factory)
       override;
-  FakeVideoMediaChannel* GetSendChannel(size_t index);
-  FakeVideoMediaChannel* GetReceiveChannel(size_t index);
+  FakeVideoMediaChannel* GetChannel(size_t index);
   void UnregisterChannel(VideoMediaChannel* channel);
   std::vector<VideoCodec> send_codecs() const override {
     return send_codecs(true);
@@ -619,8 +616,7 @@
       std::vector<webrtc::RtpHeaderExtensionCapability> header_extensions);
 
  private:
-  std::vector<FakeVideoMediaChannel*> send_channels_;
-  std::vector<FakeVideoMediaChannel*> receive_channels_;
+  std::vector<FakeVideoMediaChannel*> channels_;
   std::vector<VideoCodec> send_codecs_;
   std::vector<VideoCodec> recv_codecs_;
   bool capture_;
@@ -642,10 +638,8 @@
   void SetAudioSendCodecs(const std::vector<AudioCodec>& codecs);
   void SetVideoCodecs(const std::vector<VideoCodec>& codecs);
 
-  FakeVoiceMediaChannel* GetVoiceSendChannel(size_t index);
-  FakeVideoMediaChannel* GetVideoSendChannel(size_t index);
-  FakeVoiceMediaChannel* GetVoiceReceiveChannel(size_t index);
-  FakeVideoMediaChannel* GetVideoReceiveChannel(size_t index);
+  FakeVoiceMediaChannel* GetVoiceChannel(size_t index);
+  FakeVideoMediaChannel* GetVideoChannel(size_t index);
 
   void set_fail_create_channel(bool fail);
 
diff --git a/pc/audio_rtp_receiver_unittest.cc b/pc/audio_rtp_receiver_unittest.cc
index 5a3383f..eb77212 100644
--- a/pc/audio_rtp_receiver_unittest.cc
+++ b/pc/audio_rtp_receiver_unittest.cc
@@ -39,8 +39,7 @@
                                                     std::string(),
                                                     std::vector<std::string>(),
                                                     false)),
-        media_channel_(cricket::MediaChannel::Role::kReceive,
-                       rtc::Thread::Current()) {
+        media_channel_(rtc::Thread::Current()) {
     EXPECT_CALL(media_channel_, SetRawAudioSink(kSsrc, _));
     EXPECT_CALL(media_channel_, SetBaseMinimumPlayoutDelayMs(kSsrc, _));
   }
@@ -102,8 +101,7 @@
 TEST(AudioRtpReceiver, OnChangedNotificationsAfterConstruction) {
   webrtc::test::RunLoop loop;
   auto* thread = rtc::Thread::Current();  // Points to loop's thread.
-  cricket::MockVoiceMediaChannel media_channel(
-      cricket::MediaChannel::Role::kReceive, thread);
+  cricket::MockVoiceMediaChannel media_channel(thread);
   auto receiver = rtc::make_ref_counted<AudioRtpReceiver>(
       thread, std::string(), std::vector<std::string>(), true, &media_channel);
 
diff --git a/pc/peer_connection_media_unittest.cc b/pc/peer_connection_media_unittest.cc
index 56ff8ff..d1a10a4 100644
--- a/pc/peer_connection_media_unittest.cc
+++ b/pc/peer_connection_media_unittest.cc
@@ -290,33 +290,29 @@
   ASSERT_TRUE(
       caller->SetRemoteDescription(callee->CreateAnswerAndSetAsLocal()));
 
-  auto* caller_voice_send = caller->media_engine()->GetVoiceSendChannel(0);
-  auto* caller_voice_receive =
-      caller->media_engine()->GetVoiceReceiveChannel(0);
+  auto* caller_voice_send = caller->media_engine()->GetVoiceChannel(0);
+  auto* caller_voice_receive = caller->media_engine()->GetVoiceChannel(1);
   EXPECT_THAT(GetIds(caller_voice_receive->recv_streams()),
               ElementsAre(kCalleeAudioId));
   EXPECT_THAT(GetIds(caller_voice_send->send_streams()),
               ElementsAre(kCallerAudioId));
 
-  auto* caller_video_send = caller->media_engine()->GetVideoSendChannel(0);
-  auto* caller_video_receive =
-      caller->media_engine()->GetVideoReceiveChannel(0);
+  auto* caller_video_send = caller->media_engine()->GetVideoChannel(0);
+  auto* caller_video_receive = caller->media_engine()->GetVideoChannel(1);
   EXPECT_THAT(GetIds(caller_video_receive->recv_streams()),
               ElementsAre(kCalleeVideoId));
   EXPECT_THAT(GetIds(caller_video_send->send_streams()),
               ElementsAre(kCallerVideoId));
 
-  auto* callee_voice_send = callee->media_engine()->GetVoiceSendChannel(0);
-  auto* callee_voice_receive =
-      callee->media_engine()->GetVoiceReceiveChannel(0);
+  auto* callee_voice_send = callee->media_engine()->GetVoiceChannel(0);
+  auto* callee_voice_receive = callee->media_engine()->GetVoiceChannel(1);
   EXPECT_THAT(GetIds(callee_voice_receive->recv_streams()),
               ElementsAre(kCallerAudioId));
   EXPECT_THAT(GetIds(callee_voice_send->send_streams()),
               ElementsAre(kCalleeAudioId));
 
-  auto* callee_video_send = callee->media_engine()->GetVideoSendChannel(0);
-  auto* callee_video_receive =
-      callee->media_engine()->GetVideoReceiveChannel(0);
+  auto* callee_video_send = callee->media_engine()->GetVideoChannel(0);
+  auto* callee_video_receive = callee->media_engine()->GetVideoChannel(1);
   EXPECT_THAT(GetIds(callee_video_receive->recv_streams()),
               ElementsAre(kCallerVideoId));
   EXPECT_THAT(GetIds(callee_video_send->send_streams()),
@@ -342,10 +338,8 @@
 
   ASSERT_TRUE(caller->ExchangeOfferAnswerWith(callee.get()));
 
-  ASSERT_FALSE(callee->media_engine()->GetVoiceSendChannel(0));
-  ASSERT_FALSE(callee->media_engine()->GetVideoSendChannel(0));
-  ASSERT_FALSE(callee->media_engine()->GetVoiceReceiveChannel(0));
-  ASSERT_FALSE(callee->media_engine()->GetVideoReceiveChannel(0));
+  ASSERT_FALSE(callee->media_engine()->GetVoiceChannel(0));
+  ASSERT_FALSE(callee->media_engine()->GetVideoChannel(0));
 }
 
 // Test that removing streams from a subsequent offer causes the receive streams
@@ -365,14 +359,12 @@
 
   ASSERT_TRUE(caller->ExchangeOfferAnswerWith(callee.get()));
 
-  auto callee_voice_send = callee->media_engine()->GetVoiceSendChannel(0);
-  auto callee_video_send = callee->media_engine()->GetVideoSendChannel(0);
-  auto callee_voice_receive = callee->media_engine()->GetVoiceReceiveChannel(0);
-  auto callee_video_receive = callee->media_engine()->GetVideoReceiveChannel(0);
-  EXPECT_EQ(1u, callee_voice_send->send_streams().size());
-  EXPECT_EQ(0u, callee_voice_receive->recv_streams().size());
-  EXPECT_EQ(1u, callee_video_send->send_streams().size());
-  EXPECT_EQ(0u, callee_video_receive->recv_streams().size());
+  auto callee_voice = callee->media_engine()->GetVoiceChannel(0);
+  auto callee_video = callee->media_engine()->GetVideoChannel(0);
+  EXPECT_EQ(1u, callee_voice->send_streams().size());
+  EXPECT_EQ(0u, callee_voice->recv_streams().size());
+  EXPECT_EQ(1u, callee_video->send_streams().size());
+  EXPECT_EQ(0u, callee_video->recv_streams().size());
 }
 
 // Test enabling of simulcast with Plan B semantics.
@@ -444,8 +436,8 @@
 
   ASSERT_TRUE(caller->ExchangeOfferAnswerWith(callee.get()));
 
-  EXPECT_FALSE(callee->media_engine()->GetVoiceReceiveChannel(0));
-  EXPECT_FALSE(callee->media_engine()->GetVideoReceiveChannel(0));
+  EXPECT_FALSE(callee->media_engine()->GetVoiceChannel(0));
+  EXPECT_FALSE(callee->media_engine()->GetVideoChannel(0));
 }
 
 // Test that removing streams from a subsequent answer causes the send streams
@@ -465,10 +457,10 @@
 
   ASSERT_TRUE(caller->ExchangeOfferAnswerWith(callee.get()));
 
-  auto callee_voice_send = callee->media_engine()->GetVoiceSendChannel(0);
-  auto callee_voice_receive = callee->media_engine()->GetVoiceReceiveChannel(0);
-  auto callee_video_send = callee->media_engine()->GetVideoSendChannel(0);
-  auto callee_video_receive = callee->media_engine()->GetVideoReceiveChannel(0);
+  auto callee_voice_send = callee->media_engine()->GetVoiceChannel(0);
+  auto callee_voice_receive = callee->media_engine()->GetVoiceChannel(1);
+  auto callee_video_send = callee->media_engine()->GetVideoChannel(0);
+  auto callee_video_receive = callee->media_engine()->GetVideoChannel(1);
   EXPECT_EQ(0u, callee_voice_send->send_streams().size());
   EXPECT_EQ(1u, callee_voice_receive->recv_streams().size());
   EXPECT_EQ(0u, callee_video_send->send_streams().size());
@@ -489,10 +481,10 @@
 
   ASSERT_TRUE(caller->ExchangeOfferAnswerWith(callee.get()));
 
-  auto a1 = callee->media_engine()->GetVoiceReceiveChannel(0);
-  auto a2 = callee->media_engine()->GetVoiceReceiveChannel(1);
-  auto v1 = callee->media_engine()->GetVideoReceiveChannel(0);
-  auto v2 = callee->media_engine()->GetVideoReceiveChannel(1);
+  auto a1 = callee->media_engine()->GetVoiceChannel(1);
+  auto a2 = callee->media_engine()->GetVoiceChannel(3);
+  auto v1 = callee->media_engine()->GetVideoChannel(1);
+  auto v2 = callee->media_engine()->GetVideoChannel(3);
   if (IsUnifiedPlan()) {
     ASSERT_TRUE(a1);
     EXPECT_EQ(1u, a1->recv_streams().size());
@@ -535,9 +527,9 @@
   ASSERT_TRUE(caller->ExchangeOfferAnswerWith(callee.get(), offer_options,
                                               answer_options));
 
-  auto callee_voice = callee->media_engine()->GetVoiceSendChannel(0);
+  auto callee_voice = callee->media_engine()->GetVoiceChannel(0);
   ASSERT_TRUE(callee_voice);
-  auto callee_video = callee->media_engine()->GetVideoSendChannel(0);
+  auto callee_video = callee->media_engine()->GetVideoChannel(0);
   ASSERT_TRUE(callee_video);
 
   if (IsUnifiedPlan()) {
@@ -1110,12 +1102,12 @@
   ASSERT_TRUE(caller->SetRemoteDescription(
       callee->CreateAnswerAndSetAsLocal(options_reject_video)));
 
-  auto caller_voice_send = caller->media_engine()->GetVoiceSendChannel(0);
-  auto caller_voice_receive = caller->media_engine()->GetVoiceReceiveChannel(0);
+  auto caller_voice_send = caller->media_engine()->GetVoiceChannel(0);
+  auto caller_voice_receive = caller->media_engine()->GetVoiceChannel(1);
   ASSERT_TRUE(caller_voice_send && caller_voice_receive);
   EXPECT_EQ(0u, caller_voice_receive->recv_streams().size());
   EXPECT_EQ(1u, caller_voice_send->send_streams().size());
-  auto caller_video = caller->media_engine()->GetVideoSendChannel(0);
+  auto caller_video = caller->media_engine()->GetVideoChannel(0);
   EXPECT_FALSE(caller_video);
 
   // Callee adds its own audio/video stream and offers to receive audio/video
@@ -1126,13 +1118,13 @@
   ASSERT_TRUE(
       caller->SetRemoteDescription(callee->CreateAnswerAndSetAsLocal()));
 
-  auto callee_voice_send = callee->media_engine()->GetVoiceSendChannel(0);
-  auto callee_voice_receive = callee->media_engine()->GetVoiceReceiveChannel(0);
+  auto callee_voice_send = callee->media_engine()->GetVoiceChannel(0);
+  auto callee_voice_receive = callee->media_engine()->GetVoiceChannel(1);
   ASSERT_TRUE(callee_voice_send && callee_voice_receive);
   EXPECT_EQ(1u, callee_voice_receive->recv_streams().size());
   EXPECT_EQ(1u, callee_voice_send->send_streams().size());
-  auto callee_video_send = callee->media_engine()->GetVideoSendChannel(0);
-  auto callee_video_receive = callee->media_engine()->GetVideoReceiveChannel(0);
+  auto callee_video_send = callee->media_engine()->GetVideoChannel(0);
+  auto callee_video_receive = callee->media_engine()->GetVideoChannel(1);
   ASSERT_TRUE(callee_video_send && callee_video_receive);
   EXPECT_EQ(1u, callee_video_receive->recv_streams().size());
   EXPECT_EQ(1u, callee_video_send->send_streams().size());
@@ -1143,12 +1135,12 @@
   ASSERT_TRUE(
       callee->SetLocalDescription(callee->CreateAnswer(options_reject_video)));
 
-  callee_voice_send = callee->media_engine()->GetVoiceSendChannel(0);
-  callee_voice_receive = callee->media_engine()->GetVoiceReceiveChannel(0);
+  callee_voice_send = callee->media_engine()->GetVoiceChannel(0);
+  callee_voice_receive = callee->media_engine()->GetVoiceChannel(1);
   ASSERT_TRUE(callee_voice_send && callee_voice_receive);
   EXPECT_EQ(1u, callee_voice_receive->recv_streams().size());
   EXPECT_EQ(1u, callee_voice_send->send_streams().size());
-  auto callee_video = callee->media_engine()->GetVideoSendChannel(0);
+  auto callee_video = callee->media_engine()->GetVideoChannel(0);
   EXPECT_FALSE(callee_video);
 }
 
@@ -1184,13 +1176,12 @@
   ASSERT_TRUE(caller->SetRemoteDescription(
       callee->CreateAnswerAndSetAsLocal(options_reject_audio)));
 
-  auto caller_voice = caller->media_engine()->GetVoiceSendChannel(0);
+  auto caller_voice = caller->media_engine()->GetVoiceChannel(0);
   EXPECT_FALSE(caller_voice);
-  auto caller_video_send = caller->media_engine()->GetVideoSendChannel(0);
-  auto caller_video_receive = caller->media_engine()->GetVideoReceiveChannel(0);
-  ASSERT_TRUE(caller_video_send && caller_video_receive);
-  EXPECT_EQ(0u, caller_video_receive->recv_streams().size());
-  EXPECT_EQ(1u, caller_video_send->send_streams().size());
+  auto caller_video = caller->media_engine()->GetVideoChannel(0);
+  ASSERT_TRUE(caller_video);
+  EXPECT_EQ(0u, caller_video->recv_streams().size());
+  EXPECT_EQ(1u, caller_video->send_streams().size());
 
   // Callee adds its own audio/video stream and offers to receive audio/video
   // too.
@@ -1200,13 +1191,13 @@
   ASSERT_TRUE(caller->SetRemoteDescription(
       callee->CreateAnswerAndSetAsLocal(options_no_bundle)));
 
-  auto callee_voice_send = callee->media_engine()->GetVoiceSendChannel(0);
-  auto callee_voice_receive = callee->media_engine()->GetVoiceReceiveChannel(0);
+  auto callee_voice_send = callee->media_engine()->GetVoiceChannel(0);
+  auto callee_voice_receive = callee->media_engine()->GetVoiceChannel(1);
   ASSERT_TRUE(callee_voice_send && callee_voice_receive);
   EXPECT_EQ(1u, callee_voice_receive->recv_streams().size());
   EXPECT_EQ(1u, callee_voice_send->send_streams().size());
-  auto callee_video_send = callee->media_engine()->GetVideoSendChannel(0);
-  auto callee_video_receive = callee->media_engine()->GetVideoReceiveChannel(0);
+  auto callee_video_send = callee->media_engine()->GetVideoChannel(0);
+  auto callee_video_receive = callee->media_engine()->GetVideoChannel(1);
   ASSERT_TRUE(callee_video_send && callee_video_receive);
   EXPECT_EQ(1u, callee_video_receive->recv_streams().size());
   EXPECT_EQ(1u, callee_video_send->send_streams().size());
@@ -1217,10 +1208,10 @@
   ASSERT_TRUE(
       callee->SetLocalDescription(callee->CreateAnswer(options_reject_audio)));
 
-  auto callee_voice = callee->media_engine()->GetVoiceReceiveChannel(0);
+  auto callee_voice = callee->media_engine()->GetVoiceChannel(0);
   EXPECT_FALSE(callee_voice);
-  callee_video_send = callee->media_engine()->GetVideoSendChannel(0);
-  callee_video_receive = callee->media_engine()->GetVideoReceiveChannel(0);
+  callee_video_send = callee->media_engine()->GetVideoChannel(0);
+  callee_video_receive = callee->media_engine()->GetVideoChannel(1);
   ASSERT_TRUE(callee_video_send && callee_video_receive);
   EXPECT_EQ(1u, callee_video_receive->recv_streams().size());
   EXPECT_EQ(1u, callee_video_send->send_streams().size());
@@ -1235,7 +1226,7 @@
 
   ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
 
-  auto video_channel = caller->media_engine()->GetVideoSendChannel(0);
+  auto video_channel = caller->media_engine()->GetVideoChannel(0);
   video_channel->set_fail_set_send_codecs(true);
 
   std::string error;
@@ -1258,7 +1249,7 @@
 
   ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
 
-  auto video_channel = caller->media_engine()->GetVideoSendChannel(0);
+  auto video_channel = caller->media_engine()->GetVideoChannel(0);
   video_channel->set_fail_set_send_codecs(true);
 
   EXPECT_FALSE(
@@ -1356,7 +1347,7 @@
 
   ASSERT_TRUE(caller->SetLocalDescription(caller->CreateOffer()));
 
-  auto caller_voice = caller->media_engine()->GetVoiceSendChannel(0);
+  auto caller_voice = caller->media_engine()->GetVoiceChannel(0);
   ASSERT_TRUE(caller_voice);
   const cricket::AudioOptions& audio_options = caller_voice->options();
   EXPECT_EQ(config.combined_audio_video_bwe,
diff --git a/pc/rtp_sender_receiver_unittest.cc b/pc/rtp_sender_receiver_unittest.cc
index 8be3a0a..5e7c1f6 100644
--- a/pc/rtp_sender_receiver_unittest.cc
+++ b/pc/rtp_sender_receiver_unittest.cc
@@ -119,60 +119,45 @@
     // Create the channels, discard the result; we get them later.
     // Fake media channels are owned by the media engine.
     media_engine_->voice().CreateMediaChannel(
-        cricket::MediaChannel::Role::kSend, &fake_call_, cricket::MediaConfig(),
+        cricket::MediaChannel::Role::kBoth, &fake_call_, cricket::MediaConfig(),
         cricket::AudioOptions(), webrtc::CryptoOptions(),
         webrtc::AudioCodecPairId::Create());
     media_engine_->video().CreateMediaChannel(
-        cricket::MediaChannel::Role::kSend, &fake_call_, cricket::MediaConfig(),
+        cricket::MediaChannel::Role::kBoth, &fake_call_, cricket::MediaConfig(),
         cricket::VideoOptions(), webrtc::CryptoOptions(),
         video_bitrate_allocator_factory_.get());
-    media_engine_->voice().CreateMediaChannel(
-        cricket::MediaChannel::Role::kReceive, &fake_call_,
-        cricket::MediaConfig(), cricket::AudioOptions(),
-        webrtc::CryptoOptions(), webrtc::AudioCodecPairId::Create());
-    media_engine_->video().CreateMediaChannel(
-        cricket::MediaChannel::Role::kReceive, &fake_call_,
-        cricket::MediaConfig(), cricket::VideoOptions(),
-        webrtc::CryptoOptions(), video_bitrate_allocator_factory_.get());
+    // TODO(hta): Split into sender and receiver channels
 
-    voice_media_send_channel_ =
-        absl::WrapUnique(media_engine_->GetVoiceSendChannel(0));
-    video_media_send_channel_ =
-        absl::WrapUnique(media_engine_->GetVideoSendChannel(0));
-    voice_media_receive_channel_ =
-        absl::WrapUnique(media_engine_->GetVoiceReceiveChannel(0));
-    video_media_receive_channel_ =
-        absl::WrapUnique(media_engine_->GetVideoReceiveChannel(0));
+    voice_media_channel_ = absl::WrapUnique(media_engine_->GetVoiceChannel(0));
+    video_media_channel_ = absl::WrapUnique(media_engine_->GetVideoChannel(0));
 
-    RTC_CHECK(voice_media_send_channel());
-    RTC_CHECK(video_media_send_channel());
-    RTC_CHECK(voice_media_receive_channel());
-    RTC_CHECK(video_media_receive_channel());
+    RTC_CHECK(voice_media_channel());
+    RTC_CHECK(video_media_channel());
     // Create sender channel objects
-    voice_send_channel_ = std::make_unique<cricket::VoiceMediaSendChannel>(
-        voice_media_send_channel());
-    video_send_channel_ = std::make_unique<cricket::VideoMediaSendChannel>(
-        video_media_send_channel());
+    voice_send_channel_ =
+        std::make_unique<cricket::VoiceMediaSendChannel>(voice_media_channel());
+    video_send_channel_ =
+        std::make_unique<cricket::VideoMediaSendChannel>(video_media_channel());
 
     // Create streams for predefined SSRCs. Streams need to exist in order
     // for the senders and receievers to apply parameters to them.
     // Normally these would be created by SetLocalDescription and
     // SetRemoteDescription.
-    voice_media_send_channel_->AddSendStream(
+    voice_media_channel_->AddSendStream(
         cricket::StreamParams::CreateLegacy(kAudioSsrc));
-    voice_media_receive_channel_->AddRecvStream(
+    voice_media_channel_->AddRecvStream(
         cricket::StreamParams::CreateLegacy(kAudioSsrc));
-    voice_media_send_channel_->AddSendStream(
+    voice_media_channel_->AddSendStream(
         cricket::StreamParams::CreateLegacy(kAudioSsrc2));
-    voice_media_receive_channel_->AddRecvStream(
+    voice_media_channel_->AddRecvStream(
         cricket::StreamParams::CreateLegacy(kAudioSsrc2));
-    video_media_send_channel_->AddSendStream(
+    video_media_channel_->AddSendStream(
         cricket::StreamParams::CreateLegacy(kVideoSsrc));
-    video_media_receive_channel_->AddRecvStream(
+    video_media_channel_->AddRecvStream(
         cricket::StreamParams::CreateLegacy(kVideoSsrc));
-    video_media_send_channel_->AddSendStream(
+    video_media_channel_->AddSendStream(
         cricket::StreamParams::CreateLegacy(kVideoSsrc2));
-    video_media_receive_channel_->AddRecvStream(
+    video_media_channel_->AddRecvStream(
         cricket::StreamParams::CreateLegacy(kVideoSsrc2));
   }
 
@@ -200,7 +185,7 @@
     const cricket::AudioCodec kTelephoneEventCodec(106, "telephone-event", 8000,
                                                    0, 1);
     params.codecs.push_back(kTelephoneEventCodec);
-    voice_media_send_channel()->SetSendParameters(params);
+    voice_media_channel()->SetSendParameters(params);
   }
 
   void AddVideoTrack() { AddVideoTrack(false); }
@@ -236,7 +221,7 @@
     audio_rtp_sender_ =
         AudioRtpSender::Create(worker_thread_, /*id=*/"", nullptr, nullptr);
     audio_rtp_sender_->SetMediaChannel(
-        voice_media_send_channel()->AsVoiceSendChannel());
+        voice_media_channel()->AsVoiceSendChannel());
   }
 
   void CreateVideoRtpSender(uint32_t ssrc) {
@@ -255,7 +240,7 @@
   }
 
   uint32_t CreateVideoRtpSender(const cricket::StreamParams& stream_params) {
-    video_media_send_channel_->AddSendStream(stream_params);
+    video_media_channel_->AddSendStream(stream_params);
     uint32_t primary_ssrc = stream_params.first_ssrc();
     CreateVideoRtpSender(primary_ssrc);
     return primary_ssrc;
@@ -289,7 +274,7 @@
     EXPECT_CALL(*set_streams_observer, OnSetStreams());
     video_rtp_sender_->SetStreams({local_stream_->id()});
     video_rtp_sender_->SetMediaChannel(
-        video_media_send_channel()->AsVideoSendChannel());
+        video_media_channel()->AsVideoSendChannel());
     video_rtp_sender_->SetSsrc(ssrc);
     VerifyVideoChannelInput(ssrc);
   }
@@ -297,7 +282,7 @@
     video_rtp_sender_ =
         VideoRtpSender::Create(worker_thread_, /*id=*/"", nullptr);
     video_rtp_sender_->SetMediaChannel(
-        video_media_send_channel()->AsVideoSendChannel());
+        video_media_channel()->AsVideoSendChannel());
   }
 
   void DestroyAudioRtpSender() {
@@ -316,7 +301,7 @@
         rtc::Thread::Current(), kAudioTrackId, streams,
         /*is_unified_plan=*/true);
     audio_rtp_receiver_->SetMediaChannel(
-        voice_media_receive_channel()->AsVoiceReceiveChannel());
+        voice_media_channel()->AsVoiceReceiveChannel());
     audio_rtp_receiver_->SetupMediaChannel(kAudioSsrc);
     audio_track_ = audio_rtp_receiver_->audio_track();
     VerifyVoiceChannelOutput();
@@ -327,7 +312,7 @@
     video_rtp_receiver_ = rtc::make_ref_counted<VideoRtpReceiver>(
         rtc::Thread::Current(), kVideoTrackId, streams);
     video_rtp_receiver_->SetMediaChannel(
-        video_media_receive_channel()->AsVideoReceiveChannel());
+        video_media_channel()->AsVideoReceiveChannel());
     video_rtp_receiver_->SetupMediaChannel(kVideoSsrc);
     video_track_ = video_rtp_receiver_->video_track();
     VerifyVideoChannelOutput();
@@ -342,13 +327,13 @@
       ssrcs.push_back(kVideoSsrcSimulcast + i);
     cricket::StreamParams stream_params =
         cricket::CreateSimStreamParams("cname", ssrcs);
-    video_media_receive_channel_->AddRecvStream(stream_params);
+    video_media_channel_->AddRecvStream(stream_params);
     uint32_t primary_ssrc = stream_params.first_ssrc();
 
     video_rtp_receiver_ = rtc::make_ref_counted<VideoRtpReceiver>(
         rtc::Thread::Current(), kVideoTrackId, streams);
     video_rtp_receiver_->SetMediaChannel(
-        video_media_receive_channel()->AsVideoReceiveChannel());
+        video_media_channel()->AsVideoReceiveChannel());
     video_rtp_receiver_->SetupMediaChannel(primary_ssrc);
     video_track_ = video_rtp_receiver_->video_track();
   }
@@ -375,55 +360,53 @@
   void VerifyVoiceChannelInput(uint32_t ssrc) {
     // Verify that the media channel has an audio source, and the stream isn't
     // muted.
-    EXPECT_TRUE(voice_media_send_channel()->HasSource(ssrc));
-    EXPECT_FALSE(voice_media_send_channel()->IsStreamMuted(ssrc));
+    EXPECT_TRUE(voice_media_channel()->HasSource(ssrc));
+    EXPECT_FALSE(voice_media_channel()->IsStreamMuted(ssrc));
   }
 
   void VerifyVideoChannelInput() { VerifyVideoChannelInput(kVideoSsrc); }
 
   void VerifyVideoChannelInput(uint32_t ssrc) {
     // Verify that the media channel has a video source,
-    EXPECT_TRUE(video_media_send_channel_->HasSource(ssrc));
+    EXPECT_TRUE(video_media_channel_->HasSource(ssrc));
   }
 
   void VerifyVoiceChannelNoInput() { VerifyVoiceChannelNoInput(kAudioSsrc); }
 
   void VerifyVoiceChannelNoInput(uint32_t ssrc) {
     // Verify that the media channel's source is reset.
-    EXPECT_FALSE(voice_media_receive_channel()->HasSource(ssrc));
+    EXPECT_FALSE(voice_media_channel()->HasSource(ssrc));
   }
 
   void VerifyVideoChannelNoInput() { VerifyVideoChannelNoInput(kVideoSsrc); }
 
   void VerifyVideoChannelNoInput(uint32_t ssrc) {
     // Verify that the media channel's source is reset.
-    EXPECT_FALSE(video_media_receive_channel_->HasSource(ssrc));
+    EXPECT_FALSE(video_media_channel_->HasSource(ssrc));
   }
 
   void VerifyVoiceChannelOutput() {
     // Verify that the volume is initialized to 1.
     double volume;
-    EXPECT_TRUE(
-        voice_media_receive_channel()->GetOutputVolume(kAudioSsrc, &volume));
+    EXPECT_TRUE(voice_media_channel()->GetOutputVolume(kAudioSsrc, &volume));
     EXPECT_EQ(1, volume);
   }
 
   void VerifyVideoChannelOutput() {
     // Verify that the media channel has a sink.
-    EXPECT_TRUE(video_media_receive_channel_->HasSink(kVideoSsrc));
+    EXPECT_TRUE(video_media_channel_->HasSink(kVideoSsrc));
   }
 
   void VerifyVoiceChannelNoOutput() {
     // Verify that the volume is reset to 0.
     double volume;
-    EXPECT_TRUE(
-        voice_media_receive_channel()->GetOutputVolume(kAudioSsrc, &volume));
+    EXPECT_TRUE(voice_media_channel()->GetOutputVolume(kAudioSsrc, &volume));
     EXPECT_EQ(0, volume);
   }
 
   void VerifyVideoChannelNoOutput() {
     // Verify that the media channel's sink is reset.
-    EXPECT_FALSE(video_media_receive_channel_->HasSink(kVideoSsrc));
+    EXPECT_FALSE(video_media_channel_->HasSink(kVideoSsrc));
   }
 
   // Verifies that the encoding layers contain the specified RIDs.
@@ -500,8 +483,7 @@
     RunDisableEncodingLayersTest(all_layers, disabled_layers,
                                  video_rtp_sender_.get());
 
-    auto channel_parameters =
-        video_media_send_channel_->GetRtpSendParameters(ssrc);
+    auto channel_parameters = video_media_channel_->GetRtpSendParameters(ssrc);
     ASSERT_EQ(channel_parameters.encodings.size(), all_layers.size());
     for (size_t i = 0; i < all_layers.size(); ++i) {
       EXPECT_EQ(all_layers[i], channel_parameters.encodings[i].rid);
@@ -524,17 +506,11 @@
   }
 
  protected:
-  cricket::FakeVideoMediaChannel* video_media_send_channel() {
-    return video_media_send_channel_.get();
+  cricket::FakeVideoMediaChannel* video_media_channel() {
+    return video_media_channel_.get();
   }
-  cricket::FakeVoiceMediaChannel* voice_media_send_channel() {
-    return voice_media_send_channel_.get();
-  }
-  cricket::FakeVideoMediaChannel* video_media_receive_channel() {
-    return video_media_receive_channel_.get();
-  }
-  cricket::FakeVoiceMediaChannel* voice_media_receive_channel() {
-    return voice_media_receive_channel_.get();
+  cricket::FakeVoiceMediaChannel* voice_media_channel() {
+    return voice_media_channel_.get();
   }
 
   test::RunLoop run_loop_;
@@ -550,10 +526,8 @@
   std::unique_ptr<cricket::FakeMediaEngine> media_engine_;
   rtc::UniqueRandomIdGenerator ssrc_generator_;
   cricket::FakeCall fake_call_;
-  std::unique_ptr<cricket::FakeVoiceMediaChannel> voice_media_send_channel_;
-  std::unique_ptr<cricket::FakeVideoMediaChannel> video_media_send_channel_;
-  std::unique_ptr<cricket::FakeVoiceMediaChannel> voice_media_receive_channel_;
-  std::unique_ptr<cricket::FakeVideoMediaChannel> video_media_receive_channel_;
+  std::unique_ptr<cricket::FakeVoiceMediaChannel> voice_media_channel_;
+  std::unique_ptr<cricket::FakeVideoMediaChannel> video_media_channel_;
   std::unique_ptr<cricket::VoiceMediaSendChannel> voice_send_channel_;
   std::unique_ptr<cricket::VideoMediaSendChannel> video_send_channel_;
   rtc::scoped_refptr<AudioRtpSender> audio_rtp_sender_;
@@ -611,7 +585,7 @@
   auto source = LocalAudioSource::Create(&options);
   CreateAudioRtpSender(source);
 
-  EXPECT_EQ(true, voice_media_send_channel()->options().echo_cancellation);
+  EXPECT_EQ(true, voice_media_channel()->options().echo_cancellation);
 
   DestroyAudioRtpSender();
 }
@@ -622,10 +596,10 @@
   CreateAudioRtpSender();
 
   audio_track_->set_enabled(false);
-  EXPECT_TRUE(voice_media_send_channel()->IsStreamMuted(kAudioSsrc));
+  EXPECT_TRUE(voice_media_channel()->IsStreamMuted(kAudioSsrc));
 
   audio_track_->set_enabled(true);
-  EXPECT_FALSE(voice_media_send_channel()->IsStreamMuted(kAudioSsrc));
+  EXPECT_FALSE(voice_media_channel()->IsStreamMuted(kAudioSsrc));
 
   DestroyAudioRtpSender();
 }
@@ -636,22 +610,19 @@
   CreateAudioRtpReceiver();
 
   double volume;
-  EXPECT_TRUE(
-      voice_media_receive_channel()->GetOutputVolume(kAudioSsrc, &volume));
+  EXPECT_TRUE(voice_media_channel()->GetOutputVolume(kAudioSsrc, &volume));
   EXPECT_EQ(1, volume);
 
   // Handling of enable/disable is applied asynchronously.
   audio_track_->set_enabled(false);
   run_loop_.Flush();
 
-  EXPECT_TRUE(
-      voice_media_receive_channel()->GetOutputVolume(kAudioSsrc, &volume));
+  EXPECT_TRUE(voice_media_channel()->GetOutputVolume(kAudioSsrc, &volume));
   EXPECT_EQ(0, volume);
 
   audio_track_->set_enabled(true);
   run_loop_.Flush();
-  EXPECT_TRUE(
-      voice_media_receive_channel()->GetOutputVolume(kAudioSsrc, &volume));
+  EXPECT_TRUE(voice_media_channel()->GetOutputVolume(kAudioSsrc, &volume));
   EXPECT_EQ(1, volume);
 
   DestroyAudioRtpReceiver();
@@ -706,8 +677,7 @@
   double volume;
   audio_track_->GetSource()->SetVolume(0.5);
   run_loop_.Flush();
-  EXPECT_TRUE(
-      voice_media_receive_channel()->GetOutputVolume(kAudioSsrc, &volume));
+  EXPECT_TRUE(voice_media_channel()->GetOutputVolume(kAudioSsrc, &volume));
   EXPECT_EQ(0.5, volume);
 
   // Disable the audio track, this should prevent setting the volume.
@@ -715,22 +685,19 @@
   RTC_DCHECK_EQ(worker_thread_, run_loop_.task_queue());
   run_loop_.Flush();
   audio_track_->GetSource()->SetVolume(0.8);
-  EXPECT_TRUE(
-      voice_media_receive_channel()->GetOutputVolume(kAudioSsrc, &volume));
+  EXPECT_TRUE(voice_media_channel()->GetOutputVolume(kAudioSsrc, &volume));
   EXPECT_EQ(0, volume);
 
   // When the track is enabled, the previously set volume should take effect.
   audio_track_->set_enabled(true);
   run_loop_.Flush();
-  EXPECT_TRUE(
-      voice_media_receive_channel()->GetOutputVolume(kAudioSsrc, &volume));
+  EXPECT_TRUE(voice_media_channel()->GetOutputVolume(kAudioSsrc, &volume));
   EXPECT_EQ(0.8, volume);
 
   // Try changing volume one more time.
   audio_track_->GetSource()->SetVolume(0.9);
   run_loop_.Flush();
-  EXPECT_TRUE(
-      voice_media_receive_channel()->GetOutputVolume(kAudioSsrc, &volume));
+  EXPECT_TRUE(voice_media_channel()->GetOutputVolume(kAudioSsrc, &volume));
   EXPECT_EQ(0.9, volume);
 
   DestroyAudioRtpReceiver();
@@ -739,16 +706,16 @@
 TEST_F(RtpSenderReceiverTest, AudioRtpReceiverDelay) {
   CreateAudioRtpReceiver();
   VerifyRtpReceiverDelayBehaviour(
-      voice_media_receive_channel()->AsVoiceReceiveChannel(),
-      audio_rtp_receiver_.get(), kAudioSsrc);
+      voice_media_channel()->AsVoiceReceiveChannel(), audio_rtp_receiver_.get(),
+      kAudioSsrc);
   DestroyAudioRtpReceiver();
 }
 
 TEST_F(RtpSenderReceiverTest, VideoRtpReceiverDelay) {
   CreateVideoRtpReceiver();
   VerifyRtpReceiverDelayBehaviour(
-      video_media_receive_channel()->AsVideoReceiveChannel(),
-      video_rtp_receiver_.get(), kVideoSsrc);
+      video_media_channel()->AsVideoReceiveChannel(), video_rtp_receiver_.get(),
+      kVideoSsrc);
   DestroyVideoRtpReceiver();
 }
 
@@ -986,9 +953,9 @@
   std::vector<uint32_t> ssrcs(1, 1);
   cricket::StreamParams stream_params =
       cricket::CreateSimStreamParams("cname", ssrcs);
-  voice_media_send_channel()->AddSendStream(stream_params);
+  voice_media_channel()->AddSendStream(stream_params);
   audio_rtp_sender_->SetMediaChannel(
-      voice_media_send_channel()->AsVoiceSendChannel());
+      voice_media_channel()->AsVoiceSendChannel());
   audio_rtp_sender_->SetSsrc(1);
 
   params = audio_rtp_sender_->GetParameters();
@@ -1103,7 +1070,7 @@
 TEST_F(RtpSenderReceiverTest, SetAudioMaxSendBitrate) {
   CreateAudioRtpSender();
 
-  EXPECT_EQ(-1, voice_media_send_channel()->max_bps());
+  EXPECT_EQ(-1, voice_media_channel()->max_bps());
   webrtc::RtpParameters params = audio_rtp_sender_->GetParameters();
   EXPECT_EQ(1U, params.encodings.size());
   EXPECT_FALSE(params.encodings[0].max_bitrate_bps);
@@ -1116,12 +1083,12 @@
   EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
 
   // Verify that the audio channel received the new parameters.
-  params = voice_media_send_channel()->GetRtpSendParameters(kAudioSsrc);
+  params = voice_media_channel()->GetRtpSendParameters(kAudioSsrc);
   EXPECT_EQ(1U, params.encodings.size());
   EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
 
   // Verify that the global bitrate limit has not been changed.
-  EXPECT_EQ(-1, voice_media_send_channel()->max_bps());
+  EXPECT_EQ(-1, voice_media_channel()->max_bps());
 
   DestroyAudioRtpSender();
 }
@@ -1141,7 +1108,7 @@
   EXPECT_EQ(1U, params.encodings.size());
   EXPECT_EQ(new_bitrate_priority, params.encodings[0].bitrate_priority);
 
-  params = voice_media_send_channel()->GetRtpSendParameters(kAudioSsrc);
+  params = voice_media_channel()->GetRtpSendParameters(kAudioSsrc);
   EXPECT_EQ(1U, params.encodings.size());
   EXPECT_EQ(new_bitrate_priority, params.encodings[0].bitrate_priority);
 
@@ -1240,9 +1207,9 @@
     ssrcs.push_back(kVideoSsrcSimulcast + i);
   cricket::StreamParams stream_params =
       cricket::CreateSimStreamParams("cname", ssrcs);
-  video_media_send_channel()->AddSendStream(stream_params);
+  video_media_channel()->AddSendStream(stream_params);
   video_rtp_sender_->SetMediaChannel(
-      video_media_send_channel()->AsVideoSendChannel());
+      video_media_channel()->AsVideoSendChannel());
   video_rtp_sender_->SetSsrc(kVideoSsrcSimulcast);
 
   params = video_rtp_sender_->GetParameters();
@@ -1281,9 +1248,9 @@
     ssrcs.push_back(kVideoSsrcSimulcast + i);
   cricket::StreamParams stream_params =
       cricket::CreateSimStreamParams("cname", ssrcs);
-  video_media_send_channel()->AddSendStream(stream_params);
+  video_media_channel()->AddSendStream(stream_params);
   video_rtp_sender_->SetMediaChannel(
-      video_media_send_channel()->AsVideoSendChannel());
+      video_media_channel()->AsVideoSendChannel());
   video_rtp_sender_->SetSsrc(kVideoSsrcSimulcast);
 
   params = video_rtp_sender_->GetParameters();
@@ -1325,9 +1292,9 @@
     ssrcs.push_back(kVideoSsrcSimulcast + i);
   cricket::StreamParams stream_params =
       cricket::StreamParams::CreateLegacy(kVideoSsrc);
-  video_media_send_channel()->AddSendStream(stream_params);
+  video_media_channel()->AddSendStream(stream_params);
   video_rtp_sender_->SetMediaChannel(
-      video_media_send_channel()->AsVideoSendChannel());
+      video_media_channel()->AsVideoSendChannel());
   EXPECT_DEATH(video_rtp_sender_->SetSsrc(kVideoSsrcSimulcast), "");
 }
 #endif
@@ -1558,7 +1525,7 @@
 TEST_F(RtpSenderReceiverTest, SetVideoMinMaxSendBitrate) {
   CreateVideoRtpSender();
 
-  EXPECT_EQ(-1, video_media_send_channel()->max_bps());
+  EXPECT_EQ(-1, video_media_channel()->max_bps());
   webrtc::RtpParameters params = video_rtp_sender_->GetParameters();
   EXPECT_EQ(1U, params.encodings.size());
   EXPECT_FALSE(params.encodings[0].min_bitrate_bps);
@@ -1574,13 +1541,13 @@
   EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
 
   // Verify that the video channel received the new parameters.
-  params = video_media_send_channel()->GetRtpSendParameters(kVideoSsrc);
+  params = video_media_channel()->GetRtpSendParameters(kVideoSsrc);
   EXPECT_EQ(1U, params.encodings.size());
   EXPECT_EQ(100, params.encodings[0].min_bitrate_bps);
   EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
 
   // Verify that the global bitrate limit has not been changed.
-  EXPECT_EQ(-1, video_media_send_channel()->max_bps());
+  EXPECT_EQ(-1, video_media_channel()->max_bps());
 
   DestroyVideoRtpSender();
 }
@@ -1598,8 +1565,7 @@
   EXPECT_TRUE(video_rtp_sender_->SetParameters(params).ok());
 
   // Verify that the video channel received the new parameters.
-  params =
-      video_media_send_channel()->GetRtpSendParameters(kVideoSsrcSimulcast);
+  params = video_media_channel()->GetRtpSendParameters(kVideoSsrcSimulcast);
   EXPECT_EQ(kVideoSimulcastLayerCount, params.encodings.size());
   EXPECT_EQ(100, params.encodings[0].min_bitrate_bps);
   EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
@@ -1624,7 +1590,7 @@
   EXPECT_EQ(1U, params.encodings.size());
   EXPECT_EQ(new_bitrate_priority, params.encodings[0].bitrate_priority);
 
-  params = video_media_send_channel()->GetRtpSendParameters(kVideoSsrc);
+  params = video_media_channel()->GetRtpSendParameters(kVideoSsrc);
   EXPECT_EQ(1U, params.encodings.size());
   EXPECT_EQ(new_bitrate_priority, params.encodings[0].bitrate_priority);
 
@@ -1678,23 +1644,23 @@
   video_track_->set_enabled(true);
 
   // `video_track_` is not screencast by default.
-  EXPECT_EQ(false, video_media_send_channel()->options().is_screencast);
+  EXPECT_EQ(false, video_media_channel()->options().is_screencast);
   // No content hint should be set by default.
   EXPECT_EQ(VideoTrackInterface::ContentHint::kNone,
             video_track_->content_hint());
   // Setting detailed should turn a non-screencast source into screencast mode.
   video_track_->set_content_hint(VideoTrackInterface::ContentHint::kDetailed);
-  EXPECT_EQ(true, video_media_send_channel()->options().is_screencast);
+  EXPECT_EQ(true, video_media_channel()->options().is_screencast);
   // Removing the content hint should turn the track back into non-screencast
   // mode.
   video_track_->set_content_hint(VideoTrackInterface::ContentHint::kNone);
-  EXPECT_EQ(false, video_media_send_channel()->options().is_screencast);
+  EXPECT_EQ(false, video_media_channel()->options().is_screencast);
   // Setting fluid should remain in non-screencast mode (its default).
   video_track_->set_content_hint(VideoTrackInterface::ContentHint::kFluid);
-  EXPECT_EQ(false, video_media_send_channel()->options().is_screencast);
+  EXPECT_EQ(false, video_media_channel()->options().is_screencast);
   // Setting text should have the same effect as Detailed
   video_track_->set_content_hint(VideoTrackInterface::ContentHint::kText);
-  EXPECT_EQ(true, video_media_send_channel()->options().is_screencast);
+  EXPECT_EQ(true, video_media_channel()->options().is_screencast);
 
   DestroyVideoRtpSender();
 }
@@ -1708,22 +1674,22 @@
   video_track_->set_enabled(true);
 
   // `video_track_` with a screencast source should be screencast by default.
-  EXPECT_EQ(true, video_media_send_channel()->options().is_screencast);
+  EXPECT_EQ(true, video_media_channel()->options().is_screencast);
   // No content hint should be set by default.
   EXPECT_EQ(VideoTrackInterface::ContentHint::kNone,
             video_track_->content_hint());
   // Setting fluid should turn a screencast source into non-screencast mode.
   video_track_->set_content_hint(VideoTrackInterface::ContentHint::kFluid);
-  EXPECT_EQ(false, video_media_send_channel()->options().is_screencast);
+  EXPECT_EQ(false, video_media_channel()->options().is_screencast);
   // Removing the content hint should turn the track back into screencast mode.
   video_track_->set_content_hint(VideoTrackInterface::ContentHint::kNone);
-  EXPECT_EQ(true, video_media_send_channel()->options().is_screencast);
+  EXPECT_EQ(true, video_media_channel()->options().is_screencast);
   // Setting detailed should still remain in screencast mode (its default).
   video_track_->set_content_hint(VideoTrackInterface::ContentHint::kDetailed);
-  EXPECT_EQ(true, video_media_send_channel()->options().is_screencast);
+  EXPECT_EQ(true, video_media_channel()->options().is_screencast);
   // Setting text should have the same effect as Detailed
   video_track_->set_content_hint(VideoTrackInterface::ContentHint::kText);
-  EXPECT_EQ(true, video_media_send_channel()->options().is_screencast);
+  EXPECT_EQ(true, video_media_channel()->options().is_screencast);
 
   DestroyVideoRtpSender();
 }
@@ -1744,21 +1710,21 @@
   EXPECT_CALL(*set_streams_observer, OnSetStreams());
   video_rtp_sender_->SetStreams({local_stream_->id()});
   video_rtp_sender_->SetMediaChannel(
-      video_media_send_channel()->AsVideoSendChannel());
+      video_media_channel()->AsVideoSendChannel());
   video_track_->set_enabled(true);
 
   // Sender is not ready to send (no SSRC) so no option should have been set.
-  EXPECT_EQ(absl::nullopt, video_media_send_channel()->options().is_screencast);
+  EXPECT_EQ(absl::nullopt, video_media_channel()->options().is_screencast);
 
   // Verify that the content hint is accounted for when video_rtp_sender_ does
   // get enabled.
   video_rtp_sender_->SetSsrc(kVideoSsrc);
-  EXPECT_EQ(true, video_media_send_channel()->options().is_screencast);
+  EXPECT_EQ(true, video_media_channel()->options().is_screencast);
 
   // And removing the hint should go back to false (to verify that false was
   // default correctly).
   video_track_->set_content_hint(VideoTrackInterface::ContentHint::kNone);
-  EXPECT_EQ(false, video_media_send_channel()->options().is_screencast);
+  EXPECT_EQ(false, video_media_channel()->options().is_screencast);
 
   DestroyVideoRtpSender();
 }
@@ -1797,22 +1763,22 @@
   auto dtmf_sender = audio_rtp_sender_->GetDtmfSender();
   ASSERT_NE(nullptr, dtmf_sender);
 
-  EXPECT_EQ(0U, voice_media_send_channel()->dtmf_info_queue().size());
+  EXPECT_EQ(0U, voice_media_channel()->dtmf_info_queue().size());
 
   // Insert DTMF
   const int expected_duration = 90;
   dtmf_sender->InsertDtmf("012", expected_duration, 100);
 
   // Verify
-  ASSERT_EQ_WAIT(3U, voice_media_send_channel()->dtmf_info_queue().size(),
+  ASSERT_EQ_WAIT(3U, voice_media_channel()->dtmf_info_queue().size(),
                  kDefaultTimeout);
   const uint32_t send_ssrc =
-      voice_media_send_channel()->send_streams()[0].first_ssrc();
-  EXPECT_TRUE(CompareDtmfInfo(voice_media_send_channel()->dtmf_info_queue()[0],
+      voice_media_channel()->send_streams()[0].first_ssrc();
+  EXPECT_TRUE(CompareDtmfInfo(voice_media_channel()->dtmf_info_queue()[0],
                               send_ssrc, 0, expected_duration));
-  EXPECT_TRUE(CompareDtmfInfo(voice_media_send_channel()->dtmf_info_queue()[1],
+  EXPECT_TRUE(CompareDtmfInfo(voice_media_channel()->dtmf_info_queue()[1],
                               send_ssrc, 1, expected_duration));
-  EXPECT_TRUE(CompareDtmfInfo(voice_media_send_channel()->dtmf_info_queue()[2],
+  EXPECT_TRUE(CompareDtmfInfo(voice_media_channel()->dtmf_info_queue()[2],
                               send_ssrc, 2, expected_duration));
 }
 
diff --git a/pc/test/mock_voice_media_channel.h b/pc/test/mock_voice_media_channel.h
index feab3c0..1523c6f 100644
--- a/pc/test/mock_voice_media_channel.h
+++ b/pc/test/mock_voice_media_channel.h
@@ -28,9 +28,8 @@
 namespace cricket {
 class MockVoiceMediaChannel : public VoiceMediaChannel {
  public:
-  MockVoiceMediaChannel(MediaChannel::Role role,
-                        webrtc::TaskQueueBase* network_thread)
-      : VoiceMediaChannel(role, network_thread) {}
+  explicit MockVoiceMediaChannel(webrtc::TaskQueueBase* network_thread)
+      : VoiceMediaChannel(MediaChannel::Role::kBoth, network_thread) {}
 
   MOCK_METHOD(void,
               SetInterface,