diff --git a/api/video/rtp_video_frame_assembler.cc b/api/video/rtp_video_frame_assembler.cc
index 8f3d04c..2629040 100644
--- a/api/video/rtp_video_frame_assembler.cc
+++ b/api/video/rtp_video_frame_assembler.cc
@@ -92,6 +92,11 @@
 
 RtpVideoFrameAssembler::FrameVector RtpVideoFrameAssembler::Impl::InsertPacket(
     const RtpPacketReceived& rtp_packet) {
+  if (rtp_packet.payload_size() == 0) {
+    ClearOldData(rtp_packet.SequenceNumber());
+    return UpdateWithPadding(rtp_packet.SequenceNumber());
+  }
+
   absl::optional<VideoRtpDepacketizer::ParsedRtpPayload> parsed_payload =
       depacketizer_->Parse(rtp_packet.PayloadBuffer());
 
@@ -99,11 +104,6 @@
     return {};
   }
 
-  if (parsed_payload->video_payload.size() == 0) {
-    ClearOldData(rtp_packet.SequenceNumber());
-    return UpdateWithPadding(rtp_packet.SequenceNumber());
-  }
-
   if (rtp_packet.HasExtension<RtpDependencyDescriptorExtension>()) {
     if (!ParseDependenciesDescriptorExtension(rtp_packet,
                                               parsed_payload->video_header)) {
diff --git a/api/video/rtp_video_frame_assembler_unittests.cc b/api/video/rtp_video_frame_assembler_unittests.cc
index 916a83c..fd70f72 100644
--- a/api/video/rtp_video_frame_assembler_unittests.cc
+++ b/api/video/rtp_video_frame_assembler_unittests.cc
@@ -105,6 +105,13 @@
   RtpPacketToSend packet_to_send_;
 };
 
+RtpPacketReceived PaddingPacket(uint16_t seq_num) {
+  RtpPacketReceived padding_packet;
+  padding_packet.SetSequenceNumber(seq_num);
+  padding_packet.SetPadding(224);
+  return padding_packet;
+}
+
 void AppendFrames(RtpVideoFrameAssembler::FrameVector from,
                   RtpVideoFrameAssembler::FrameVector& to) {
   to.insert(to.end(), std::make_move_iterator(from.begin()),
@@ -389,26 +396,13 @@
                frames);
 
   ASSERT_THAT(frames, SizeIs(1));
-
   EXPECT_THAT(frames[0]->Id(), Eq(123));
   EXPECT_THAT(Payload(frames[0]), ElementsAreArray(kPayload));
   EXPECT_THAT(References(frames[0]), IsEmpty());
 
-  // Padding packets have no bitstream data. An easy way to generate one is to
-  // build a normal packet and then simply remove the bitstream portion of the
-  // payload.
-  RtpPacketReceived padding_packet = PacketBuilder(PayloadFormat::kGeneric)
-                                         .WithPayload(kPayload)
-                                         .WithVideoHeader(video_header)
-                                         .WithSeqNum(124)
-                                         .Build();
-  // The payload descriptor is one byte, keep it.
-  padding_packet.SetPayloadSize(1);
-
-  AppendFrames(assembler.InsertPacket(padding_packet), frames);
+  AppendFrames(assembler.InsertPacket(PaddingPacket(/*seq_num=*/124)), frames);
 
   ASSERT_THAT(frames, SizeIs(2));
-
   EXPECT_THAT(frames[1]->Id(), Eq(125));
   EXPECT_THAT(Payload(frames[1]), ElementsAreArray(kPayload));
   EXPECT_THAT(References(frames[1]), UnorderedElementsAre(123));
@@ -464,17 +458,8 @@
                                          .Build()),
               SizeIs(1));
 
-  // Padding packets have no bitstream data. An easy way to generate one is to
-  // build a normal packet and then simply remove the bitstream portion of the
-  // payload.
-  RtpPacketReceived padding_packet = PacketBuilder(PayloadFormat::kGeneric)
-                                         .WithPayload(kPayload)
-                                         .WithVideoHeader(video_header)
-                                         .WithSeqNum(2000)
-                                         .Build();
-  // The payload descriptor is one byte, keep it.
-  padding_packet.SetPayloadSize(1);
-  EXPECT_THAT(assembler.InsertPacket(padding_packet), SizeIs(0));
+  EXPECT_THAT(assembler.InsertPacket(PaddingPacket(/*seq_num=*/2000)),
+              SizeIs(0));
 
   EXPECT_THAT(assembler.InsertPacket(PacketBuilder(PayloadFormat::kGeneric)
                                          .WithPayload(kPayload)
