diff --git a/test/pc/e2e/BUILD.gn b/test/pc/e2e/BUILD.gn
index fc7f1eb..2d1288c 100644
--- a/test/pc/e2e/BUILD.gn
+++ b/test/pc/e2e/BUILD.gn
@@ -15,7 +15,6 @@
     deps = [
       ":encoded_image_data_injector_api",
       ":example_video_quality_analyzer",
-      ":id_generator",
       ":quality_analyzing_video_decoder",
       ":quality_analyzing_video_encoder",
       ":single_process_encoded_image_data_injector",
@@ -89,16 +88,6 @@
     absl_deps = [ "//third_party/abseil-cpp/absl/memory" ]
   }
 
-  rtc_library("id_generator") {
-    visibility = [ "*" ]
-    testonly = true
-    sources = [
-      "analyzer/video/id_generator.cc",
-      "analyzer/video/id_generator.h",
-    ]
-    deps = []
-  }
-
   rtc_library("simulcast_dummy_buffer_helper") {
     visibility = [ "*" ]
     testonly = true
@@ -118,7 +107,6 @@
     ]
     deps = [
       ":encoded_image_data_injector_api",
-      ":id_generator",
       ":simulcast_dummy_buffer_helper",
       "../../../api:video_quality_analyzer_api",
       "../../../api/video:encoded_image",
@@ -145,7 +133,6 @@
     ]
     deps = [
       ":encoded_image_data_injector_api",
-      ":id_generator",
       "../../../api:video_quality_analyzer_api",
       "../../../api/video:encoded_image",
       "../../../api/video:video_frame",
@@ -169,7 +156,6 @@
       ]
       deps = [
         ":encoded_image_data_injector_api",
-        ":id_generator",
         ":quality_analyzing_video_decoder",
         ":quality_analyzing_video_encoder",
         ":simulcast_dummy_buffer_helper",
diff --git a/test/pc/e2e/analyzer/video/encoded_image_data_injector.h b/test/pc/e2e/analyzer/video/encoded_image_data_injector.h
index ca7c7ea..154e38e 100644
--- a/test/pc/e2e/analyzer/video/encoded_image_data_injector.h
+++ b/test/pc/e2e/analyzer/video/encoded_image_data_injector.h
@@ -27,11 +27,10 @@
   // Return encoded image with specified |id| and |discard| flag injected into
   // its payload. |discard| flag mean does analyzing decoder should discard this
   // encoded image because it belongs to unnecessary simulcast stream or spatial
-  // layer. |coding_entity_id| is unique id of decoder or encoder.
+  // layer.
   virtual EncodedImage InjectData(uint16_t id,
                                   bool discard,
-                                  const EncodedImage& source,
-                                  int coding_entity_id) = 0;
+                                  const EncodedImage& source) = 0;
 };
 
 struct EncodedImageExtractionResult {
@@ -58,9 +57,9 @@
 
   // Returns encoded image id, extracted from payload and also encoded image
   // with its original payload. For concatenated spatial layers it should be the
-  // same id. |coding_entity_id| is unique id of decoder or encoder.
-  virtual EncodedImageExtractionResult ExtractData(const EncodedImage& source,
-                                                   int coding_entity_id) = 0;
+  // same id.
+  virtual EncodedImageExtractionResult ExtractData(
+      const EncodedImage& source) = 0;
 };
 
 }  // namespace webrtc_pc_e2e
diff --git a/test/pc/e2e/analyzer/video/id_generator.cc b/test/pc/e2e/analyzer/video/id_generator.cc
deleted file mode 100644
index f1ead37..0000000
--- a/test/pc/e2e/analyzer/video/id_generator.cc
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- *  Copyright (c) 2019 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 "test/pc/e2e/analyzer/video/id_generator.h"
-
-namespace webrtc {
-namespace webrtc_pc_e2e {
-
-IntIdGenerator::IntIdGenerator(int start_value) : next_id_(start_value) {}
-IntIdGenerator::~IntIdGenerator() = default;
-
-int IntIdGenerator::GetNextId() {
-  return next_id_++;
-}
-
-}  // namespace webrtc_pc_e2e
-}  // namespace webrtc
diff --git a/test/pc/e2e/analyzer/video/id_generator.h b/test/pc/e2e/analyzer/video/id_generator.h
deleted file mode 100644
index 8c988f2..0000000
--- a/test/pc/e2e/analyzer/video/id_generator.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- *  Copyright (c) 2019 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 TEST_PC_E2E_ANALYZER_VIDEO_ID_GENERATOR_H_
-#define TEST_PC_E2E_ANALYZER_VIDEO_ID_GENERATOR_H_
-
-#include <atomic>
-
-namespace webrtc {
-namespace webrtc_pc_e2e {
-
-// IdGenerator generates ids. All provided ids have to be unique. There is no
-// any order guarantees for provided ids.
-template <typename T>
-class IdGenerator {
- public:
-  virtual ~IdGenerator() = default;
-
-  // Returns next unique id. There is no any order guarantees for provided ids.
-  virtual T GetNextId() = 0;
-};
-
-// Generates int ids. It is assumed, that no more then max int value ids will be
-// requested from this generator.
-class IntIdGenerator : public IdGenerator<int> {
- public:
-  explicit IntIdGenerator(int start_value);
-  ~IntIdGenerator() override;
-
-  int GetNextId() override;
-
- private:
-  std::atomic<int> next_id_;
-};
-
-}  // namespace webrtc_pc_e2e
-}  // namespace webrtc
-
-#endif  // TEST_PC_E2E_ANALYZER_VIDEO_ID_GENERATOR_H_
diff --git a/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.cc b/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.cc
index 27b9af5..c8b5862 100644
--- a/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.cc
+++ b/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.cc
@@ -26,13 +26,11 @@
 namespace webrtc_pc_e2e {
 
 QualityAnalyzingVideoDecoder::QualityAnalyzingVideoDecoder(
-    int id,
     absl::string_view peer_name,
     std::unique_ptr<VideoDecoder> delegate,
     EncodedImageDataExtractor* extractor,
     VideoQualityAnalyzerInterface* analyzer)
-    : id_(id),
-      peer_name_(peer_name),
+    : peer_name_(peer_name),
       implementation_name_("AnalyzingDecoder-" +
                            std::string(delegate->ImplementationName())),
       delegate_(std::move(delegate)),
@@ -56,7 +54,7 @@
   // owner of original buffer will be responsible for deleting it, or extractor
   // can create a new buffer. In such case extractor will be responsible for
   // deleting it.
-  EncodedImageExtractionResult out = extractor_->ExtractData(input_image, id_);
+  EncodedImageExtractionResult out = extractor_->ExtractData(input_image);
 
   if (out.discard) {
     // To partly emulate behavior of Selective Forwarding Unit (SFU) in the
@@ -235,12 +233,10 @@
 QualityAnalyzingVideoDecoderFactory::QualityAnalyzingVideoDecoderFactory(
     absl::string_view peer_name,
     std::unique_ptr<VideoDecoderFactory> delegate,
-    IdGenerator<int>* id_generator,
     EncodedImageDataExtractor* extractor,
     VideoQualityAnalyzerInterface* analyzer)
     : peer_name_(peer_name),
       delegate_(std::move(delegate)),
-      id_generator_(id_generator),
       extractor_(extractor),
       analyzer_(analyzer) {}
 QualityAnalyzingVideoDecoderFactory::~QualityAnalyzingVideoDecoderFactory() =
@@ -256,8 +252,7 @@
     const SdpVideoFormat& format) {
   std::unique_ptr<VideoDecoder> decoder = delegate_->CreateVideoDecoder(format);
   return std::make_unique<QualityAnalyzingVideoDecoder>(
-      id_generator_->GetNextId(), peer_name_, std::move(decoder), extractor_,
-      analyzer_);
+      peer_name_, std::move(decoder), extractor_, analyzer_);
 }
 
 std::unique_ptr<VideoDecoder>
@@ -267,8 +262,7 @@
   std::unique_ptr<VideoDecoder> decoder =
       delegate_->LegacyCreateVideoDecoder(format, receive_stream_id);
   return std::make_unique<QualityAnalyzingVideoDecoder>(
-      id_generator_->GetNextId(), peer_name_, std::move(decoder), extractor_,
-      analyzer_);
+      peer_name_, std::move(decoder), extractor_, analyzer_);
 }
 
 }  // namespace webrtc_pc_e2e
diff --git a/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.h b/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.h
index a26ccbe..a969a5b 100644
--- a/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.h
+++ b/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.h
@@ -25,7 +25,6 @@
 #include "api/video_codecs/video_decoder_factory.h"
 #include "rtc_base/synchronization/mutex.h"
 #include "test/pc/e2e/analyzer/video/encoded_image_data_injector.h"
-#include "test/pc/e2e/analyzer/video/id_generator.h"
 
 namespace webrtc {
 namespace webrtc_pc_e2e {
@@ -50,11 +49,7 @@
 // time the user registers their callback in quality decoder.
 class QualityAnalyzingVideoDecoder : public VideoDecoder {
  public:
-  // Creates analyzing decoder. |id| is unique coding entity id, that will
-  // be used to distinguish all encoders and decoders inside
-  // EncodedImageDataInjector and EncodedImageIdExtracor.
-  QualityAnalyzingVideoDecoder(int id,
-                               absl::string_view peer_name,
+  QualityAnalyzingVideoDecoder(absl::string_view peer_name,
                                std::unique_ptr<VideoDecoder> delegate,
                                EncodedImageDataExtractor* extractor,
                                VideoQualityAnalyzerInterface* analyzer);
@@ -105,7 +100,6 @@
                       absl::optional<int32_t> decode_time_ms,
                       absl::optional<uint8_t> qp);
 
-  const int id_;
   const std::string peer_name_;
   const std::string implementation_name_;
   std::unique_ptr<VideoDecoder> delegate_;
@@ -134,7 +128,6 @@
   QualityAnalyzingVideoDecoderFactory(
       absl::string_view peer_name,
       std::unique_ptr<VideoDecoderFactory> delegate,
-      IdGenerator<int>* id_generator,
       EncodedImageDataExtractor* extractor,
       VideoQualityAnalyzerInterface* analyzer);
   ~QualityAnalyzingVideoDecoderFactory() override;
@@ -150,7 +143,6 @@
  private:
   const std::string peer_name_;
   std::unique_ptr<VideoDecoderFactory> delegate_;
-  IdGenerator<int>* const id_generator_;
   EncodedImageDataExtractor* const extractor_;
   VideoQualityAnalyzerInterface* const analyzer_;
 };
diff --git a/test/pc/e2e/analyzer/video/quality_analyzing_video_encoder.cc b/test/pc/e2e/analyzer/video/quality_analyzing_video_encoder.cc
index 04ec892..5b8a571c 100644
--- a/test/pc/e2e/analyzer/video/quality_analyzing_video_encoder.cc
+++ b/test/pc/e2e/analyzer/video/quality_analyzing_video_encoder.cc
@@ -53,15 +53,13 @@
 }  // namespace
 
 QualityAnalyzingVideoEncoder::QualityAnalyzingVideoEncoder(
-    int id,
     absl::string_view peer_name,
     std::unique_ptr<VideoEncoder> delegate,
     double bitrate_multiplier,
     std::map<std::string, absl::optional<int>> stream_required_spatial_index,
     EncodedImageDataInjector* injector,
     VideoQualityAnalyzerInterface* analyzer)
-    : id_(id),
-      peer_name_(peer_name),
+    : peer_name_(peer_name),
       delegate_(std::move(delegate)),
       bitrate_multiplier_(bitrate_multiplier),
       stream_required_spatial_index_(std::move(stream_required_spatial_index)),
@@ -287,7 +285,7 @@
   // it) or b) a new buffer (in such case injector will be responsible for
   // deleting it).
   const EncodedImage& image =
-      injector_->InjectData(frame_id, discard, encoded_image, id_);
+      injector_->InjectData(frame_id, discard, encoded_image);
   {
     MutexLock lock(&lock_);
     RTC_DCHECK(delegate_callback_);
@@ -352,14 +350,12 @@
     std::unique_ptr<VideoEncoderFactory> delegate,
     double bitrate_multiplier,
     std::map<std::string, absl::optional<int>> stream_required_spatial_index,
-    IdGenerator<int>* id_generator,
     EncodedImageDataInjector* injector,
     VideoQualityAnalyzerInterface* analyzer)
     : peer_name_(peer_name),
       delegate_(std::move(delegate)),
       bitrate_multiplier_(bitrate_multiplier),
       stream_required_spatial_index_(std::move(stream_required_spatial_index)),
-      id_generator_(id_generator),
       injector_(injector),
       analyzer_(analyzer) {}
 QualityAnalyzingVideoEncoderFactory::~QualityAnalyzingVideoEncoderFactory() =
@@ -380,8 +376,7 @@
 QualityAnalyzingVideoEncoderFactory::CreateVideoEncoder(
     const SdpVideoFormat& format) {
   return std::make_unique<QualityAnalyzingVideoEncoder>(
-      id_generator_->GetNextId(), peer_name_,
-      delegate_->CreateVideoEncoder(format), bitrate_multiplier_,
+      peer_name_, delegate_->CreateVideoEncoder(format), bitrate_multiplier_,
       stream_required_spatial_index_, injector_, analyzer_);
 }
 
diff --git a/test/pc/e2e/analyzer/video/quality_analyzing_video_encoder.h b/test/pc/e2e/analyzer/video/quality_analyzing_video_encoder.h
index 96d9d77..2ba8bdc 100644
--- a/test/pc/e2e/analyzer/video/quality_analyzing_video_encoder.h
+++ b/test/pc/e2e/analyzer/video/quality_analyzing_video_encoder.h
@@ -25,7 +25,6 @@
 #include "api/video_codecs/video_encoder_factory.h"
 #include "rtc_base/synchronization/mutex.h"
 #include "test/pc/e2e/analyzer/video/encoded_image_data_injector.h"
-#include "test/pc/e2e/analyzer/video/id_generator.h"
 
 namespace webrtc {
 namespace webrtc_pc_e2e {
@@ -55,11 +54,7 @@
 class QualityAnalyzingVideoEncoder : public VideoEncoder,
                                      public EncodedImageCallback {
  public:
-  // Creates analyzing encoder. |id| is unique coding entity id, that will
-  // be used to distinguish all encoders and decoders inside
-  // EncodedImageDataInjector and EncodedImageIdExtracor.
   QualityAnalyzingVideoEncoder(
-      int id,
       absl::string_view peer_name,
       std::unique_ptr<VideoEncoder> delegate,
       double bitrate_multiplier,
@@ -139,7 +134,6 @@
   bool ShouldDiscard(uint16_t frame_id, const EncodedImage& encoded_image)
       RTC_EXCLUSIVE_LOCKS_REQUIRED(lock_);
 
-  const int id_;
   const std::string peer_name_;
   std::unique_ptr<VideoEncoder> delegate_;
   const double bitrate_multiplier_;
@@ -176,7 +170,6 @@
       std::unique_ptr<VideoEncoderFactory> delegate,
       double bitrate_multiplier,
       std::map<std::string, absl::optional<int>> stream_required_spatial_index,
-      IdGenerator<int>* id_generator,
       EncodedImageDataInjector* injector,
       VideoQualityAnalyzerInterface* analyzer);
   ~QualityAnalyzingVideoEncoderFactory() override;
@@ -193,7 +186,6 @@
   std::unique_ptr<VideoEncoderFactory> delegate_;
   const double bitrate_multiplier_;
   std::map<std::string, absl::optional<int>> stream_required_spatial_index_;
-  IdGenerator<int>* const id_generator_;
   EncodedImageDataInjector* const injector_;
   VideoQualityAnalyzerInterface* const analyzer_;
 };
diff --git a/test/pc/e2e/analyzer/video/single_process_encoded_image_data_injector.cc b/test/pc/e2e/analyzer/video/single_process_encoded_image_data_injector.cc
index 4593df7..85e3a8ca 100644
--- a/test/pc/e2e/analyzer/video/single_process_encoded_image_data_injector.cc
+++ b/test/pc/e2e/analyzer/video/single_process_encoded_image_data_injector.cc
@@ -28,8 +28,7 @@
 EncodedImage SingleProcessEncodedImageDataInjector::InjectData(
     uint16_t id,
     bool discard,
-    const EncodedImage& source,
-    int coding_entity_id) {
+    const EncodedImage& source) {
   RTC_CHECK(source.size() >= ExtractionInfo::kUsedBufferSize);
 
   ExtractionInfo info;
@@ -62,8 +61,7 @@
 }
 
 EncodedImageExtractionResult SingleProcessEncodedImageDataInjector::ExtractData(
-    const EncodedImage& source,
-    int coding_entity_id) {
+    const EncodedImage& source) {
   size_t size = source.size();
   auto buffer = EncodedImageBuffer::Create(source.data(), source.size());
   EncodedImage out = source;
diff --git a/test/pc/e2e/analyzer/video/single_process_encoded_image_data_injector.h b/test/pc/e2e/analyzer/video/single_process_encoded_image_data_injector.h
index e3d4025..03feb79 100644
--- a/test/pc/e2e/analyzer/video/single_process_encoded_image_data_injector.h
+++ b/test/pc/e2e/analyzer/video/single_process_encoded_image_data_injector.h
@@ -48,16 +48,14 @@
   // changed.
   EncodedImage InjectData(uint16_t id,
                           bool discard,
-                          const EncodedImage& source,
-                          int coding_entity_id) override;
+                          const EncodedImage& source) override;
 
   void Start(int expected_receivers_count) override {
     MutexLock crit(&lock_);
     expected_receivers_count_ = expected_receivers_count;
   }
   void AddParticipantInCall() override;
-  EncodedImageExtractionResult ExtractData(const EncodedImage& source,
-                                           int coding_entity_id) override;
+  EncodedImageExtractionResult ExtractData(const EncodedImage& source) override;
 
  private:
   // Contains data required to extract frame id from EncodedImage and restore
diff --git a/test/pc/e2e/analyzer/video/single_process_encoded_image_data_injector_unittest.cc b/test/pc/e2e/analyzer/video/single_process_encoded_image_data_injector_unittest.cc
index 9046090..cfeab23 100644
--- a/test/pc/e2e/analyzer/video/single_process_encoded_image_data_injector_unittest.cc
+++ b/test/pc/e2e/analyzer/video/single_process_encoded_image_data_injector_unittest.cc
@@ -45,7 +45,7 @@
   source.SetTimestamp(123456789);
 
   EncodedImageExtractionResult out =
-      injector.ExtractData(injector.InjectData(512, false, source, 1), 2);
+      injector.ExtractData(injector.InjectData(512, false, source));
   EXPECT_EQ(out.id, 512);
   EXPECT_FALSE(out.discard);
   EXPECT_EQ(out.image.size(), 10ul);
@@ -63,7 +63,7 @@
   source.SetTimestamp(123456789);
 
   EncodedImageExtractionResult out =
-      injector.ExtractData(injector.InjectData(512, true, source, 1), 2);
+      injector.ExtractData(injector.InjectData(512, true, source));
   EXPECT_EQ(out.id, 512);
   EXPECT_TRUE(out.discard);
   EXPECT_EQ(out.image.size(), 0ul);
@@ -78,10 +78,10 @@
   EncodedImage source = CreateEncodedImageOfSizeNFilledWithValuesFromX(10, 1);
   source.SetTimestamp(123456789);
 
-  EncodedImage intermediate = injector.InjectData(512, false, source, 1);
+  EncodedImage intermediate = injector.InjectData(512, false, source);
   intermediate.SetSpatialIndex(2);
 
-  EncodedImageExtractionResult out = injector.ExtractData(intermediate, 2);
+  EncodedImageExtractionResult out = injector.ExtractData(intermediate);
   EXPECT_EQ(out.id, 512);
   EXPECT_FALSE(out.discard);
   EXPECT_EQ(out.image.size(), 10ul);
@@ -102,13 +102,13 @@
   EncodedImage source = CreateEncodedImageOfSizeNFilledWithValuesFromX(10, 1);
   source.SetTimestamp(123456789);
 
-  EncodedImage intermediate = injector.InjectData(512, false, source, 1);
+  EncodedImage intermediate = injector.InjectData(512, false, source);
   intermediate.SetSpatialIndex(2);
   intermediate.SetSpatialLayerFrameSize(0, 0);
   intermediate.SetSpatialLayerFrameSize(1, 0);
   intermediate.SetSpatialLayerFrameSize(2, 0);
 
-  EncodedImageExtractionResult out = injector.ExtractData(intermediate, 2);
+  EncodedImageExtractionResult out = injector.ExtractData(intermediate);
   EXPECT_EQ(out.id, 512);
   EXPECT_FALSE(out.discard);
   EXPECT_EQ(out.image.size(), 10ul);
@@ -135,14 +135,14 @@
   EncodedImage source3 = CreateEncodedImageOfSizeNFilledWithValuesFromX(10, 21);
   source3.SetTimestamp(123456720);
 
-  EncodedImage intermediate1 = injector.InjectData(510, false, source1, 1);
-  EncodedImage intermediate2 = injector.InjectData(520, true, source2, 1);
-  EncodedImage intermediate3 = injector.InjectData(520, false, source3, 1);
+  EncodedImage intermediate1 = injector.InjectData(510, false, source1);
+  EncodedImage intermediate2 = injector.InjectData(520, true, source2);
+  EncodedImage intermediate3 = injector.InjectData(520, false, source3);
 
   // Extract ids in different order.
-  EncodedImageExtractionResult out3 = injector.ExtractData(intermediate3, 2);
-  EncodedImageExtractionResult out1 = injector.ExtractData(intermediate1, 2);
-  EncodedImageExtractionResult out2 = injector.ExtractData(intermediate2, 2);
+  EncodedImageExtractionResult out3 = injector.ExtractData(intermediate3);
+  EncodedImageExtractionResult out1 = injector.ExtractData(intermediate1);
+  EncodedImageExtractionResult out2 = injector.ExtractData(intermediate2);
 
   EXPECT_EQ(out1.id, 510);
   EXPECT_FALSE(out1.discard);
@@ -176,9 +176,9 @@
   source3.SetTimestamp(123456710);
 
   // Inject id into 3 images with same frame id.
-  EncodedImage intermediate1 = injector.InjectData(512, false, source1, 1);
-  EncodedImage intermediate2 = injector.InjectData(512, true, source2, 1);
-  EncodedImage intermediate3 = injector.InjectData(512, false, source3, 1);
+  EncodedImage intermediate1 = injector.InjectData(512, false, source1);
+  EncodedImage intermediate2 = injector.InjectData(512, true, source2);
+  EncodedImage intermediate3 = injector.InjectData(512, false, source3);
 
   // Concatenate them into single encoded image, like it can be done in jitter
   // buffer.
@@ -197,7 +197,7 @@
   concatenated.SetSpatialLayerFrameSize(2, intermediate3.size());
 
   // Extract frame id from concatenated image
-  EncodedImageExtractionResult out = injector.ExtractData(concatenated, 2);
+  EncodedImageExtractionResult out = injector.ExtractData(concatenated);
 
   EXPECT_EQ(out.id, 512);
   EXPECT_FALSE(out.discard);
@@ -225,9 +225,9 @@
   source3.SetTimestamp(123456710);
 
   // Inject id into 3 images with same frame id.
-  EncodedImage intermediate1 = injector.InjectData(512, true, source1, 1);
-  EncodedImage intermediate2 = injector.InjectData(512, true, source2, 1);
-  EncodedImage intermediate3 = injector.InjectData(512, true, source3, 1);
+  EncodedImage intermediate1 = injector.InjectData(512, true, source1);
+  EncodedImage intermediate2 = injector.InjectData(512, true, source2);
+  EncodedImage intermediate3 = injector.InjectData(512, true, source3);
 
   // Concatenate them into single encoded image, like it can be done in jitter
   // buffer.
@@ -246,7 +246,7 @@
   concatenated.SetSpatialLayerFrameSize(2, intermediate3.size());
 
   // Extract frame id from concatenated image
-  EncodedImageExtractionResult out = injector.ExtractData(concatenated, 2);
+  EncodedImageExtractionResult out = injector.ExtractData(concatenated);
 
   EXPECT_EQ(out.id, 512);
   EXPECT_TRUE(out.discard);
@@ -264,10 +264,8 @@
   EncodedImage source = CreateEncodedImageOfSizeNFilledWithValuesFromX(10, 1);
   source.SetTimestamp(123456789);
 
-  EncodedImageExtractionResult out =
-      injector.ExtractData(injector.InjectData(/*id=*/512, /*discard=*/false,
-                                               source, /*coding_entity_id=*/1),
-                           /*coding_entity_id=*/2);
+  EncodedImageExtractionResult out = injector.ExtractData(
+      injector.InjectData(/*id=*/512, /*discard=*/false, source));
   EXPECT_EQ(out.id, 512);
   EXPECT_FALSE(out.discard);
   EXPECT_EQ(out.image.size(), 10ul);
@@ -275,10 +273,8 @@
   for (int i = 0; i < 10; ++i) {
     EXPECT_EQ(out.image.data()[i], i + 1);
   }
-  out =
-      injector.ExtractData(injector.InjectData(/*id=*/512, /*discard=*/false,
-                                               source, /*coding_entity_id=*/1),
-                           2);
+  out = injector.ExtractData(
+      injector.InjectData(/*id=*/512, /*discard=*/false, source));
   EXPECT_EQ(out.id, 512);
   EXPECT_FALSE(out.discard);
   EXPECT_EQ(out.image.size(), 10ul);
@@ -295,11 +291,10 @@
   EncodedImage source = CreateEncodedImageOfSizeNFilledWithValuesFromX(10, 1);
   source.SetTimestamp(123456789);
   EncodedImage modified_image = injector.InjectData(
-      /*id=*/512, /*discard=*/false, source, /*coding_entity_id=*/1);
+      /*id=*/512, /*discard=*/false, source);
 
   injector.AddParticipantInCall();
-  EncodedImageExtractionResult out =
-      injector.ExtractData(modified_image, /*coding_entity_id=*/2);
+  EncodedImageExtractionResult out = injector.ExtractData(modified_image);
 
   EXPECT_EQ(out.id, 512);
   EXPECT_FALSE(out.discard);
@@ -317,13 +312,12 @@
   EncodedImage source = CreateEncodedImageOfSizeNFilledWithValuesFromX(10, 1);
   source.SetTimestamp(123456789);
   EncodedImage modified_image = injector.InjectData(
-      /*id=*/512, /*discard=*/false, source, /*coding_entity_id=*/1);
-  injector.ExtractData(modified_image, /*coding_entity_id=*/2);
+      /*id=*/512, /*discard=*/false, source);
+  injector.ExtractData(modified_image);
 
   injector.AddParticipantInCall();
-  injector.ExtractData(modified_image, /*coding_entity_id=*/2);
-  EncodedImageExtractionResult out =
-      injector.ExtractData(modified_image, /*coding_entity_id=*/2);
+  injector.ExtractData(modified_image);
+  EncodedImageExtractionResult out = injector.ExtractData(modified_image);
 
   EXPECT_EQ(out.id, 512);
   EXPECT_FALSE(out.discard);
@@ -352,13 +346,12 @@
   EncodedImage source = CreateEncodedImageOfSizeNFilledWithValuesFromX(10, 1);
   source.SetTimestamp(123456789);
 
-  EncodedImage modified = injector.InjectData(/*id=*/512, /*discard=*/false,
-                                              source, /*coding_entity_id=*/1);
+  EncodedImage modified =
+      injector.InjectData(/*id=*/512, /*discard=*/false, source);
 
-  injector.ExtractData(DeepCopyEncodedImage(modified), /*coding_entity_id=*/2);
-  injector.ExtractData(DeepCopyEncodedImage(modified), /*coding_entity_id=*/2);
-  EXPECT_DEATH(injector.ExtractData(DeepCopyEncodedImage(modified),
-                                    /*coding_entity_id=*/2),
+  injector.ExtractData(DeepCopyEncodedImage(modified));
+  injector.ExtractData(DeepCopyEncodedImage(modified));
+  EXPECT_DEATH(injector.ExtractData(DeepCopyEncodedImage(modified)),
                "Unknown sub_id=0 for frame_id=512");
 }
 #endif  // RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
diff --git a/test/pc/e2e/analyzer/video/video_quality_analyzer_injection_helper.cc b/test/pc/e2e/analyzer/video/video_quality_analyzer_injection_helper.cc
index 6d14558..b1a2220 100644
--- a/test/pc/e2e/analyzer/video/video_quality_analyzer_injection_helper.cc
+++ b/test/pc/e2e/analyzer/video/video_quality_analyzer_injection_helper.cc
@@ -90,8 +90,7 @@
     EncodedImageDataExtractor* extractor)
     : analyzer_(std::move(analyzer)),
       injector_(injector),
-      extractor_(extractor),
-      encoding_entities_id_generator_(std::make_unique<IntIdGenerator>(1)) {
+      extractor_(extractor) {
   RTC_DCHECK(injector_);
   RTC_DCHECK(extractor_);
 }
@@ -107,8 +106,7 @@
     const {
   return std::make_unique<QualityAnalyzingVideoEncoderFactory>(
       peer_name, std::move(delegate), bitrate_multiplier,
-      std::move(stream_required_spatial_index),
-      encoding_entities_id_generator_.get(), injector_, analyzer_.get());
+      std::move(stream_required_spatial_index), injector_, analyzer_.get());
 }
 
 std::unique_ptr<VideoDecoderFactory>
@@ -116,8 +114,7 @@
     absl::string_view peer_name,
     std::unique_ptr<VideoDecoderFactory> delegate) const {
   return std::make_unique<QualityAnalyzingVideoDecoderFactory>(
-      peer_name, std::move(delegate), encoding_entities_id_generator_.get(),
-      extractor_, analyzer_.get());
+      peer_name, std::move(delegate), extractor_, analyzer_.get());
 }
 
 std::unique_ptr<test::TestVideoCapturer::FramePreprocessor>
diff --git a/test/pc/e2e/analyzer/video/video_quality_analyzer_injection_helper.h b/test/pc/e2e/analyzer/video/video_quality_analyzer_injection_helper.h
index 1b6fb01..85874cb 100644
--- a/test/pc/e2e/analyzer/video/video_quality_analyzer_injection_helper.h
+++ b/test/pc/e2e/analyzer/video/video_quality_analyzer_injection_helper.h
@@ -27,7 +27,6 @@
 #include "api/video_codecs/video_encoder_factory.h"
 #include "rtc_base/synchronization/mutex.h"
 #include "test/pc/e2e/analyzer/video/encoded_image_data_injector.h"
-#include "test/pc/e2e/analyzer/video/id_generator.h"
 #include "test/test_video_capturer.h"
 #include "test/testsupport/video_frame_writer.h"
 
@@ -132,8 +131,6 @@
   std::map<std::string,
            std::vector<std::unique_ptr<rtc::VideoSinkInterface<VideoFrame>>>>
       sinks_ RTC_GUARDED_BY(lock_);
-
-  std::unique_ptr<IdGenerator<int>> encoding_entities_id_generator_;
 };
 
 }  // namespace webrtc_pc_e2e
