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:
parent
5b7896be29
commit
b3046c25aa
@ -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",
|
||||||
|
|||||||
@ -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}}};
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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));
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user