Ensure VideoRtpReplayer use new PacketReceiver::DeliverRtp packet.

Receivers no longer need to set extensions in the configuration. That field will be removed in a follow up.

Tested with:
video_loopback --rtp_dump_name="./my.rtpdump" --duration=10
video_replay --input_file=./my.rtpdump

Bug: webrtc:14795
Change-Id: I952cd487cb2f3be8be01a90f6a2312f1fef5d93e
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/290995
Auto-Submit: Per Kjellander <perkj@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#39136}
diff --git a/rtc_tools/BUILD.gn b/rtc_tools/BUILD.gn
index 0d97b85..9b1f1fe 100644
--- a/rtc_tools/BUILD.gn
+++ b/rtc_tools/BUILD.gn
@@ -247,10 +247,12 @@
     sources = [ "video_replay.cc" ]
     deps = [
       "../api:field_trials",
+      "../api:rtp_parameters",
       "../api/rtc_event_log",
       "../api/task_queue:default_task_queue_factory",
       "../api/test/video:function_video_factory",
       "../api/transport:field_trial_based_config",
+      "../api/units:timestamp",
       "../api/video:video_frame",
       "../api/video_codecs:video_codecs_api",
       "../call",
diff --git a/rtc_tools/video_replay.cc b/rtc_tools/video_replay.cc
index 6fc9a98..405948d 100644
--- a/rtc_tools/video_replay.cc
+++ b/rtc_tools/video_replay.cc
@@ -17,16 +17,20 @@
 #include "absl/flags/flag.h"
 #include "absl/flags/parse.h"
 #include "api/field_trials.h"
+#include "api/media_types.h"
 #include "api/rtc_event_log/rtc_event_log.h"
 #include "api/task_queue/default_task_queue_factory.h"
 #include "api/test/video/function_video_decoder_factory.h"
 #include "api/transport/field_trial_based_config.h"
+#include "api/units/timestamp.h"
 #include "api/video/video_codec_type.h"
 #include "api/video_codecs/video_decoder.h"
 #include "call/call.h"
 #include "common_video/libyuv/include/webrtc_libyuv.h"
 #include "media/engine/internal_decoder_factory.h"
+#include "modules/rtp_rtcp/include/rtp_header_extension_map.h"
 #include "modules/rtp_rtcp/source/rtp_packet.h"
+#include "modules/rtp_rtcp/source/rtp_packet_received.h"
 #include "modules/rtp_rtcp/source/rtp_util.h"
 #include "modules/video_coding/utility/ivf_file_writer.h"
 #include "rtc_base/checks.h"
@@ -401,15 +405,6 @@
     stream_state->flexfec_streams.push_back(flexfec_stream);
   }
 
-  if (absl::GetFlag(FLAGS_transmission_offset_id) != -1) {
-    receive_config.rtp.extensions.push_back(
-        RtpExtension(RtpExtension::kTimestampOffsetUri,
-                     absl::GetFlag(FLAGS_transmission_offset_id)));
-  }
-  if (absl::GetFlag(FLAGS_abs_send_time_id) != -1) {
-    receive_config.rtp.extensions.push_back(RtpExtension(
-        RtpExtension::kAbsSendTimeUri, absl::GetFlag(FLAGS_abs_send_time_id)));
-  }
   receive_config.renderer = stream_state->sinks.back().get();
 
   // Setup the receiving stream
@@ -554,12 +549,24 @@
 
  private:
   void ReplayPackets() {
+    enum class Result { kOk, kUnknownSsrc, kParsingFailed };
     int64_t replay_start_ms = -1;
     int num_packets = 0;
     std::map<uint32_t, int> unknown_packets;
     rtc::Event event(/*manual_reset=*/false, /*initially_signalled=*/false);
     uint32_t start_timestamp = absl::GetFlag(FLAGS_start_timestamp);
     uint32_t stop_timestamp = absl::GetFlag(FLAGS_stop_timestamp);
+
+    RtpHeaderExtensionMap extensions;
+    if (absl::GetFlag(FLAGS_transmission_offset_id) != -1) {
+      extensions.RegisterByUri(absl::GetFlag(FLAGS_transmission_offset_id),
+                               RtpExtension::kTimestampOffsetUri);
+    }
+    if (absl::GetFlag(FLAGS_abs_send_time_id) != -1) {
+      extensions.RegisterByUri(absl::GetFlag(FLAGS_abs_send_time_id),
+                               RtpExtension::kAbsSendTimeUri);
+    }
+
     while (true) {
       int64_t now_ms = CurrentTimeMs();
       if (replay_start_ms == -1) {
@@ -592,27 +599,39 @@
       SleepOrAdvanceTime(deliver_in_ms);
 
       ++num_packets;
-      PacketReceiver::DeliveryStatus result = PacketReceiver::DELIVERY_OK;
+
+      Result result = Result::kOk;
       worker_thread_->PostTask([&]() {
-        MediaType media_type =
-            IsRtcpPacket(packet_buffer) ? MediaType::ANY : MediaType::VIDEO;
-        result = call_->Receiver()->DeliverPacket(media_type,
-                                                  std::move(packet_buffer),
-                                                  /* packet_time_us */ -1);
+        if (IsRtcpPacket(packet_buffer)) {
+          call_->Receiver()->DeliverRtcpPacket(std::move(packet_buffer));
+        }
+        RtpPacketReceived received_packet(&extensions,
+                                          Timestamp::Millis(CurrentTimeMs()));
+        if (!received_packet.Parse(std::move(packet_buffer))) {
+          result = Result::kParsingFailed;
+          return;
+        }
+        call_->Receiver()->DeliverRtpPacket(
+            MediaType::VIDEO, received_packet,
+            [&result](const RtpPacketReceived& parsed_packet) -> bool {
+              result = Result::kUnknownSsrc;
+              // No point in trying to demux again.
+              return false;
+            });
         event.Set();
       });
       event.Wait(/*give_up_after=*/TimeDelta::Seconds(10));
 
       switch (result) {
-        case PacketReceiver::DELIVERY_OK:
+        case Result::kOk:
           break;
-        case PacketReceiver::DELIVERY_UNKNOWN_SSRC: {
+        case Result::kUnknownSsrc: {
           if (unknown_packets[header.Ssrc()] == 0)
             fprintf(stderr, "Unknown SSRC: %u!\n", header.Ssrc());
           ++unknown_packets[header.Ssrc()];
           break;
         }
-        case PacketReceiver::DELIVERY_PACKET_ERROR: {
+        case Result::kParsingFailed: {
           fprintf(stderr,
                   "Packet error, corrupt packets or incorrect setup?\n");
           fprintf(stderr, "Packet len=%zu pt=%u seq=%u ts=%u ssrc=0x%8x\n",