Use PacketReceiver::DeliverRtpPaket in scenario tests

Change-Id: I36db102d023e4b716ce33a0afcff38b79b59b622

Bug: webrtc:7135
Change-Id: I36db102d023e4b716ce33a0afcff38b79b59b622
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/290883
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Per Kjellander <perkj@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#39090}
This commit is contained in:
Per K 2023-01-12 17:00:22 +01:00 committed by WebRTC LUCI CQ
parent 5b7896be29
commit b3046c25aa
8 changed files with 95 additions and 33 deletions

View File

@ -74,6 +74,7 @@ if (rtc_include_tests && !build_with_chromium) {
"../:test_common", "../:test_common",
"../:test_support", "../:test_support",
"../:video_test_common", "../:video_test_common",
"../../api:array_view",
"../../api:create_frame_generator", "../../api:create_frame_generator",
"../../api:fec_controller_api", "../../api:fec_controller_api",
"../../api:frame_generator_api", "../../api:frame_generator_api",

View File

@ -67,6 +67,20 @@ absl::optional<std::string> CreateAdaptationString(
} }
} // namespace } // namespace
std::vector<RtpExtension> GetAudioRtpExtensions(
const AudioStreamConfig& config) {
std::vector<RtpExtension> extensions;
if (config.stream.in_bandwidth_estimation) {
extensions.push_back({RtpExtension::kTransportSequenceNumberUri,
kTransportSequenceNumberExtensionId});
}
if (config.stream.abs_send_time) {
extensions.push_back(
{RtpExtension::kAbsSendTimeUri, kAbsSendTimeExtensionId});
}
return extensions;
}
SendAudioStream::SendAudioStream( SendAudioStream::SendAudioStream(
CallClient* sender, CallClient* sender,
AudioStreamConfig config, AudioStreamConfig config,
@ -120,13 +134,8 @@ SendAudioStream::SendAudioStream(
if (config.stream.in_bandwidth_estimation) { if (config.stream.in_bandwidth_estimation) {
send_config.send_codec_spec->transport_cc_enabled = true; send_config.send_codec_spec->transport_cc_enabled = true;
send_config.rtp.extensions = {{RtpExtension::kTransportSequenceNumberUri,
kTransportSequenceNumberExtensionId}};
}
if (config.stream.abs_send_time) {
send_config.rtp.extensions.push_back(
{RtpExtension::kAbsSendTimeUri, kAbsSendTimeExtensionId});
} }
send_config.rtp.extensions = GetAudioRtpExtensions(config);
sender_->SendTask([&] { sender_->SendTask([&] {
send_stream_ = sender_->call_->CreateAudioSendStream(send_config); send_stream_ = sender_->call_->CreateAudioSendStream(send_config);
@ -179,10 +188,7 @@ ReceiveAudioStream::ReceiveAudioStream(
recv_config.rtcp_send_transport = feedback_transport; recv_config.rtcp_send_transport = feedback_transport;
recv_config.rtp.remote_ssrc = send_stream->ssrc_; recv_config.rtp.remote_ssrc = send_stream->ssrc_;
receiver->ssrc_media_types_[recv_config.rtp.remote_ssrc] = MediaType::AUDIO; receiver->ssrc_media_types_[recv_config.rtp.remote_ssrc] = MediaType::AUDIO;
if (config.stream.in_bandwidth_estimation) { recv_config.rtp.extensions = GetAudioRtpExtensions(config);
recv_config.rtp.extensions = {{RtpExtension::kTransportSequenceNumberUri,
kTransportSequenceNumberExtensionId}};
}
recv_config.decoder_factory = decoder_factory; recv_config.decoder_factory = decoder_factory;
recv_config.decoder_map = { recv_config.decoder_map = {
{CallTest::kAudioSendPayloadType, {"opus", 48000, 2}}}; {CallTest::kAudioSendPayloadType, {"opus", 48000, 2}}};

View File

@ -100,6 +100,10 @@ class AudioStreamPair {
SendAudioStream send_stream_; SendAudioStream send_stream_;
ReceiveAudioStream receive_stream_; ReceiveAudioStream receive_stream_;
}; };
std::vector<RtpExtension> GetAudioRtpExtensions(
const AudioStreamConfig& config);
} // namespace test } // namespace test
} // namespace webrtc } // namespace webrtc

View File

@ -13,12 +13,15 @@
#include <memory> #include <memory>
#include <utility> #include <utility>
#include "api/media_types.h"
#include "api/rtc_event_log/rtc_event_log.h" #include "api/rtc_event_log/rtc_event_log.h"
#include "api/rtc_event_log/rtc_event_log_factory.h" #include "api/rtc_event_log/rtc_event_log_factory.h"
#include "api/transport/network_types.h" #include "api/transport/network_types.h"
#include "call/call.h" #include "call/call.h"
#include "call/rtp_transport_controller_send_factory.h" #include "call/rtp_transport_controller_send_factory.h"
#include "modules/audio_mixer/audio_mixer_impl.h" #include "modules/audio_mixer/audio_mixer_impl.h"
#include "modules/rtp_rtcp/include/rtp_header_extension_map.h"
#include "modules/rtp_rtcp/source/rtp_packet_received.h"
#include "modules/rtp_rtcp/source/rtp_util.h" #include "modules/rtp_rtcp/source/rtp_util.h"
namespace webrtc { namespace webrtc {
@ -289,16 +292,44 @@ void CallClient::UpdateBitrateConstraints(
}); });
} }
void CallClient::SetAudioReceiveRtpHeaderExtensions(
rtc::ArrayView<RtpExtension> extensions) {
SendTask([this, &extensions]() {
audio_extensions_ = RtpHeaderExtensionMap(extensions);
});
}
void CallClient::SetVideoReceiveRtpHeaderExtensions(
rtc::ArrayView<RtpExtension> extensions) {
SendTask([this, &extensions]() {
video_extensions_ = RtpHeaderExtensionMap(extensions);
});
}
void CallClient::OnPacketReceived(EmulatedIpPacket packet) { void CallClient::OnPacketReceived(EmulatedIpPacket packet) {
MediaType media_type = MediaType::ANY; MediaType media_type = MediaType::ANY;
if (IsRtpPacket(packet.data)) { if (IsRtpPacket(packet.data)) {
media_type = ssrc_media_types_[ParseRtpSsrc(packet.data)]; media_type = ssrc_media_types_[ParseRtpSsrc(packet.data)];
} task_queue_.PostTask([this, media_type,
task_queue_.PostTask( packet = std::move(packet)]() mutable {
[call = call_.get(), media_type, packet = std::move(packet)]() mutable { RtpHeaderExtensionMap& extension_map = media_type == MediaType::AUDIO
call->Receiver()->DeliverPacket(media_type, packet.data, ? audio_extensions_
packet.arrival_time.us()); : video_extensions_;
RtpPacketReceived received_packet(&extension_map, packet.arrival_time);
RTC_CHECK(received_packet.Parse(packet.data));
call_->Receiver()->DeliverRtpPacket(media_type, received_packet,
/*undemuxable_packet_handler=*/
[](const RtpPacketReceived& packet) {
RTC_CHECK_NOTREACHED();
return false;
}); });
});
} else {
task_queue_.PostTask(
[call = call_.get(), packet = std::move(packet)]() mutable {
call->Receiver()->DeliverRtcpPacket(packet.data);
});
}
} }
std::unique_ptr<RtcEventLogOutput> CallClient::GetLogWriter(std::string name) { std::unique_ptr<RtcEventLogOutput> CallClient::GetLogWriter(std::string name) {

View File

@ -16,12 +16,15 @@
#include <utility> #include <utility>
#include <vector> #include <vector>
#include "api/array_view.h"
#include "api/rtc_event_log/rtc_event_log.h" #include "api/rtc_event_log/rtc_event_log.h"
#include "api/rtp_parameters.h"
#include "api/test/time_controller.h" #include "api/test/time_controller.h"
#include "api/units/data_rate.h" #include "api/units/data_rate.h"
#include "call/call.h" #include "call/call.h"
#include "modules/audio_device/include/test_audio_device.h" #include "modules/audio_device/include/test_audio_device.h"
#include "modules/congestion_controller/goog_cc/test/goog_cc_printer.h" #include "modules/congestion_controller/goog_cc/test/goog_cc_printer.h"
#include "modules/rtp_rtcp/include/rtp_header_extension_map.h"
#include "rtc_base/task_queue_for_test.h" #include "rtc_base/task_queue_for_test.h"
#include "test/logging/log_writer.h" #include "test/logging/log_writer.h"
#include "test/network/network_emulation.h" #include "test/network/network_emulation.h"
@ -121,6 +124,11 @@ class CallClient : public EmulatedNetworkReceiverInterface {
void UpdateBitrateConstraints(const BitrateConstraints& constraints); void UpdateBitrateConstraints(const BitrateConstraints& constraints);
void SetRemoteBitrate(DataRate bitrate); void SetRemoteBitrate(DataRate bitrate);
void SetAudioReceiveRtpHeaderExtensions(
rtc::ArrayView<RtpExtension> extensions);
void SetVideoReceiveRtpHeaderExtensions(
rtc::ArrayView<RtpExtension> extensions);
void OnPacketReceived(EmulatedIpPacket packet) override; void OnPacketReceived(EmulatedIpPacket packet) override;
std::unique_ptr<RtcEventLogOutput> GetLogWriter(std::string name); std::unique_ptr<RtcEventLogOutput> GetLogWriter(std::string name);
@ -156,6 +164,8 @@ class CallClient : public EmulatedNetworkReceiverInterface {
std::unique_ptr<Call> call_; std::unique_ptr<Call> call_;
std::unique_ptr<NetworkNodeTransport> transport_; std::unique_ptr<NetworkNodeTransport> transport_;
std::vector<std::pair<EmulatedEndpoint*, uint16_t>> endpoints_; std::vector<std::pair<EmulatedEndpoint*, uint16_t>> endpoints_;
RtpHeaderExtensionMap audio_extensions_;
RtpHeaderExtensionMap video_extensions_;
int next_video_ssrc_index_ = 0; int next_video_ssrc_index_ = 0;
int next_video_local_ssrc_index_ = 0; int next_video_local_ssrc_index_ = 0;

View File

@ -20,6 +20,7 @@
#include "rtc_base/socket_address.h" #include "rtc_base/socket_address.h"
#include "test/logging/file_log_writer.h" #include "test/logging/file_log_writer.h"
#include "test/network/network_emulation.h" #include "test/network/network_emulation.h"
#include "test/scenario/video_stream.h"
#include "test/testsupport/file_utils.h" #include "test/testsupport/file_utils.h"
ABSL_FLAG(bool, scenario_logs, false, "Save logs from scenario framework."); ABSL_FLAG(bool, scenario_logs, false, "Save logs from scenario framework.");
@ -224,6 +225,9 @@ VideoStreamPair* Scenario::CreateVideoStream(
VideoStreamPair* Scenario::CreateVideoStream( VideoStreamPair* Scenario::CreateVideoStream(
std::pair<CallClient*, CallClient*> clients, std::pair<CallClient*, CallClient*> clients,
VideoStreamConfig config) { VideoStreamConfig config) {
std::vector<RtpExtension> extensions = GetVideoRtpExtensions(config);
clients.first->SetVideoReceiveRtpHeaderExtensions(extensions);
clients.second->SetVideoReceiveRtpHeaderExtensions(extensions);
video_streams_.emplace_back( video_streams_.emplace_back(
new VideoStreamPair(clients.first, clients.second, config)); new VideoStreamPair(clients.first, clients.second, config));
return video_streams_.back().get(); return video_streams_.back().get();
@ -240,6 +244,9 @@ AudioStreamPair* Scenario::CreateAudioStream(
AudioStreamPair* Scenario::CreateAudioStream( AudioStreamPair* Scenario::CreateAudioStream(
std::pair<CallClient*, CallClient*> clients, std::pair<CallClient*, CallClient*> clients,
AudioStreamConfig config) { AudioStreamConfig config) {
std::vector<RtpExtension> extensions = GetAudioRtpExtensions(config);
clients.first->SetAudioReceiveRtpHeaderExtensions(extensions);
clients.second->SetAudioReceiveRtpHeaderExtensions(extensions);
audio_streams_.emplace_back( audio_streams_.emplace_back(
new AudioStreamPair(clients.first, audio_encoder_factory_, clients.second, new AudioStreamPair(clients.first, audio_encoder_factory_, clients.second,
audio_decoder_factory_, config)); audio_decoder_factory_, config));

View File

@ -80,24 +80,6 @@ VideoEncoderConfig::ContentType ConvertContentType(
} }
} }
std::vector<RtpExtension> GetVideoRtpExtensions(
const VideoStreamConfig config) {
std::vector<RtpExtension> res = {
RtpExtension(RtpExtension::kVideoContentTypeUri,
kVideoContentTypeExtensionId),
RtpExtension(RtpExtension::kVideoRotationUri,
kVideoRotationRtpExtensionId)};
if (config.stream.packet_feedback) {
res.push_back(RtpExtension(RtpExtension::kTransportSequenceNumberUri,
kTransportSequenceNumberExtensionId));
}
if (config.stream.abs_send_time) {
res.push_back(
RtpExtension(RtpExtension::kAbsSendTimeUri, kAbsSendTimeExtensionId));
}
return res;
}
std::string TransformFilePath(std::string path) { std::string TransformFilePath(std::string path) {
static const std::string resource_prefix = "res://"; static const std::string resource_prefix = "res://";
int ext_pos = path.rfind('.'); int ext_pos = path.rfind('.');
@ -356,6 +338,24 @@ VideoReceiveStreamInterface::Config CreateVideoReceiveStreamConfig(
} }
} // namespace } // namespace
std::vector<RtpExtension> GetVideoRtpExtensions(
const VideoStreamConfig config) {
std::vector<RtpExtension> res = {
RtpExtension(RtpExtension::kVideoContentTypeUri,
kVideoContentTypeExtensionId),
RtpExtension(RtpExtension::kVideoRotationUri,
kVideoRotationRtpExtensionId)};
if (config.stream.packet_feedback) {
res.push_back(RtpExtension(RtpExtension::kTransportSequenceNumberUri,
kTransportSequenceNumberExtensionId));
}
if (config.stream.abs_send_time) {
res.push_back(
RtpExtension(RtpExtension::kAbsSendTimeUri, kAbsSendTimeExtensionId));
}
return res;
}
SendVideoStream::SendVideoStream(CallClient* sender, SendVideoStream::SendVideoStream(CallClient* sender,
VideoStreamConfig config, VideoStreamConfig config,
Transport* send_transport, Transport* send_transport,

View File

@ -129,6 +129,9 @@ class VideoStreamPair {
SendVideoStream send_stream_; SendVideoStream send_stream_;
ReceiveVideoStream receive_stream_; ReceiveVideoStream receive_stream_;
}; };
std::vector<RtpExtension> GetVideoRtpExtensions(const VideoStreamConfig config);
} // namespace test } // namespace test
} // namespace webrtc } // namespace webrtc