diff --git a/api/BUILD.gn b/api/BUILD.gn
index 45f555c..f0b5eeb 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -678,6 +678,7 @@
         ":neteq_simulator_api",
         "../modules/audio_coding:neteq_test_factory",
         "../rtc_base:checks",
+        "neteq:neteq_api",
         "//third_party/abseil-cpp/absl/flags:flag",
         "//third_party/abseil-cpp/absl/flags:parse",
         "//third_party/abseil-cpp/absl/strings",
diff --git a/api/test/neteq_simulator_factory.cc b/api/test/neteq_simulator_factory.cc
index 9a751a4..b4917f4 100644
--- a/api/test/neteq_simulator_factory.cc
+++ b/api/test/neteq_simulator_factory.cc
@@ -50,7 +50,8 @@
   config.max_nr_packets_in_buffer =
       absl::GetFlag(FLAGS_max_nr_packets_in_buffer);
   config.output_audio_filename = output_audio_filename;
-  return factory_->InitializeTestFromFile(args[1], config);
+  return factory_->InitializeTestFromFile(/*input_file_name=*/args[1],
+                                          /*factory=*/nullptr, config);
 }
 
 std::unique_ptr<NetEqSimulator> NetEqSimulatorFactory::CreateSimulatorFromFile(
@@ -63,8 +64,8 @@
   config.initial_dummy_packets = simulation_config.initial_dummy_packets;
   config.skip_get_audio_events = simulation_config.skip_get_audio_events;
   config.field_trial_string = simulation_config.field_trial_string;
-  return factory_->InitializeTestFromFile(std::string(event_log_filename),
-                                          config);
+  return factory_->InitializeTestFromFile(
+      std::string(event_log_filename), simulation_config.neteq_factory, config);
 }
 
 std::unique_ptr<NetEqSimulator>
@@ -79,7 +80,8 @@
   config.skip_get_audio_events = simulation_config.skip_get_audio_events;
   config.field_trial_string = simulation_config.field_trial_string;
   return factory_->InitializeTestFromString(
-      std::string(event_log_file_contents), config);
+      std::string(event_log_file_contents), simulation_config.neteq_factory,
+      config);
 }
 
 }  // namespace test
diff --git a/api/test/neteq_simulator_factory.h b/api/test/neteq_simulator_factory.h
index 3c0cbe0..af747f6 100644
--- a/api/test/neteq_simulator_factory.h
+++ b/api/test/neteq_simulator_factory.h
@@ -15,6 +15,7 @@
 #include <string>
 
 #include "absl/strings/string_view.h"
+#include "api/neteq/neteq_factory.h"
 #include "api/test/neteq_simulator.h"
 
 namespace webrtc {
@@ -40,6 +41,8 @@
     int skip_get_audio_events = 0;
     // A WebRTC field trial string to be used during the simulation.
     std::string field_trial_string;
+    // A custom NetEqFactory can be used.
+    NetEqFactory* neteq_factory = nullptr;
   };
   // This function takes the same arguments as the neteq_rtpplay utility.
   std::unique_ptr<NetEqSimulator> CreateSimulator(int argc, char* argv[]);
diff --git a/modules/audio_coding/neteq/neteq_decoder_plc_unittest.cc b/modules/audio_coding/neteq/neteq_decoder_plc_unittest.cc
index 49eb1cc..daf81f2 100644
--- a/modules/audio_coding/neteq/neteq_decoder_plc_unittest.cc
+++ b/modules/audio_coding/neteq/neteq_decoder_plc_unittest.cc
@@ -186,8 +186,10 @@
   NetEqTest::Callbacks callbacks;
 
   NetEqTest neteq_test(
-      config, new rtc::RefCountedObject<test::AudioDecoderProxyFactory>(&dec),
-      decoders, nullptr, std::move(lossy_input), std::move(output), callbacks);
+      config, /*decoder_factory=*/
+      new rtc::RefCountedObject<test::AudioDecoderProxyFactory>(&dec),
+      /*codecs=*/decoders, /*text_log=*/nullptr, /*neteq_factory=*/nullptr,
+      /*input=*/std::move(lossy_input), std::move(output), callbacks);
   EXPECT_LE(kRunTimeMs, neteq_test.Run());
 
   auto lifetime_stats = neteq_test.LifetimeStats();
diff --git a/modules/audio_coding/neteq/neteq_unittest.cc b/modules/audio_coding/neteq/neteq_unittest.cc
index 098bcc2..e284ddb 100644
--- a/modules/audio_coding/neteq/neteq_unittest.cc
+++ b/modules/audio_coding/neteq/neteq_unittest.cc
@@ -1084,8 +1084,10 @@
       new TimeLimitedNetEqInput(std::move(input), 20000));
   std::unique_ptr<AudioSink> output(new VoidAudioSink);
   NetEqTest::Callbacks callbacks;
-  NetEqTest test(config, CreateBuiltinAudioDecoderFactory(), codecs, nullptr,
-                 std::move(input_time_limit), std::move(output), callbacks);
+  NetEqTest test(config, CreateBuiltinAudioDecoderFactory(), codecs,
+                 /*text_log=*/nullptr, /*neteq_factory=*/nullptr,
+                 /*input=*/std::move(input_time_limit), std::move(output),
+                 callbacks);
   test.Run();
   const auto stats = test.SimulationStats();
   EXPECT_EQ(0, stats.accelerate_rate);
diff --git a/modules/audio_coding/neteq/tools/neteq_rtpplay.cc b/modules/audio_coding/neteq/tools/neteq_rtpplay.cc
index b37bea1..16a789f 100644
--- a/modules/audio_coding/neteq/tools/neteq_rtpplay.cc
+++ b/modules/audio_coding/neteq/tools/neteq_rtpplay.cc
@@ -397,7 +397,8 @@
   }
 
   std::unique_ptr<webrtc::test::NetEqTest> test =
-      factory.InitializeTestFromFile(/*input_filename=*/args[1], config);
+      factory.InitializeTestFromFile(/*input_filename=*/args[1],
+                                     /*factory=*/nullptr, config);
   RTC_CHECK(test) << "ERROR: Unable to run test";
   test->Run();
   return 0;
diff --git a/modules/audio_coding/neteq/tools/neteq_test.cc b/modules/audio_coding/neteq/tools/neteq_test.cc
index a775453..f8b6161 100644
--- a/modules/audio_coding/neteq/tools/neteq_test.cc
+++ b/modules/audio_coding/neteq/tools/neteq_test.cc
@@ -63,11 +63,14 @@
                      rtc::scoped_refptr<AudioDecoderFactory> decoder_factory,
                      const DecoderMap& codecs,
                      std::unique_ptr<std::ofstream> text_log,
+                     NetEqFactory* neteq_factory,
                      std::unique_ptr<NetEqInput> input,
                      std::unique_ptr<AudioSink> output,
                      Callbacks callbacks)
     : clock_(0),
-      neteq_(CreateNetEq(config, &clock_, decoder_factory)),
+      neteq_(neteq_factory
+                 ? neteq_factory->CreateNetEq(config, decoder_factory, &clock_)
+                 : CreateNetEq(config, &clock_, decoder_factory)),
       input_(std::move(input)),
       output_(std::move(output)),
       callbacks_(callbacks),
diff --git a/modules/audio_coding/neteq/tools/neteq_test.h b/modules/audio_coding/neteq/tools/neteq_test.h
index c6dbca7..afcc077 100644
--- a/modules/audio_coding/neteq/tools/neteq_test.h
+++ b/modules/audio_coding/neteq/tools/neteq_test.h
@@ -20,6 +20,7 @@
 #include "absl/types/optional.h"
 #include "api/audio_codecs/audio_decoder_factory.h"
 #include "api/neteq/neteq.h"
+#include "api/neteq/neteq_factory.h"
 #include "api/test/neteq_simulator.h"
 #include "modules/audio_coding/neteq/tools/audio_sink.h"
 #include "modules/audio_coding/neteq/tools/neteq_input.h"
@@ -83,6 +84,7 @@
             rtc::scoped_refptr<AudioDecoderFactory> decoder_factory,
             const DecoderMap& codecs,
             std::unique_ptr<std::ofstream> text_log,
+            NetEqFactory* neteq_factory,
             std::unique_ptr<NetEqInput> input,
             std::unique_ptr<AudioSink> output,
             Callbacks callbacks);
diff --git a/modules/audio_coding/neteq/tools/neteq_test_factory.cc b/modules/audio_coding/neteq/tools/neteq_test_factory.cc
index f590091..f8ec36b 100644
--- a/modules/audio_coding/neteq/tools/neteq_test_factory.cc
+++ b/modules/audio_coding/neteq/tools/neteq_test_factory.cc
@@ -110,6 +110,7 @@
 
 std::unique_ptr<NetEqTest> NetEqTestFactory::InitializeTestFromString(
     const std::string& input_string,
+    NetEqFactory* factory,
     const Config& config) {
   std::unique_ptr<NetEqInput> input(
       NetEqEventLogInput::CreateFromString(input_string, config.ssrc_filter));
@@ -117,11 +118,12 @@
     std::cerr << "Error: Cannot parse input string" << std::endl;
     return nullptr;
   }
-  return InitializeTest(std::move(input), config);
+  return InitializeTest(std::move(input), factory, config);
 }
 
 std::unique_ptr<NetEqTest> NetEqTestFactory::InitializeTestFromFile(
     const std::string& input_file_name,
+    NetEqFactory* factory,
     const Config& config) {
   // Gather RTP header extensions in a map.
   NetEqPacketSourceInput::RtpHeaderExtensionMap rtp_ext_map = {
@@ -146,11 +148,12 @@
     std::cerr << "Error: Cannot open input file" << std::endl;
     return nullptr;
   }
-  return InitializeTest(std::move(input), config);
+  return InitializeTest(std::move(input), factory, config);
 }
 
 std::unique_ptr<NetEqTest> NetEqTestFactory::InitializeTest(
     std::unique_ptr<NetEqInput> input,
+    NetEqFactory* factory,
     const Config& config) {
   if (input->ended()) {
     std::cerr << "Error: Input is empty" << std::endl;
@@ -330,9 +333,9 @@
   neteq_config.sample_rate_hz = *sample_rate_hz;
   neteq_config.max_packets_in_buffer = config.max_nr_packets_in_buffer;
   neteq_config.enable_fast_accelerate = config.enable_fast_accelerate;
-  return std::make_unique<NetEqTest>(neteq_config, decoder_factory, codecs,
-                                     std::move(text_log), std::move(input),
-                                     std::move(output), callbacks);
+  return std::make_unique<NetEqTest>(
+      neteq_config, decoder_factory, codecs, std::move(text_log), factory,
+      std::move(input), std::move(output), callbacks);
 }
 
 }  // namespace test
diff --git a/modules/audio_coding/neteq/tools/neteq_test_factory.h b/modules/audio_coding/neteq/tools/neteq_test_factory.h
index 5fd55a7..b8ba8cc 100644
--- a/modules/audio_coding/neteq/tools/neteq_test_factory.h
+++ b/modules/audio_coding/neteq/tools/neteq_test_factory.h
@@ -147,13 +147,16 @@
 
   std::unique_ptr<NetEqTest> InitializeTestFromFile(
       const std::string& input_filename,
+      NetEqFactory* neteq_factory,
       const Config& config);
   std::unique_ptr<NetEqTest> InitializeTestFromString(
       const std::string& input_string,
+      NetEqFactory* neteq_factory,
       const Config& config);
 
  private:
   std::unique_ptr<NetEqTest> InitializeTest(std::unique_ptr<NetEqInput> input,
+                                            NetEqFactory* neteq_factory,
                                             const Config& config);
   std::unique_ptr<SsrcSwitchDetector> ssrc_switch_detector_;
   std::unique_ptr<NetEqStatsPlotter> stats_plotter_;
diff --git a/rtc_tools/rtc_event_log_visualizer/analyzer.cc b/rtc_tools/rtc_event_log_visualizer/analyzer.cc
index 8d889f7..59b96e4 100644
--- a/rtc_tools/rtc_event_log_visualizer/analyzer.cc
+++ b/rtc_tools/rtc_event_log_visualizer/analyzer.cc
@@ -1934,8 +1934,9 @@
   callbacks.post_insert_packet = neteq_stats_getter->delay_analyzer();
   callbacks.get_audio_callback = neteq_stats_getter.get();
 
-  test::NetEqTest test(config, decoder_factory, codecs, nullptr,
-                       std::move(input), std::move(output), callbacks);
+  test::NetEqTest test(config, decoder_factory, codecs, /*text_log=*/nullptr,
+                       /*factory=*/nullptr, std::move(input), std::move(output),
+                       callbacks);
   test.Run();
   return neteq_stats_getter;
 }
diff --git a/test/fuzzers/neteq_rtp_fuzzer.cc b/test/fuzzers/neteq_rtp_fuzzer.cc
index dbce100..d978199 100644
--- a/test/fuzzers/neteq_rtp_fuzzer.cc
+++ b/test/fuzzers/neteq_rtp_fuzzer.cc
@@ -138,7 +138,8 @@
   RTC_CHECK(it != codecs.end());
   RTC_CHECK(it->second == SdpAudioFormat("L16", 32000, 1));
 
-  NetEqTest test(config, CreateBuiltinAudioDecoderFactory(), codecs, nullptr,
+  NetEqTest test(config, CreateBuiltinAudioDecoderFactory(), codecs,
+                 /*text_log=*/nullptr, /*neteq_factory=*/nullptr,
                  std::move(input), std::move(output), callbacks);
   test.Run();
 }
diff --git a/test/fuzzers/neteq_signal_fuzzer.cc b/test/fuzzers/neteq_signal_fuzzer.cc
index dfd8a14..8653f13 100644
--- a/test/fuzzers/neteq_signal_fuzzer.cc
+++ b/test/fuzzers/neteq_signal_fuzzer.cc
@@ -186,7 +186,8 @@
   RTC_CHECK(
       MapHas(codecs, rate_types[3].second, SdpAudioFormat("l16", 48000, 1)));
 
-  NetEqTest test(config, CreateBuiltinAudioDecoderFactory(), codecs, nullptr,
+  NetEqTest test(config, CreateBuiltinAudioDecoderFactory(), codecs,
+                 /*text_log=*/nullptr, /*neteq_factory=*/nullptr,
                  std::move(input), std::move(output), callbacks);
   test.Run();
 }
