Use PacketReceiver::DeliverRtpPacket in RtpReplayer
Bug: webrtc:7135
Change-Id: Ie6df771f200b19693243660897454d06e4b6dc31
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/291321
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Commit-Queue: Per Kjellander <perkj@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#39181}
diff --git a/test/fuzzers/utils/BUILD.gn b/test/fuzzers/utils/BUILD.gn
index 5b85f41..c5744fc 100644
--- a/test/fuzzers/utils/BUILD.gn
+++ b/test/fuzzers/utils/BUILD.gn
@@ -19,6 +19,7 @@
"../../../api/task_queue:default_task_queue_factory",
"../../../api/test/video:function_video_factory",
"../../../api/transport:field_trial_based_config",
+ "../../../api/units:timestamp",
"../../../api/video_codecs:video_codecs_api",
"../../../call",
"../../../call:call_interfaces",
diff --git a/test/fuzzers/utils/rtp_replayer.cc b/test/fuzzers/utils/rtp_replayer.cc
index 91cedaa..12743d8 100644
--- a/test/fuzzers/utils/rtp_replayer.cc
+++ b/test/fuzzers/utils/rtp_replayer.cc
@@ -18,7 +18,9 @@
#include "absl/memory/memory.h"
#include "api/task_queue/default_task_queue_factory.h"
#include "api/transport/field_trial_based_config.h"
+#include "api/units/timestamp.h"
#include "modules/rtp_rtcp/source/rtp_packet.h"
+#include "modules/rtp_rtcp/source/rtp_packet_received.h"
#include "rtc_base/strings/json.h"
#include "system_wrappers/include/clock.h"
#include "test/call_config_utils.h"
@@ -60,6 +62,16 @@
return;
}
+ RtpHeaderExtensionMap extensions(/*extmap_allow_mixed=*/true);
+ // Skip i = 0 since it maps to kRtpExtensionNone.
+ for (int i = 1; i < kRtpExtensionNumberOfExtensions; i++) {
+ RTPExtensionType extension_type = static_cast<RTPExtensionType>(i);
+ // Extensions are registered with an ID, which you signal to the
+ // peer so they know what to expect. This code only cares about
+ // parsing so the value of the ID isn't relevant.
+ extensions.RegisterByType(i, extension_type);
+ }
+
// Setup the video streams based on the configuration.
webrtc::RtcEventLogNull event_log;
std::unique_ptr<TaskQueueFactory> task_queue_factory =
@@ -76,7 +88,7 @@
receive_stream->Start();
}
- ReplayPackets(&fake_clock, call.get(), rtp_reader.get());
+ ReplayPackets(&fake_clock, call.get(), rtp_reader.get(), extensions);
for (const auto& receive_stream : stream_state->receive_streams) {
call->DestroyVideoReceiveStream(receive_stream);
@@ -143,12 +155,12 @@
return rtp_reader;
}
-void RtpReplayer::ReplayPackets(rtc::FakeClock* clock,
- Call* call,
- test::RtpFileReader* rtp_reader) {
+void RtpReplayer::ReplayPackets(
+ rtc::FakeClock* clock,
+ Call* call,
+ test::RtpFileReader* rtp_reader,
+ const RtpPacketReceived::ExtensionManager& extensions) {
int64_t replay_start_ms = -1;
- int num_packets = 0;
- std::map<uint32_t, int> unknown_packets;
while (true) {
int64_t now_ms = rtc::TimeMillis();
@@ -169,43 +181,20 @@
std::min(deliver_in_ms, static_cast<int64_t>(100))));
}
- rtc::CopyOnWriteBuffer packet_buffer(packet.data, packet.length);
- ++num_packets;
- switch (call->Receiver()->DeliverPacket(webrtc::MediaType::VIDEO,
- packet_buffer,
- /* packet_time_us */ -1)) {
- case PacketReceiver::DELIVERY_OK:
- break;
- case PacketReceiver::DELIVERY_UNKNOWN_SSRC: {
- webrtc::RtpPacket header;
- header.Parse(packet_buffer);
- if (unknown_packets[header.Ssrc()] == 0) {
- RTC_LOG(LS_ERROR) << "Unknown SSRC: " << header.Ssrc();
- }
- ++unknown_packets[header.Ssrc()];
- break;
- }
- case PacketReceiver::DELIVERY_PACKET_ERROR: {
- RTC_LOG(LS_ERROR)
- << "Packet error, corrupt packets or incorrect setup?";
- webrtc::RtpPacket header;
- header.Parse(packet_buffer);
- RTC_LOG(LS_ERROR) << "Packet packet_length=" << packet.length
- << " payload_type=" << header.PayloadType()
- << " sequence_number=" << header.SequenceNumber()
- << " time_stamp=" << header.Timestamp()
- << " ssrc=" << header.Ssrc();
- break;
- }
+ RtpPacketReceived received_packet(
+ &extensions, Timestamp::Micros(clock->TimeNanos() / 1000));
+ if (!received_packet.Parse(packet.data, packet.length)) {
+ RTC_LOG(LS_ERROR) << "Packet error, corrupt packets or incorrect setup?";
+ break;
}
- }
- RTC_LOG(LS_INFO) << "num_packets: " << num_packets;
- for (const auto& unknown_packet : unknown_packets) {
- RTC_LOG(LS_ERROR) << "Packets for unknown ssrc " << unknown_packet.first
- << ":" << unknown_packet.second;
+ call->Receiver()->DeliverRtpPacket(
+ MediaType::VIDEO, std::move(received_packet),
+ [&](const RtpPacketReceived& parsed_packet) {
+ RTC_LOG(LS_ERROR) << "Unknown SSRC: " << parsed_packet.Ssrc();
+ return false;
+ });
}
}
-
} // namespace test
} // namespace webrtc
diff --git a/test/fuzzers/utils/rtp_replayer.h b/test/fuzzers/utils/rtp_replayer.h
index b595118..ae94a64 100644
--- a/test/fuzzers/utils/rtp_replayer.h
+++ b/test/fuzzers/utils/rtp_replayer.h
@@ -82,7 +82,8 @@
// Replays each packet to from the RtpDump.
static void ReplayPackets(rtc::FakeClock* clock,
Call* call,
- test::RtpFileReader* rtp_reader);
+ test::RtpFileReader* rtp_reader,
+ const RtpHeaderExtensionMap& extensions);
}; // class RtpReplayer
} // namespace test