diff --git a/modules/rtp_rtcp/source/ulpfec_generator.cc b/modules/rtp_rtcp/source/ulpfec_generator.cc
index ba62d4e..8dc9752 100644
--- a/modules/rtp_rtcp/source/ulpfec_generator.cc
+++ b/modules/rtp_rtcp/source/ulpfec_generator.cc
@@ -113,20 +113,6 @@
 
 UlpfecGenerator::~UlpfecGenerator() = default;
 
-std::unique_ptr<RedPacket> UlpfecGenerator::BuildRedPacket(
-    const uint8_t* data_buffer,
-    size_t payload_length,
-    size_t rtp_header_length,
-    int red_payload_type) {
-  std::unique_ptr<RedPacket> red_packet(new RedPacket(
-      payload_length + kRedForFecHeaderLength + rtp_header_length));
-  int payload_type = data_buffer[1] & 0x7f;
-  red_packet->CreateHeader(data_buffer, rtp_header_length, red_payload_type,
-                           payload_type);
-  red_packet->AssignPayload(data_buffer + rtp_header_length, payload_length);
-  return red_packet;
-}
-
 void UlpfecGenerator::SetFecParameters(const FecProtectionParams& params) {
   RTC_DCHECK_GE(params.fec_rate, 0);
   RTC_DCHECK_LE(params.fec_rate, 255);
diff --git a/modules/rtp_rtcp/source/ulpfec_generator.h b/modules/rtp_rtcp/source/ulpfec_generator.h
index bd3e478..3de7ae2 100644
--- a/modules/rtp_rtcp/source/ulpfec_generator.h
+++ b/modules/rtp_rtcp/source/ulpfec_generator.h
@@ -48,11 +48,6 @@
   UlpfecGenerator();
   ~UlpfecGenerator();
 
-  static std::unique_ptr<RedPacket> BuildRedPacket(const uint8_t* data_buffer,
-                                                   size_t payload_length,
-                                                   size_t rtp_header_length,
-                                                   int red_payload_type);
-
   void SetFecParameters(const FecProtectionParams& params);
 
   // Adds a media packet to the internal buffer. When enough media packets
diff --git a/modules/rtp_rtcp/source/ulpfec_generator_unittest.cc b/modules/rtp_rtcp/source/ulpfec_generator_unittest.cc
index a4ab6de..6586d0d 100644
--- a/modules/rtp_rtcp/source/ulpfec_generator_unittest.cc
+++ b/modules/rtp_rtcp/source/ulpfec_generator_unittest.cc
@@ -167,38 +167,4 @@
                red_packets.front().get(), false);
 }
 
-TEST_F(UlpfecGeneratorTest, BuildRedPacket) {
-  packet_generator_.NewFrame(1);
-  std::unique_ptr<AugmentedPacket> packet = packet_generator_.NextPacket(0, 10);
-  std::unique_ptr<RedPacket> red_packet = UlpfecGenerator::BuildRedPacket(
-      packet->data, packet->length - kRtpHeaderSize, kRtpHeaderSize,
-      kRedPayloadType);
-  EXPECT_EQ(packet->length + 1, red_packet->length());
-  VerifyHeader(packet->header.header.sequenceNumber,
-               packet->header.header.timestamp, kRedPayloadType,
-               packet->header.header.payloadType, red_packet.get(),
-               true);  // Marker bit set.
-  for (int i = 0; i < 10; ++i) {
-    EXPECT_EQ(i, red_packet->data()[kRtpHeaderSize + 1 + i]);
-  }
-}
-
-TEST_F(UlpfecGeneratorTest, BuildRedPacketWithEmptyPayload) {
-  constexpr size_t kNumFrames = 1;
-  constexpr size_t kPayloadLength = 0;
-  constexpr size_t kRedForFecHeaderLength = 1;
-
-  packet_generator_.NewFrame(kNumFrames);
-  std::unique_ptr<AugmentedPacket> packet(
-      packet_generator_.NextPacket(0, kPayloadLength));
-  std::unique_ptr<RedPacket> red_packet = UlpfecGenerator::BuildRedPacket(
-      packet->data, packet->length - kRtpHeaderSize, kRtpHeaderSize,
-      kRedPayloadType);
-  EXPECT_EQ(packet->length + kRedForFecHeaderLength, red_packet->length());
-  VerifyHeader(packet->header.header.sequenceNumber,
-               packet->header.header.timestamp, kRedPayloadType,
-               packet->header.header.payloadType, red_packet.get(),
-               true);  // Marker bit set.
-}
-
 }  // namespace webrtc
diff --git a/test/fuzzers/ulpfec_generator_fuzzer.cc b/test/fuzzers/ulpfec_generator_fuzzer.cc
index 0642baa..03728f6 100644
--- a/test/fuzzers/ulpfec_generator_fuzzer.cc
+++ b/test/fuzzers/ulpfec_generator_fuzzer.cc
@@ -43,8 +43,6 @@
     ByteWriter<uint16_t>::WriteBigEndian(&packet[2], seq_num++);
     i += payload_size + rtp_header_length;
     // Make sure sequence numbers are increasing.
-    std::unique_ptr<RedPacket> red_packet = UlpfecGenerator::BuildRedPacket(
-        packet.get(), payload_size, rtp_header_length, kRedPayloadType);
     const bool protect = data[i++] % 2 == 1;
     if (protect) {
       generator.AddRtpPacketAndGenerateFec(packet.get(), payload_size,
