diff --git a/modules/video_coding/frame_object.cc b/modules/video_coding/frame_object.cc
index 000c36a..750c977 100644
--- a/modules/video_coding/frame_object.cc
+++ b/modules/video_coding/frame_object.cc
@@ -27,11 +27,12 @@
                                uint16_t last_seq_num,
                                size_t frame_size,
                                int times_nacked,
-                               int64_t received_time)
+                               int64_t first_packet_received_time,
+                               int64_t last_packet_received_time)
     : packet_buffer_(packet_buffer),
       first_seq_num_(first_seq_num),
       last_seq_num_(last_seq_num),
-      received_time_(received_time),
+      last_packet_received_time_(last_packet_received_time),
       times_nacked_(times_nacked) {
   VCMPacket* first_packet = packet_buffer_->GetPacket(first_seq_num);
   RTC_CHECK(first_packet);
@@ -100,9 +101,9 @@
         ntp_time_ms_ +
         last_packet->video_header.video_timing.network2_timestamp_delta_ms;
   }
+  timing_.receive_start_ms = first_packet_received_time;
+  timing_.receive_finish_ms = last_packet_received_time;
   timing_.flags = last_packet->video_header.video_timing.flags;
-  timing_.receive_start_ms = first_packet->receive_time_ms;
-  timing_.receive_finish_ms = last_packet->receive_time_ms;
   is_last_spatial_layer = last_packet->markerBit;
 }
 
@@ -131,7 +132,7 @@
 }
 
 int64_t RtpFrameObject::ReceivedTime() const {
-  return received_time_;
+  return last_packet_received_time_;
 }
 
 int64_t RtpFrameObject::RenderTime() const {
diff --git a/modules/video_coding/frame_object.h b/modules/video_coding/frame_object.h
index bb4513c..5a3efd9 100644
--- a/modules/video_coding/frame_object.h
+++ b/modules/video_coding/frame_object.h
@@ -29,7 +29,8 @@
                  uint16_t last_seq_num,
                  size_t frame_size,
                  int times_nacked,
-                 int64_t received_time);
+                 int64_t first_packet_received_time,
+                 int64_t last_packet_received_time);
 
   ~RtpFrameObject() override;
   uint16_t first_seq_num() const;
@@ -53,7 +54,7 @@
   VideoCodecType codec_type_;
   uint16_t first_seq_num_;
   uint16_t last_seq_num_;
-  int64_t received_time_;
+  int64_t last_packet_received_time_;
 
   // Equal to times nacked of the packet with the highet times nacked
   // belonging to this frame.
diff --git a/modules/video_coding/packet_buffer.cc b/modules/video_coding/packet_buffer.cc
index 0a2b8bf..80c6666 100644
--- a/modules/video_coding/packet_buffer.cc
+++ b/modules/video_coding/packet_buffer.cc
@@ -285,6 +285,8 @@
       size_t frame_size = 0;
       int max_nack_count = -1;
       uint16_t start_seq_num = seq_num;
+      int64_t min_recv_time = data_buffer_[index].receive_time_ms;
+      int64_t max_recv_time = data_buffer_[index].receive_time_ms;
 
       // Find the start index by searching backward until the packet with
       // the |frame_begin| flag is set.
@@ -306,6 +308,11 @@
             std::max(max_nack_count, data_buffer_[start_index].timesNacked);
         sequence_buffer_[start_index].frame_created = true;
 
+        min_recv_time =
+            std::min(min_recv_time, data_buffer_[start_index].receive_time_ms);
+        max_recv_time =
+            std::max(max_recv_time, data_buffer_[start_index].receive_time_ms);
+
         if (!is_h264 && sequence_buffer_[start_index].frame_begin)
           break;
 
@@ -393,7 +400,7 @@
 
       found_frames.emplace_back(
           new RtpFrameObject(this, start_seq_num, seq_num, frame_size,
-                             max_nack_count, clock_->TimeInMilliseconds()));
+                             max_nack_count, min_recv_time, max_recv_time));
     }
     ++seq_num;
   }
diff --git a/modules/video_coding/rtp_frame_reference_finder_unittest.cc b/modules/video_coding/rtp_frame_reference_finder_unittest.cc
index 50a8779..1e8a9c5 100644
--- a/modules/video_coding/rtp_frame_reference_finder_unittest.cc
+++ b/modules/video_coding/rtp_frame_reference_finder_unittest.cc
@@ -92,7 +92,7 @@
     ref_packet_buffer_->InsertPacket(&packet);
 
     std::unique_ptr<RtpFrameObject> frame(new RtpFrameObject(
-        ref_packet_buffer_, seq_num_start, seq_num_end, 0, 0, 0));
+        ref_packet_buffer_, seq_num_start, seq_num_end, 0, 0, 0, 0));
     reference_finder_->ManageFrame(std::move(frame));
   }
 
@@ -123,7 +123,7 @@
     }
 
     std::unique_ptr<RtpFrameObject> frame(new RtpFrameObject(
-        ref_packet_buffer_, seq_num_start, seq_num_end, 0, 0, 0));
+        ref_packet_buffer_, seq_num_start, seq_num_end, 0, 0, 0, 0));
     reference_finder_->ManageFrame(std::move(frame));
   }
 
@@ -164,7 +164,7 @@
     }
 
     std::unique_ptr<RtpFrameObject> frame(new RtpFrameObject(
-        ref_packet_buffer_, seq_num_start, seq_num_end, 0, 0, 0));
+        ref_packet_buffer_, seq_num_start, seq_num_end, 0, 0, 0, 0));
     reference_finder_->ManageFrame(std::move(frame));
   }
 
@@ -202,7 +202,7 @@
     }
 
     std::unique_ptr<RtpFrameObject> frame(new RtpFrameObject(
-        ref_packet_buffer_, seq_num_start, seq_num_end, 0, 0, 0));
+        ref_packet_buffer_, seq_num_start, seq_num_end, 0, 0, 0, 0));
     reference_finder_->ManageFrame(std::move(frame));
   }
 
diff --git a/test/fuzzers/rtp_frame_reference_finder_fuzzer.cc b/test/fuzzers/rtp_frame_reference_finder_fuzzer.cc
index 57d7a96..b171e3d 100644
--- a/test/fuzzers/rtp_frame_reference_finder_fuzzer.cc
+++ b/test/fuzzers/rtp_frame_reference_finder_fuzzer.cc
@@ -111,7 +111,7 @@
 
   while (reader.MoreToRead()) {
     auto frame = absl::make_unique<video_coding::RtpFrameObject>(
-        pb, reader.GetNum<uint16_t>(), reader.GetNum<uint16_t>(), 0, 0, 0);
+        pb, reader.GetNum<uint16_t>(), reader.GetNum<uint16_t>(), 0, 0, 0, 0);
     reference_finder.ManageFrame(std::move(frame));
   }
 }
diff --git a/video/buffered_frame_decryptor_unittest.cc b/video/buffered_frame_decryptor_unittest.cc
index 95c647e..8a0c951 100644
--- a/video/buffered_frame_decryptor_unittest.cc
+++ b/video/buffered_frame_decryptor_unittest.cc
@@ -90,7 +90,7 @@
 
     return std::unique_ptr<video_coding::RtpFrameObject>(
         new video_coding::RtpFrameObject(fake_packet_buffer_.get(), seq_num_,
-                                         seq_num_, 0, 0, 0));
+                                         seq_num_, 0, 0, 0, 0));
   }
 
  protected:
