diff --git a/api/ortc/ortcfactoryinterface.h b/api/ortc/ortcfactoryinterface.h
index d99fcd4..ea25c8a 100644
--- a/api/ortc/ortcfactoryinterface.h
+++ b/api/ortc/ortcfactoryinterface.h
@@ -215,20 +215,6 @@
     return CreateAudioSource(cricket::AudioOptions());
   }
 
-  // Creates a video source object wrapping and taking ownership of |capturer|.
-  //
-  // |constraints| can be used for selection of resolution and frame rate, and
-  // may be null if no constraints are desired.
-  virtual rtc::scoped_refptr<VideoTrackSourceInterface> CreateVideoSource(
-      std::unique_ptr<cricket::VideoCapturer> capturer,
-      const MediaConstraintsInterface* constraints) = 0;
-
-  // Version of the above method that omits |constraints|.
-  rtc::scoped_refptr<VideoTrackSourceInterface> CreateVideoSource(
-      std::unique_ptr<cricket::VideoCapturer> capturer) {
-    return CreateVideoSource(std::move(capturer), nullptr);
-  }
-
   // Creates a new local video track wrapping |source|. The same |source| can
   // be used in several tracks.
   virtual rtc::scoped_refptr<VideoTrackInterface> CreateVideoTrack(
diff --git a/ortc/BUILD.gn b/ortc/BUILD.gn
index bf66c44..d2c8cb2 100644
--- a/ortc/BUILD.gn
+++ b/ortc/BUILD.gn
@@ -87,6 +87,7 @@
       "../p2p:p2p_test_utils",
       "../p2p:rtc_p2p",
       "../pc:pc_test_utils",
+      "../pc:peerconnection",
       "../rtc_base:rtc_base",
       "../rtc_base:rtc_base_approved",
       "../rtc_base:rtc_base_tests_main",
diff --git a/ortc/ortcfactory.cc b/ortc/ortcfactory.cc
index f891561..506fc86 100644
--- a/ortc/ortcfactory.cc
+++ b/ortc/ortcfactory.cc
@@ -32,7 +32,6 @@
 #include "pc/audiotrack.h"
 #include "pc/channelmanager.h"
 #include "pc/localaudiosource.h"
-#include "pc/videocapturertracksource.h"
 #include "pc/videotrack.h"
 #include "rtc_base/asyncpacketsocket.h"
 #include "rtc_base/bind.h"
@@ -114,10 +113,6 @@
 PROXY_METHOD1(rtc::scoped_refptr<AudioSourceInterface>,
               CreateAudioSource,
               const cricket::AudioOptions&)
-PROXY_METHOD2(rtc::scoped_refptr<VideoTrackSourceInterface>,
-              CreateVideoSource,
-              std::unique_ptr<cricket::VideoCapturer>,
-              const MediaConstraintsInterface*)
 PROXY_METHOD2(rtc::scoped_refptr<VideoTrackInterface>,
               CreateVideoTrack,
               const std::string&,
@@ -480,17 +475,6 @@
       LocalAudioSource::Create(&options));
 }
 
-rtc::scoped_refptr<VideoTrackSourceInterface> OrtcFactory::CreateVideoSource(
-    std::unique_ptr<cricket::VideoCapturer> capturer,
-    const MediaConstraintsInterface* constraints) {
-  RTC_DCHECK_RUN_ON(signaling_thread_);
-  rtc::scoped_refptr<VideoTrackSourceInterface> source(
-      VideoCapturerTrackSource::Create(
-          worker_thread_.get(), std::move(capturer), constraints, false));
-  return VideoTrackSourceProxy::Create(signaling_thread_, worker_thread_.get(),
-                                       source);
-}
-
 rtc::scoped_refptr<VideoTrackInterface> OrtcFactory::CreateVideoTrack(
     const std::string& id,
     VideoTrackSourceInterface* source) {
diff --git a/ortc/ortcfactory.h b/ortc/ortcfactory.h
index 750fcf7..d72f612 100644
--- a/ortc/ortcfactory.h
+++ b/ortc/ortcfactory.h
@@ -81,10 +81,6 @@
   rtc::scoped_refptr<AudioSourceInterface> CreateAudioSource(
       const cricket::AudioOptions& options) override;
 
-  rtc::scoped_refptr<VideoTrackSourceInterface> CreateVideoSource(
-      std::unique_ptr<cricket::VideoCapturer> capturer,
-      const MediaConstraintsInterface* constraints) override;
-
   rtc::scoped_refptr<VideoTrackInterface> CreateVideoTrack(
       const std::string& id,
       VideoTrackSourceInterface* source) override;
diff --git a/ortc/ortcfactory_integrationtest.cc b/ortc/ortcfactory_integrationtest.cc
index def0e08..d556fb1 100644
--- a/ortc/ortcfactory_integrationtest.cc
+++ b/ortc/ortcfactory_integrationtest.cc
@@ -17,8 +17,9 @@
 #include "ortc/testrtpparameters.h"
 #include "p2p/base/udptransport.h"
 #include "pc/test/fakeaudiocapturemodule.h"
-#include "pc/test/fakeperiodicvideocapturer.h"
+#include "pc/test/fakeperiodicvideosource.h"
 #include "pc/test/fakevideotrackrenderer.h"
+#include "pc/videotracksource.h"
 #include "rtc_base/criticalsection.h"
 #include "rtc_base/fakenetwork.h"
 #include "rtc_base/gunit.h"
@@ -28,6 +29,7 @@
 
 const int kDefaultTimeout = 10000;    // 10 seconds.
 const int kReceivingDuration = 1000;  // 1 second.
+
 // Default number of audio/video frames to wait for before considering a test a
 // success.
 const int kDefaultNumFrames = 3;
@@ -217,18 +219,18 @@
     return ortc_factory->CreateAudioTrack(id, source);
   }
 
-  // Stores created capturer in |fake_video_capturers_|.
+  // Stores created video source in |fake_video_sources_|.
   rtc::scoped_refptr<webrtc::VideoTrackInterface>
-  CreateLocalVideoTrackAndFakeCapturer(const std::string& id,
-                                       OrtcFactoryInterface* ortc_factory) {
-    webrtc::FakePeriodicVideoCapturer* fake_capturer =
-        new webrtc::FakePeriodicVideoCapturer();
-    fake_video_capturers_.push_back(fake_capturer);
-    rtc::scoped_refptr<webrtc::VideoTrackSourceInterface> source =
-        ortc_factory->CreateVideoSource(
-            std::unique_ptr<cricket::VideoCapturer>(fake_capturer));
-    return rtc::scoped_refptr<webrtc::VideoTrackInterface>(
-        ortc_factory->CreateVideoTrack(id, source));
+  CreateLocalVideoTrackAndFakeSource(const std::string& id,
+                                     OrtcFactoryInterface* ortc_factory) {
+    fake_video_sources_.emplace_back(
+        rtc::MakeUnique<FakePeriodicVideoSource>());
+    fake_video_track_sources_.emplace_back(
+        new rtc::RefCountedObject<VideoTrackSource>(
+            fake_video_sources_.back().get(), false /* remote */));
+    return rtc::scoped_refptr<VideoTrackInterface>(
+        ortc_factory->CreateVideoTrack(
+            id, fake_video_track_sources_.back()));
   }
 
   // Helper function used to test two way RTP senders and receivers with basic
@@ -283,13 +285,13 @@
         CreateLocalAudioTrack("audio", ortc_factory1_.get()));
     EXPECT_TRUE(error.ok());
     error = video_sender1->SetTrack(
-        CreateLocalVideoTrackAndFakeCapturer("video", ortc_factory1_.get()));
+        CreateLocalVideoTrackAndFakeSource("video", ortc_factory1_.get()));
     EXPECT_TRUE(error.ok());
     error = audio_sender2->SetTrack(
         CreateLocalAudioTrack("audio", ortc_factory2_.get()));
     EXPECT_TRUE(error.ok());
     error = video_sender2->SetTrack(
-        CreateLocalVideoTrackAndFakeCapturer("video", ortc_factory2_.get()));
+        CreateLocalVideoTrackAndFakeSource("video", ortc_factory2_.get()));
     EXPECT_TRUE(error.ok());
 
     // "sent_X_parameters1" are the parameters that endpoint 1 sends with and
@@ -350,8 +352,8 @@
   rtc::scoped_refptr<FakeAudioCaptureModule> fake_audio_capture_module2_;
   std::unique_ptr<OrtcFactoryInterface> ortc_factory1_;
   std::unique_ptr<OrtcFactoryInterface> ortc_factory2_;
-  // Actually owned by video tracks.
-  std::vector<webrtc::FakePeriodicVideoCapturer*> fake_video_capturers_;
+  std::vector<std::unique_ptr<FakePeriodicVideoSource>> fake_video_sources_;
+  std::vector<rtc::scoped_refptr<VideoTrackSource>> fake_video_track_sources_;
   int received_audio_frames1_ = 0;
   int received_audio_frames2_ = 0;
   int rendered_video_frames1_ = 0;
@@ -415,7 +417,7 @@
   auto receiver = receiver_result.MoveValue();
 
   RTCError error = sender->SetTrack(
-      CreateLocalVideoTrackAndFakeCapturer("video", ortc_factory1_.get()));
+      CreateLocalVideoTrackAndFakeSource("video", ortc_factory1_.get()));
   EXPECT_TRUE(error.ok());
 
   RtpParameters vp8_parameters = MakeMinimalVp8Parameters();
@@ -450,7 +452,7 @@
   auto receiver = receiver_result.MoveValue();
 
   RTCError error = sender->SetTrack(
-      CreateLocalVideoTrackAndFakeCapturer("video_1", ortc_factory1_.get()));
+      CreateLocalVideoTrackAndFakeSource("video_1", ortc_factory1_.get()));
   EXPECT_TRUE(error.ok());
   RtpParameters vp8_parameters = MakeMinimalVp8Parameters();
   EXPECT_TRUE(receiver->Receive(vp8_parameters).ok());
@@ -460,13 +462,15 @@
   // Expect for some initial number of frames to be received.
   EXPECT_TRUE_WAIT(fake_renderer.num_rendered_frames() > kDefaultNumFrames,
                    kDefaultTimeout);
-  // Stop the old capturer, set a new track, and verify new frames are received
-  // from the new track. Stopping the old capturer ensures that we aren't
-  // actually still getting frames from it.
-  fake_video_capturers_[0]->StopFrameDelivery();
+  // Destroy old source, set a new track, and verify new frames are received
+  // from the new track. The VideoTrackSource is reference counted and may live
+  // a little longer, so tell it that its source is going away now.
+  fake_video_track_sources_[0]->OnSourceDestroyed();
+  fake_video_track_sources_[0] = nullptr;
+  fake_video_sources_[0].reset();
   int prev_num_frames = fake_renderer.num_rendered_frames();
   error = sender->SetTrack(
-      CreateLocalVideoTrackAndFakeCapturer("video_2", ortc_factory1_.get()));
+      CreateLocalVideoTrackAndFakeSource("video_2", ortc_factory1_.get()));
   EXPECT_TRUE(error.ok());
   EXPECT_TRUE_WAIT(
       fake_renderer.num_rendered_frames() > kDefaultNumFrames + prev_num_frames,
@@ -628,13 +632,13 @@
       CreateLocalAudioTrack("audio", ortc_factory1_.get()));
   EXPECT_TRUE(error.ok());
   error = video_sender1->SetTrack(
-      CreateLocalVideoTrackAndFakeCapturer("video", ortc_factory1_.get()));
+      CreateLocalVideoTrackAndFakeSource("video", ortc_factory1_.get()));
   EXPECT_TRUE(error.ok());
   error = audio_sender2->SetTrack(
       CreateLocalAudioTrack("audio", ortc_factory2_.get()));
   EXPECT_TRUE(error.ok());
   error = video_sender2->SetTrack(
-      CreateLocalVideoTrackAndFakeCapturer("video", ortc_factory2_.get()));
+      CreateLocalVideoTrackAndFakeSource("video", ortc_factory2_.get()));
   EXPECT_TRUE(error.ok());
 
   // Use different codecs in different directions for extra challenge.
diff --git a/pc/BUILD.gn b/pc/BUILD.gn
index cb167cd..907d199 100644
--- a/pc/BUILD.gn
+++ b/pc/BUILD.gn
@@ -347,6 +347,7 @@
       "test/fakepeerconnectionbase.h",
       "test/fakepeerconnectionforstats.h",
       "test/fakeperiodicvideocapturer.h",
+      "test/fakeperiodicvideosource.h",
       "test/fakertccertificategenerator.h",
       "test/fakesctptransport.h",
       "test/faketransportcontroller.h",
diff --git a/pc/test/fakeperiodicvideosource.h b/pc/test/fakeperiodicvideosource.h
new file mode 100644
index 0000000..98ed4c2
--- /dev/null
+++ b/pc/test/fakeperiodicvideosource.h
@@ -0,0 +1,74 @@
+/*
+ *  Copyright 2018 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 PC_TEST_FAKEPERIODICVIDEOSOURCE_H_
+#define PC_TEST_FAKEPERIODICVIDEOSOURCE_H_
+
+#include "api/videosourceinterface.h"
+#include "media/base/fakeframesource.h"
+#include "media/base/videobroadcaster.h"
+#include "rtc_base/task_queue.h"
+
+namespace webrtc {
+
+class FakePeriodicVideoSource final
+    : public rtc::VideoSourceInterface<VideoFrame> {
+ public:
+  static constexpr int kFrameIntervalMs = 33;
+  static constexpr int kWidth = 640;
+  static constexpr int kHeight = 480;
+
+  FakePeriodicVideoSource() {
+    thread_checker_.DetachFromThread();
+    task_queue_.PostTask(rtc::MakeUnique<FrameTask>(&broadcaster_));
+  }
+
+  void RemoveSink(rtc::VideoSinkInterface<webrtc::VideoFrame>* sink) override {
+    RTC_DCHECK(thread_checker_.CalledOnValidThread());
+    broadcaster_.RemoveSink(sink);
+  }
+
+  void AddOrUpdateSink(rtc::VideoSinkInterface<webrtc::VideoFrame>* sink,
+                       const rtc::VideoSinkWants& wants) override {
+    RTC_DCHECK(thread_checker_.CalledOnValidThread());
+    broadcaster_.AddOrUpdateSink(sink, wants);
+  }
+
+ private:
+  class FrameTask : public rtc::QueuedTask {
+   public:
+    explicit FrameTask(rtc::VideoSinkInterface<VideoFrame>* sink)
+        : frame_source_(kWidth,
+                        kHeight,
+                        kFrameIntervalMs * rtc::kNumMicrosecsPerMillisec),
+          sink_(sink) {}
+
+    bool Run() override {
+      sink_->OnFrame(frame_source_.GetFrame());
+      rtc::TaskQueue::Current()->PostDelayedTask(rtc::WrapUnique(this),
+                                                 kFrameIntervalMs);
+      return false;
+    }
+    cricket::FakeFrameSource frame_source_;
+    rtc::VideoSinkInterface<VideoFrame>* sink_;
+  };
+
+  void OnFrame(const webrtc::VideoFrame& frame) { broadcaster_.OnFrame(frame); }
+  rtc::ThreadChecker thread_checker_;
+
+  rtc::VideoBroadcaster broadcaster_;
+
+  // Last member, depend on detruction order.
+  rtc::TaskQueue task_queue_{"FakePeriodicVideoTrackSource"};
+};
+
+}  // namespace webrtc
+
+#endif  // PC_TEST_FAKEPERIODICVIDEOSOURCE_H_
