diff --git a/api/media_transport_interface.cc b/api/media_transport_interface.cc
index 0dfec76..de04e19 100644
--- a/api/media_transport_interface.cc
+++ b/api/media_transport_interface.cc
@@ -54,18 +54,6 @@
 MediaTransportInterface::MediaTransportInterface() = default;
 MediaTransportInterface::~MediaTransportInterface() = default;
 
-std::unique_ptr<MediaTransportAudioSender>
-MediaTransportInterface::CreateAudioSender(uint64_t channel_id) {
-  return nullptr;
-}
-
-std::unique_ptr<MediaTransportAudioReceiver>
-MediaTransportInterface::CreateAudioReceiver(
-    uint64_t channel_id,
-    MediaTransportAudioSinkInterface* sink) {
-  return nullptr;
-}
-
 void MediaTransportInterface::SetKeyFrameRequestCallback(
     MediaTransportKeyFrameRequestCallback* callback) {}
 
diff --git a/api/media_transport_interface.h b/api/media_transport_interface.h
index e753ddc..2f5431f 100644
--- a/api/media_transport_interface.h
+++ b/api/media_transport_interface.h
@@ -187,28 +187,10 @@
   MediaTransportInterface();
   virtual ~MediaTransportInterface();
 
-  // Creates an object representing the send end-point of a audio stream using
-  // this transport.
-  // TODO(bugs.webrtc.org/9719): Make pure virtual after downstream
-  // implementations are updated.
-  virtual std::unique_ptr<MediaTransportAudioSender> CreateAudioSender(
-      uint64_t channel_id);
-
-  // Creates an object representing the receive end-point of a audio stream
-  // using this transport.
-  // TODO(bugs.webrtc.org/9719): Make pure virtual after downstream
-  // implementations are updated.
-  virtual std::unique_ptr<MediaTransportAudioReceiver> CreateAudioReceiver(
-      uint64_t channel_id,
-      // TODO(nisse): Add Rtt observer, or route that via Call to the receive
-      // stream instead?
-      MediaTransportAudioSinkInterface* sink);
-
   // Start asynchronous send of audio frame. The status returned by this method
   // only pertains to the synchronous operations (e.g.
   // serialization/packetization), not to the asynchronous operation.
-  // TODO(nisse): Deprecated, should be deleted when implementations are updated
-  // to use CreateAudioSender.
+
   virtual RTCError SendAudioFrame(uint64_t channel_id,
                                   MediaTransportEncodedAudioFrame frame) = 0;
 
diff --git a/api/test/loopback_media_transport.cc b/api/test/loopback_media_transport.cc
index fde732e..c466170 100644
--- a/api/test/loopback_media_transport.cc
+++ b/api/test/loopback_media_transport.cc
@@ -109,7 +109,6 @@
 
 MediaTransportPair::LoopbackMediaTransport::~LoopbackMediaTransport() {
   rtc::CritScope lock(&sink_lock_);
-  RTC_CHECK(audio_sinks_.empty());
   RTC_CHECK(audio_sink_ == nullptr);
   RTC_CHECK(video_sink_ == nullptr);
   RTC_CHECK(data_sink_ == nullptr);
@@ -117,58 +116,6 @@
   RTC_CHECK(rtt_observers_.empty());
 }
 
-class MediaTransportPair::LoopbackMediaTransport::AudioSender
-    : public MediaTransportAudioSender {
- public:
-  AudioSender(LoopbackMediaTransport* transport, uint64_t channel_id)
-      : transport_(transport), channel_id_(channel_id) {}
-  void SendAudioFrame(MediaTransportEncodedAudioFrame frame) override {
-    transport_->SendAudioFrame(channel_id_, std::move(frame));
-  }
-
- private:
-  LoopbackMediaTransport* transport_;
-  uint64_t channel_id_;
-};
-
-class MediaTransportPair::LoopbackMediaTransport::AudioReceiver
-    : public MediaTransportAudioReceiver {
- public:
-  AudioReceiver(LoopbackMediaTransport* transport, uint64_t channel_id)
-      : transport_(transport), channel_id_(channel_id) {}
-  ~AudioReceiver() override {
-    transport_->UnregisterAudioReceiver(channel_id_);
-  }
-
- private:
-  LoopbackMediaTransport* transport_;
-  uint64_t channel_id_;
-};
-
-std::unique_ptr<MediaTransportAudioSender>
-MediaTransportPair::LoopbackMediaTransport::CreateAudioSender(
-    uint64_t channel_id) {
-  return absl::make_unique<AudioSender>(this, channel_id);
-}
-
-std::unique_ptr<MediaTransportAudioReceiver>
-MediaTransportPair::LoopbackMediaTransport::CreateAudioReceiver(
-    uint64_t channel_id,
-    MediaTransportAudioSinkInterface* sink) {
-  rtc::CritScope cs(&sink_lock_);
-  auto res = audio_sinks_.emplace(channel_id, sink);
-  RTC_DCHECK(res.second);
-  return absl::make_unique<AudioReceiver>(this, channel_id);
-}
-
-void MediaTransportPair::LoopbackMediaTransport::UnregisterAudioReceiver(
-    uint64_t channel_id) {
-  rtc::CritScope cs(&sink_lock_);
-  auto it = audio_sinks_.find(channel_id);
-  RTC_DCHECK(it != audio_sinks_.end());
-  audio_sinks_.erase(it);
-}
-
 RTCError MediaTransportPair::LoopbackMediaTransport::SendAudioFrame(
     uint64_t channel_id,
     MediaTransportEncodedAudioFrame frame) {
@@ -370,10 +317,7 @@
     MediaTransportEncodedAudioFrame frame) {
   {
     rtc::CritScope lock(&sink_lock_);
-    const auto it = audio_sinks_.find(channel_id);
-    if (it != audio_sinks_.end()) {
-      it->second->OnData(frame);
-    } else if (audio_sink_) {
+    if (audio_sink_) {
       audio_sink_->OnData(channel_id, frame);
     }
   }
diff --git a/api/test/loopback_media_transport.h b/api/test/loopback_media_transport.h
index d2c503b..bcfdb63 100644
--- a/api/test/loopback_media_transport.h
+++ b/api/test/loopback_media_transport.h
@@ -11,7 +11,6 @@
 #ifndef API_TEST_LOOPBACK_MEDIA_TRANSPORT_H_
 #define API_TEST_LOOPBACK_MEDIA_TRANSPORT_H_
 
-#include <map>
 #include <memory>
 #include <utility>
 #include <vector>
@@ -86,13 +85,6 @@
 
     ~LoopbackMediaTransport() override;
 
-    std::unique_ptr<MediaTransportAudioSender> CreateAudioSender(
-        uint64_t channel_id) override;
-
-    std::unique_ptr<MediaTransportAudioReceiver> CreateAudioReceiver(
-        uint64_t channel_id,
-        MediaTransportAudioSinkInterface* sink) override;
-
     RTCError SendAudioFrame(uint64_t channel_id,
                             MediaTransportEncodedAudioFrame frame) override;
 
@@ -139,9 +131,6 @@
         const MediaTransportAllocatedBitrateLimits& limits) override;
 
    private:
-    class AudioReceiver;
-    class AudioSender;
-
     void OnData(uint64_t channel_id, MediaTransportEncodedAudioFrame frame);
 
     void OnData(uint64_t channel_id, MediaTransportEncodedVideoFrame frame);
@@ -155,17 +144,11 @@
     void OnRemoteCloseChannel(int channel_id);
 
     void OnStateChanged() RTC_RUN_ON(thread_);
-    void UnregisterAudioReceiver(uint64_t channel_id);
 
     rtc::Thread* const thread_;
     rtc::CriticalSection sink_lock_;
     rtc::CriticalSection stats_lock_;
 
-    std::map<uint64_t, MediaTransportAudioSinkInterface*> audio_sinks_
-        RTC_GUARDED_BY(sink_lock_);
-
-    // TODO(bugs.webrtc.org/9719): Delete when everything is converted to
-    // CreateAudioReceiver.
     MediaTransportAudioSinkInterface* audio_sink_ RTC_GUARDED_BY(sink_lock_) =
         nullptr;
     MediaTransportVideoSinkInterface* video_sink_ RTC_GUARDED_BY(sink_lock_) =
diff --git a/api/test/loopback_media_transport_unittest.cc b/api/test/loopback_media_transport_unittest.cc
index 8fe432d..b827405 100644
--- a/api/test/loopback_media_transport_unittest.cc
+++ b/api/test/loopback_media_transport_unittest.cc
@@ -22,8 +22,6 @@
 class MockMediaTransportAudioSinkInterface
     : public MediaTransportAudioSinkInterface {
  public:
-  MOCK_METHOD1(OnData, void(MediaTransportEncodedAudioFrame));
-  // TODO(nisse): Deprecated version, delete.
   MOCK_METHOD2(OnData, void(uint64_t, MediaTransportEncodedAudioFrame));
 };
 
diff --git a/api/transport/media/audio_transport.cc b/api/transport/media/audio_transport.cc
index 5dae4d3..7285ad4 100644
--- a/api/transport/media/audio_transport.cc
+++ b/api/transport/media/audio_transport.cc
@@ -51,10 +51,4 @@
 MediaTransportEncodedAudioFrame::MediaTransportEncodedAudioFrame(
     MediaTransportEncodedAudioFrame&&) = default;
 
-void MediaTransportAudioSinkInterface::OnData(
-    uint64_t channel_id,
-    MediaTransportEncodedAudioFrame frame) {
-  OnData(frame);
-}
-
 }  // namespace webrtc
diff --git a/api/transport/media/audio_transport.h b/api/transport/media/audio_transport.h
index d3afbf3..dcbdcd7 100644
--- a/api/transport/media/audio_transport.h
+++ b/api/transport/media/audio_transport.h
@@ -111,29 +111,9 @@
  public:
   virtual ~MediaTransportAudioSinkInterface() = default;
 
-  // Called when new encoded audio frame is received, and no receiver is
-  // registered. Deprecated.
-  virtual void OnData(uint64_t channel_id,
-                      MediaTransportEncodedAudioFrame frame);
-
   // Called when new encoded audio frame is received.
-  // TODO(bugs.webrtc.org/9719): Make pure virtual after downstream
-  // implementations are updated.
-  virtual void OnData(MediaTransportEncodedAudioFrame frame) {}
-};
-
-class MediaTransportAudioSender {
- public:
-  virtual ~MediaTransportAudioSender() = default;
-
-  virtual void SendAudioFrame(MediaTransportEncodedAudioFrame frame) = 0;
-};
-
-// Similar to RtpStreamReceiverInterface, only owns the association with the
-// demuxer.
-class MediaTransportAudioReceiver {
- public:
-  virtual ~MediaTransportAudioReceiver() = default;
+  virtual void OnData(uint64_t channel_id,
+                      MediaTransportEncodedAudioFrame frame) = 0;
 };
 
 }  // namespace webrtc
diff --git a/audio/channel_receive.cc b/audio/channel_receive.cc
index 40dc2c1..0e218ed 100644
--- a/audio/channel_receive.cc
+++ b/audio/channel_receive.cc
@@ -58,14 +58,15 @@
 constexpr int kVoiceEngineMaxMinPlayoutDelayMs = 10000;
 
 RTPHeader CreateRTPHeaderForMediaTransportFrame(
-    const MediaTransportEncodedAudioFrame& frame) {
+    const MediaTransportEncodedAudioFrame& frame,
+    uint64_t channel_id) {
   webrtc::RTPHeader rtp_header;
   rtp_header.payloadType = frame.payload_type();
   rtp_header.payload_type_frequency = frame.sampling_rate_hz();
   rtp_header.timestamp = frame.starting_sample_index();
   rtp_header.sequenceNumber = frame.sequence_number();
 
-  // Note: SSRC is no longer used by NetEq, so not set.
+  rtp_header.ssrc = static_cast<uint32_t>(channel_id);
 
   // The rest are initialized by the RTPHeader constructor.
   return rtp_header;
@@ -166,12 +167,8 @@
   int64_t GetRTT() const;
 
   // MediaTransportAudioSinkInterface override;
-  void OnData(MediaTransportEncodedAudioFrame frame) override;
-  // TODO(nisse): Deprecated variant. Delete.
-  void OnData(uint64_t /* channel_id */,
-              MediaTransportEncodedAudioFrame frame) override {
-    OnData(std::move(frame));
-  }
+  void OnData(uint64_t channel_id,
+              MediaTransportEncodedAudioFrame frame) override;
 
   int32_t OnReceivedPayloadData(const uint8_t* payloadData,
                                 size_t payloadSize,
@@ -296,7 +293,8 @@
 }
 
 // MediaTransportAudioSinkInterface override.
-void ChannelReceive::OnData(MediaTransportEncodedAudioFrame frame) {
+void ChannelReceive::OnData(uint64_t channel_id,
+                            MediaTransportEncodedAudioFrame frame) {
   RTC_CHECK(media_transport_);
 
   if (!Playing()) {
@@ -308,7 +306,7 @@
   // Send encoded audio frame to Decoder / NetEq.
   if (audio_coding_->IncomingPacket(
           frame.encoded_data().data(), frame.encoded_data().size(),
-          CreateRTPHeaderForMediaTransportFrame(frame)) != 0) {
+          CreateRTPHeaderForMediaTransportFrame(frame, channel_id)) != 0) {
     RTC_DLOG(LS_ERROR) << "ChannelReceive::OnData: unable to "
                           "push data to the ACM";
   }
