diff --git a/audio/BUILD.gn b/audio/BUILD.gn
index afc9082..80f2d52 100644
--- a/audio/BUILD.gn
+++ b/audio/BUILD.gn
@@ -29,6 +29,8 @@
     "channel_send.cc",
     "channel_send.h",
     "conversion.h",
+    "null_audio_poller.cc",
+    "null_audio_poller.h",
     "remix_resample.cc",
     "remix_resample.h",
   ]
@@ -80,7 +82,6 @@
     "../rtc_base:rtc_task_queue",
     "../rtc_base:safe_minmax",
     "../rtc_base/experiments:field_trial_parser",
-    "../rtc_base/task_utils:repeating_task",
     "../system_wrappers",
     "../system_wrappers:field_trial",
     "../system_wrappers:metrics",
diff --git a/audio/audio_state.cc b/audio/audio_state.cc
index b103bc6..1a4fd77 100644
--- a/audio/audio_state.cc
+++ b/audio/audio_state.cc
@@ -38,7 +38,6 @@
   RTC_DCHECK(thread_checker_.IsCurrent());
   RTC_DCHECK(receiving_streams_.empty());
   RTC_DCHECK(sending_streams_.empty());
-  null_audio_poller_.Stop();
 }
 
 AudioProcessing* AudioState::audio_processing() {
@@ -177,31 +176,10 @@
   // Run NullAudioPoller when there are receiving streams and playout is
   // disabled.
   if (!receiving_streams_.empty() && !playout_enabled_) {
-    if (!null_audio_poller_.Running()) {
-      // TODO(srte): Replace current thread with an explicit task queue
-      // instance.
-      null_audio_poller_ =
-          RepeatingTaskHandle::Start(rtc::Thread::Current(), [this] {
-            // WebRTC uses 10ms audio windows by default
-            constexpr TimeDelta kPollInterval = TimeDelta::ms(10);
-            constexpr Frequency kSampleRate = Frequency::kHz(48);
-            constexpr size_t kSamplesPerPoll =
-                static_cast<size_t>(kSampleRate * kPollInterval);
-            constexpr size_t kNumChannels = 1;
-            int16_t audio_sample_buffer[kSamplesPerPoll * kNumChannels];
-            // Output variables from |NeedMorePlayData|.
-            size_t n_samples;
-            int64_t elapsed_time_ms;
-            int64_t ntp_time_ms;
-            audio_transport_.NeedMorePlayData(kSamplesPerPoll, sizeof(int16_t),
-                                              kNumChannels, kSampleRate.hertz(),
-                                              audio_sample_buffer, n_samples,
-                                              &elapsed_time_ms, &ntp_time_ms);
-            return kPollInterval;
-          });
-    }
+    if (!null_audio_poller_)
+      null_audio_poller_ = std::make_unique<NullAudioPoller>(&audio_transport_);
   } else {
-    null_audio_poller_.Stop();
+    null_audio_poller_.reset();
   }
 }
 }  // namespace internal
diff --git a/audio/audio_state.h b/audio/audio_state.h
index 0cbdf7e..f696d5a 100644
--- a/audio/audio_state.h
+++ b/audio/audio_state.h
@@ -16,11 +16,11 @@
 #include <unordered_set>
 
 #include "audio/audio_transport_impl.h"
+#include "audio/null_audio_poller.h"
 #include "call/audio_state.h"
 #include "rtc_base/constructor_magic.h"
 #include "rtc_base/critical_section.h"
 #include "rtc_base/ref_count.h"
-#include "rtc_base/task_utils/repeating_task.h"
 #include "rtc_base/thread_checker.h"
 
 namespace webrtc {
@@ -75,7 +75,7 @@
   // Null audio poller is used to continue polling the audio streams if audio
   // playout is disabled so that audio processing still happens and the audio
   // stats are still updated.
-  RepeatingTaskHandle null_audio_poller_;
+  std::unique_ptr<NullAudioPoller> null_audio_poller_;
 
   std::unordered_set<webrtc::AudioReceiveStream*> receiving_streams_;
   struct StreamProperties {
diff --git a/audio/null_audio_poller.cc b/audio/null_audio_poller.cc
new file mode 100644
index 0000000..22f575d
--- /dev/null
+++ b/audio/null_audio_poller.cc
@@ -0,0 +1,71 @@
+/*
+ *  Copyright (c) 2017 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.
+ */
+
+#include "audio/null_audio_poller.h"
+
+#include <stddef.h>
+
+#include "rtc_base/checks.h"
+#include "rtc_base/location.h"
+#include "rtc_base/thread.h"
+#include "rtc_base/time_utils.h"
+
+namespace webrtc {
+namespace internal {
+
+namespace {
+
+constexpr int64_t kPollDelayMs = 10;  // WebRTC uses 10ms by default
+
+constexpr size_t kNumChannels = 1;
+constexpr uint32_t kSamplesPerSecond = 48000;            // 48kHz
+constexpr size_t kNumSamples = kSamplesPerSecond / 100;  // 10ms of samples
+
+}  // namespace
+
+NullAudioPoller::NullAudioPoller(AudioTransport* audio_transport)
+    : audio_transport_(audio_transport),
+      reschedule_at_(rtc::TimeMillis() + kPollDelayMs) {
+  RTC_DCHECK(audio_transport);
+  OnMessage(nullptr);  // Start the poll loop.
+}
+
+NullAudioPoller::~NullAudioPoller() {
+  RTC_DCHECK(thread_checker_.IsCurrent());
+  rtc::Thread::Current()->Clear(this);
+}
+
+void NullAudioPoller::OnMessage(rtc::Message* msg) {
+  RTC_DCHECK(thread_checker_.IsCurrent());
+
+  // Buffer to hold the audio samples.
+  int16_t buffer[kNumSamples * kNumChannels];
+  // Output variables from |NeedMorePlayData|.
+  size_t n_samples;
+  int64_t elapsed_time_ms;
+  int64_t ntp_time_ms;
+  audio_transport_->NeedMorePlayData(kNumSamples, sizeof(int16_t), kNumChannels,
+                                     kSamplesPerSecond, buffer, n_samples,
+                                     &elapsed_time_ms, &ntp_time_ms);
+
+  // Reschedule the next poll iteration. If, for some reason, the given
+  // reschedule time has already passed, reschedule as soon as possible.
+  int64_t now = rtc::TimeMillis();
+  if (reschedule_at_ < now) {
+    reschedule_at_ = now;
+  }
+  rtc::Thread::Current()->PostAt(RTC_FROM_HERE, reschedule_at_, this, 0);
+
+  // Loop after next will be kPollDelayMs later.
+  reschedule_at_ += kPollDelayMs;
+}
+
+}  // namespace internal
+}  // namespace webrtc
diff --git a/audio/null_audio_poller.h b/audio/null_audio_poller.h
new file mode 100644
index 0000000..97cd2c7
--- /dev/null
+++ b/audio/null_audio_poller.h
@@ -0,0 +1,40 @@
+/*
+ *  Copyright (c) 2017 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 AUDIO_NULL_AUDIO_POLLER_H_
+#define AUDIO_NULL_AUDIO_POLLER_H_
+
+#include <stdint.h>
+
+#include "modules/audio_device/include/audio_device_defines.h"
+#include "rtc_base/message_handler.h"
+#include "rtc_base/thread_checker.h"
+
+namespace webrtc {
+namespace internal {
+
+class NullAudioPoller final : public rtc::MessageHandler {
+ public:
+  explicit NullAudioPoller(AudioTransport* audio_transport);
+  ~NullAudioPoller() override;
+
+ protected:
+  void OnMessage(rtc::Message* msg) override;
+
+ private:
+  rtc::ThreadChecker thread_checker_;
+  AudioTransport* const audio_transport_;
+  int64_t reschedule_at_;
+};
+
+}  // namespace internal
+}  // namespace webrtc
+
+#endif  // AUDIO_NULL_AUDIO_POLLER_H_
