diff --git a/video/BUILD.gn b/video/BUILD.gn
index d9667c6..4da1e23 100644
--- a/video/BUILD.gn
+++ b/video/BUILD.gn
@@ -14,8 +14,8 @@
     "buffered_frame_decryptor.h",
     "call_stats.cc",
     "call_stats.h",
-    "encoder_rtcp_feedback.cc",
-    "encoder_rtcp_feedback.h",
+    "encoder_key_frame_callback.cc",
+    "encoder_key_frame_callback.h",
     "quality_threshold.cc",
     "quality_threshold.h",
     "receive_statistics_proxy.cc",
@@ -454,7 +454,7 @@
       "buffered_frame_decryptor_unittest.cc",
       "call_stats_unittest.cc",
       "cpu_scaling_tests.cc",
-      "encoder_rtcp_feedback_unittest.cc",
+      "encoder_key_frame_callback_unittest.cc",
       "end_to_end_tests/bandwidth_tests.cc",
       "end_to_end_tests/call_operation_tests.cc",
       "end_to_end_tests/codec_tests.cc",
diff --git a/video/encoder_rtcp_feedback.cc b/video/encoder_key_frame_callback.cc
similarity index 65%
rename from video/encoder_rtcp_feedback.cc
rename to video/encoder_key_frame_callback.cc
index 021b11f..447a3af 100644
--- a/video/encoder_rtcp_feedback.cc
+++ b/video/encoder_key_frame_callback.cc
@@ -8,18 +8,18 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
-#include "video/encoder_rtcp_feedback.h"
+#include "video/encoder_key_frame_callback.h"
 
-#include "api/video/video_stream_encoder_interface.h"
 #include "rtc_base/checks.h"
 
 static const int kMinKeyFrameRequestIntervalMs = 300;
 
 namespace webrtc {
 
-EncoderRtcpFeedback::EncoderRtcpFeedback(Clock* clock,
-                                         const std::vector<uint32_t>& ssrcs,
-                                         VideoStreamEncoderInterface* encoder)
+EncoderKeyFrameCallback::EncoderKeyFrameCallback(
+    Clock* clock,
+    const std::vector<uint32_t>& ssrcs,
+    VideoStreamEncoderInterface* encoder)
     : clock_(clock),
       ssrcs_(ssrcs),
       video_stream_encoder_(encoder),
@@ -27,7 +27,7 @@
   RTC_DCHECK(!ssrcs.empty());
 }
 
-bool EncoderRtcpFeedback::HasSsrc(uint32_t ssrc) {
+bool EncoderKeyFrameCallback::HasSsrc(uint32_t ssrc) {
   for (uint32_t registered_ssrc : ssrcs_) {
     if (registered_ssrc == ssrc) {
       return true;
@@ -36,7 +36,7 @@
   return false;
 }
 
-void EncoderRtcpFeedback::OnReceivedIntraFrameRequest(uint32_t ssrc) {
+void EncoderKeyFrameCallback::OnReceivedIntraFrameRequest(uint32_t ssrc) {
   RTC_DCHECK(HasSsrc(ssrc));
   {
     int64_t now_ms = clock_->TimeInMilliseconds();
@@ -51,4 +51,14 @@
   video_stream_encoder_->SendKeyFrame();
 }
 
+void EncoderKeyFrameCallback::OnKeyFrameRequested(uint64_t channel_id) {
+  if (channel_id != ssrcs_[0]) {
+    RTC_LOG(LS_INFO) << "Key frame request on unknown channel id " << channel_id
+                     << " expected " << ssrcs_[0];
+    return;
+  }
+
+  video_stream_encoder_->SendKeyFrame();
+}
+
 }  // namespace webrtc
diff --git a/video/encoder_key_frame_callback.h b/video/encoder_key_frame_callback.h
new file mode 100644
index 0000000..4e0ac56
--- /dev/null
+++ b/video/encoder_key_frame_callback.h
@@ -0,0 +1,53 @@
+/*
+ *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+#ifndef VIDEO_ENCODER_KEY_FRAME_CALLBACK_H_
+#define VIDEO_ENCODER_KEY_FRAME_CALLBACK_H_
+
+#include <vector>
+
+#include "api/media_transport_interface.h"
+#include "api/video/video_stream_encoder_interface.h"
+#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
+#include "rtc_base/critical_section.h"
+#include "system_wrappers/include/clock.h"
+
+namespace webrtc {
+
+class VideoStreamEncoderInterface;
+
+// This class receives keyframe requests from either Mediatransport or the
+// RtpRtcp module.
+// TODO(bugs.webrtc.org/9719): Should be eliminated when RtpMediaTransport is
+// implemented.
+class EncoderKeyFrameCallback : public RtcpIntraFrameObserver,
+                                public MediaTransportKeyFrameRequestCallback {
+ public:
+  EncoderKeyFrameCallback(Clock* clock,
+                          const std::vector<uint32_t>& ssrcs,
+                          VideoStreamEncoderInterface* encoder);
+  void OnReceivedIntraFrameRequest(uint32_t ssrc) override;
+
+  // Implements MediaTransportKeyFrameRequestCallback
+  void OnKeyFrameRequested(uint64_t channel_id) override;
+
+ private:
+  bool HasSsrc(uint32_t ssrc);
+
+  Clock* const clock_;
+  const std::vector<uint32_t> ssrcs_;
+  VideoStreamEncoderInterface* const video_stream_encoder_;
+
+  rtc::CriticalSection crit_;
+  int64_t time_last_intra_request_ms_ RTC_GUARDED_BY(crit_);
+};
+
+}  // namespace webrtc
+
+#endif  // VIDEO_ENCODER_KEY_FRAME_CALLBACK_H_
diff --git a/video/encoder_rtcp_feedback_unittest.cc b/video/encoder_key_frame_callback_unittest.cc
similarity index 64%
rename from video/encoder_rtcp_feedback_unittest.cc
rename to video/encoder_key_frame_callback_unittest.cc
index 1ce387b..2491fb8 100644
--- a/video/encoder_rtcp_feedback_unittest.cc
+++ b/video/encoder_key_frame_callback_unittest.cc
@@ -8,7 +8,7 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
-#include "video/encoder_rtcp_feedback.h"
+#include "video/encoder_key_frame_callback.h"
 
 #include <memory>
 
@@ -25,7 +25,7 @@
   VieKeyRequestTest()
       : simulated_clock_(123456789),
         encoder_(),
-        encoder_rtcp_feedback_(
+        encoder_key_frame_callback_(
             &simulated_clock_,
             std::vector<uint32_t>(1, VieKeyRequestTest::kSsrc),
             &encoder_) {}
@@ -35,26 +35,31 @@
 
   SimulatedClock simulated_clock_;
   testing::StrictMock<MockVideoStreamEncoder> encoder_;
-  EncoderRtcpFeedback encoder_rtcp_feedback_;
+  EncoderKeyFrameCallback encoder_key_frame_callback_;
 };
 
 TEST_F(VieKeyRequestTest, CreateAndTriggerRequests) {
   EXPECT_CALL(encoder_, SendKeyFrame()).Times(1);
-  encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
+  encoder_key_frame_callback_.OnReceivedIntraFrameRequest(kSsrc);
 }
 
 TEST_F(VieKeyRequestTest, TooManyOnReceivedIntraFrameRequest) {
   EXPECT_CALL(encoder_, SendKeyFrame()).Times(1);
-  encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
-  encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
+  encoder_key_frame_callback_.OnReceivedIntraFrameRequest(kSsrc);
+  encoder_key_frame_callback_.OnReceivedIntraFrameRequest(kSsrc);
   simulated_clock_.AdvanceTimeMilliseconds(10);
-  encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
+  encoder_key_frame_callback_.OnReceivedIntraFrameRequest(kSsrc);
 
   EXPECT_CALL(encoder_, SendKeyFrame()).Times(1);
   simulated_clock_.AdvanceTimeMilliseconds(300);
-  encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
-  encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
-  encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
+  encoder_key_frame_callback_.OnReceivedIntraFrameRequest(kSsrc);
+  encoder_key_frame_callback_.OnReceivedIntraFrameRequest(kSsrc);
+  encoder_key_frame_callback_.OnReceivedIntraFrameRequest(kSsrc);
+}
+
+TEST_F(VieKeyRequestTest, TriggerRequestFromMediaTransport) {
+  EXPECT_CALL(encoder_, SendKeyFrame()).Times(1);
+  encoder_key_frame_callback_.OnKeyFrameRequested(kSsrc);
 }
 
 }  // namespace webrtc
diff --git a/video/encoder_rtcp_feedback.h b/video/encoder_rtcp_feedback.h
deleted file mode 100644
index bdae914..0000000
--- a/video/encoder_rtcp_feedback.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-#ifndef VIDEO_ENCODER_RTCP_FEEDBACK_H_
-#define VIDEO_ENCODER_RTCP_FEEDBACK_H_
-
-#include <vector>
-
-#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
-#include "rtc_base/critical_section.h"
-#include "system_wrappers/include/clock.h"
-
-namespace webrtc {
-
-class VideoStreamEncoderInterface;
-
-class EncoderRtcpFeedback : public RtcpIntraFrameObserver {
- public:
-  EncoderRtcpFeedback(Clock* clock,
-                      const std::vector<uint32_t>& ssrcs,
-                      VideoStreamEncoderInterface* encoder);
-  void OnReceivedIntraFrameRequest(uint32_t ssrc) override;
-
- private:
-  bool HasSsrc(uint32_t ssrc);
-
-  Clock* const clock_;
-  const std::vector<uint32_t> ssrcs_;
-  VideoStreamEncoderInterface* const video_stream_encoder_;
-
-  rtc::CriticalSection crit_;
-  int64_t time_last_intra_request_ms_ RTC_GUARDED_BY(crit_);
-};
-
-}  // namespace webrtc
-
-#endif  // VIDEO_ENCODER_RTCP_FEEDBACK_H_
diff --git a/video/video_send_stream_impl.cc b/video/video_send_stream_impl.cc
index 2a8e646..5635550 100644
--- a/video/video_send_stream_impl.cc
+++ b/video/video_send_stream_impl.cc
@@ -133,7 +133,7 @@
 }
 
 RtpSenderObservers CreateObservers(CallStats* call_stats,
-                                   EncoderRtcpFeedback* encoder_feedback,
+                                   EncoderKeyFrameCallback* encoder_feedback,
                                    SendStatisticsProxy* stats_proxy,
                                    SendDelayStats* send_delay_stats) {
   RtpSenderObservers observers;
@@ -242,6 +242,7 @@
     // The configured ssrc is interpreted as a channel id, so there must be
     // exactly one.
     RTC_DCHECK_EQ(config_->rtp.ssrcs.size(), 1);
+    media_transport_->SetKeyFrameRequestCallback(&encoder_feedback_);
   } else {
     RTC_DCHECK(!config_->rtp.ssrcs.empty());
   }
@@ -324,6 +325,9 @@
       << "VideoSendStreamImpl::Stop not called";
   RTC_LOG(LS_INFO) << "~VideoSendStreamInternal: " << config_->ToString();
   transport_->DestroyRtpVideoSender(rtp_video_sender_);
+  if (media_transport_) {
+    media_transport_->SetKeyFrameRequestCallback(nullptr);
+  }
 }
 
 void VideoSendStreamImpl::RegisterProcessThread(
diff --git a/video/video_send_stream_impl.h b/video/video_send_stream_impl.h
index a453228..050da3e 100644
--- a/video/video_send_stream_impl.h
+++ b/video/video_send_stream_impl.h
@@ -40,7 +40,7 @@
 #include "rtc_base/thread_annotations.h"
 #include "rtc_base/weak_ptr.h"
 #include "video/call_stats.h"
-#include "video/encoder_rtcp_feedback.h"
+#include "video/encoder_key_frame_callback.h"
 #include "video/send_delay_stats.h"
 #include "video/send_statistics_proxy.h"
 #include "video/video_send_stream.h"
@@ -166,7 +166,7 @@
   bool has_packet_feedback_;
 
   VideoStreamEncoderInterface* const video_stream_encoder_;
-  EncoderRtcpFeedback encoder_feedback_;
+  EncoderKeyFrameCallback encoder_feedback_;
 
   RtcpBandwidthObserver* const bandwidth_observer_;
   RtpVideoSenderInterface* const rtp_video_sender_;
