Reland "Change CallTests to use new PacketReceiver::DeliverRtp and PacketReceiver::DeliverRtcp"
This reverts commit 3e61f881cd2ba9040a07371e0ba6dda902aa60ae. Reason for revert: Issue fixed in https://webrtc-review.googlesource.com/c/src/+/291104 Original change's description: > Revert "Change CallTests to use new PacketReceiver::DeliverRtp and PacketReceiver::DeliverRtcp" > > This reverts commit 3b96f2c770df7691df90c2cc1be40509a76ae425. > > Reason for revert: Seems to cause test failures and perf regressions in tests: webrtc:14833, and CallPerfTest.Min_Bitrate_VideoAndAudio > > > Original change's description: > > Change CallTests to use new PacketReceiver::DeliverRtp and PacketReceiver::DeliverRtcp > > > > PacketReceiver::DeliverRtp requires delivered packets to have extensions already mapped. > > Therefore DirectTransport is provided with the extension mapping. > > > > CallTests and tests derived from CallTest create transports in different ways, this cl change CallTest to create tests in only one way to simplify how extensions are provided to the transport but at the same time still allows different network behaviour. > > > > > > Change-Id: Ie8b3ad947c170be61e62c02dadf4adedbb3841f1 > > Bug: webrtc:7135, webrtc:14795 > > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/290980 > > Reviewed-by: Jakob Ivarsson <jakobi@webrtc.org> > > Commit-Queue: Per Kjellander <perkj@webrtc.org> > > Reviewed-by: Erik Språng <sprang@webrtc.org> > > Cr-Commit-Position: refs/heads/main@{#39137} > > Bug: webrtc:7135, webrtc:14795, webrtc:14833 > Change-Id: Ib6180a47cf7611ed2bc648acc3b9e5cfeec4d9cf > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/291220 > Owners-Override: Björn Terelius <terelius@webrtc.org> > Auto-Submit: Per Kjellander <perkj@webrtc.org> > Reviewed-by: Björn Terelius <terelius@webrtc.org> > Commit-Queue: Björn Terelius <terelius@webrtc.org> > Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com> > Cr-Commit-Position: refs/heads/main@{#39146} Bug: webrtc:7135, webrtc:14795, webrtc:14833 Change-Id: I3fb0210d7a33c600ead5719ce2acb8cc68ec20bd Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/291222 Commit-Queue: Per Kjellander <perkj@webrtc.org> Reviewed-by: Jakob Ivarsson <jakobi@webrtc.org> Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com> Owners-Override: Per Kjellander <perkj@webrtc.org> Cr-Commit-Position: refs/heads/main@{#39157}
This commit is contained in:
parent
8e1d61338a
commit
89870ffa95
@ -58,27 +58,6 @@ void AudioBweTest::OnFakeAudioDevicesCreated(
|
|||||||
send_audio_device_ = send_audio_device;
|
send_audio_device_ = send_audio_device;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<test::PacketTransport> AudioBweTest::CreateSendTransport(
|
|
||||||
TaskQueueBase* task_queue,
|
|
||||||
Call* sender_call) {
|
|
||||||
return std::make_unique<test::PacketTransport>(
|
|
||||||
task_queue, sender_call, this, test::PacketTransport::kSender,
|
|
||||||
test::CallTest::payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(),
|
|
||||||
std::make_unique<SimulatedNetwork>(GetNetworkPipeConfig())));
|
|
||||||
}
|
|
||||||
|
|
||||||
std::unique_ptr<test::PacketTransport> AudioBweTest::CreateReceiveTransport(
|
|
||||||
TaskQueueBase* task_queue) {
|
|
||||||
return std::make_unique<test::PacketTransport>(
|
|
||||||
task_queue, nullptr, this, test::PacketTransport::kReceiver,
|
|
||||||
test::CallTest::payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(),
|
|
||||||
std::make_unique<SimulatedNetwork>(GetNetworkPipeConfig())));
|
|
||||||
}
|
|
||||||
|
|
||||||
void AudioBweTest::PerformTest() {
|
void AudioBweTest::PerformTest() {
|
||||||
send_audio_device_->WaitForRecordingEnd();
|
send_audio_device_->WaitForRecordingEnd();
|
||||||
SleepMs(GetNetworkPipeConfig().queue_delay_ms + kExtraProcessTimeMs);
|
SleepMs(GetNetworkPipeConfig().queue_delay_ms + kExtraProcessTimeMs);
|
||||||
|
|||||||
@ -39,12 +39,6 @@ class AudioBweTest : public test::EndToEndTest {
|
|||||||
TestAudioDeviceModule* send_audio_device,
|
TestAudioDeviceModule* send_audio_device,
|
||||||
TestAudioDeviceModule* recv_audio_device) override;
|
TestAudioDeviceModule* recv_audio_device) override;
|
||||||
|
|
||||||
std::unique_ptr<test::PacketTransport> CreateSendTransport(
|
|
||||||
TaskQueueBase* task_queue,
|
|
||||||
Call* sender_call) override;
|
|
||||||
std::unique_ptr<test::PacketTransport> CreateReceiveTransport(
|
|
||||||
TaskQueueBase* task_queue) override;
|
|
||||||
|
|
||||||
void PerformTest() override;
|
void PerformTest() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@ -31,10 +31,6 @@ constexpr int kSampleRate = 48000;
|
|||||||
AudioEndToEndTest::AudioEndToEndTest()
|
AudioEndToEndTest::AudioEndToEndTest()
|
||||||
: EndToEndTest(CallTest::kDefaultTimeout) {}
|
: EndToEndTest(CallTest::kDefaultTimeout) {}
|
||||||
|
|
||||||
BuiltInNetworkBehaviorConfig AudioEndToEndTest::GetNetworkPipeConfig() const {
|
|
||||||
return BuiltInNetworkBehaviorConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t AudioEndToEndTest::GetNumVideoStreams() const {
|
size_t AudioEndToEndTest::GetNumVideoStreams() const {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -63,27 +59,6 @@ void AudioEndToEndTest::OnFakeAudioDevicesCreated(
|
|||||||
send_audio_device_ = send_audio_device;
|
send_audio_device_ = send_audio_device;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<test::PacketTransport> AudioEndToEndTest::CreateSendTransport(
|
|
||||||
TaskQueueBase* task_queue,
|
|
||||||
Call* sender_call) {
|
|
||||||
return std::make_unique<test::PacketTransport>(
|
|
||||||
task_queue, sender_call, this, test::PacketTransport::kSender,
|
|
||||||
test::CallTest::payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(),
|
|
||||||
std::make_unique<SimulatedNetwork>(GetNetworkPipeConfig())));
|
|
||||||
}
|
|
||||||
|
|
||||||
std::unique_ptr<test::PacketTransport>
|
|
||||||
AudioEndToEndTest::CreateReceiveTransport(TaskQueueBase* task_queue) {
|
|
||||||
return std::make_unique<test::PacketTransport>(
|
|
||||||
task_queue, nullptr, this, test::PacketTransport::kReceiver,
|
|
||||||
test::CallTest::payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(),
|
|
||||||
std::make_unique<SimulatedNetwork>(GetNetworkPipeConfig())));
|
|
||||||
}
|
|
||||||
|
|
||||||
void AudioEndToEndTest::ModifyAudioConfigs(
|
void AudioEndToEndTest::ModifyAudioConfigs(
|
||||||
AudioSendStream::Config* send_config,
|
AudioSendStream::Config* send_config,
|
||||||
std::vector<AudioReceiveStreamInterface::Config>* receive_configs) {
|
std::vector<AudioReceiveStreamInterface::Config>* receive_configs) {
|
||||||
@ -110,7 +85,7 @@ void AudioEndToEndTest::PerformTest() {
|
|||||||
// Wait until the input audio file is done...
|
// Wait until the input audio file is done...
|
||||||
send_audio_device_->WaitForRecordingEnd();
|
send_audio_device_->WaitForRecordingEnd();
|
||||||
// and some extra time to account for network delay.
|
// and some extra time to account for network delay.
|
||||||
SleepMs(GetNetworkPipeConfig().queue_delay_ms + kExtraRecordTimeMs);
|
SleepMs(GetSendTransportConfig().queue_delay_ms + kExtraRecordTimeMs);
|
||||||
}
|
}
|
||||||
} // namespace test
|
} // namespace test
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
|||||||
@ -32,8 +32,6 @@ class AudioEndToEndTest : public test::EndToEndTest {
|
|||||||
return receive_stream_;
|
return receive_stream_;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual BuiltInNetworkBehaviorConfig GetNetworkPipeConfig() const;
|
|
||||||
|
|
||||||
size_t GetNumVideoStreams() const override;
|
size_t GetNumVideoStreams() const override;
|
||||||
size_t GetNumAudioStreams() const override;
|
size_t GetNumAudioStreams() const override;
|
||||||
size_t GetNumFlexfecStreams() const override;
|
size_t GetNumFlexfecStreams() const override;
|
||||||
@ -45,12 +43,6 @@ class AudioEndToEndTest : public test::EndToEndTest {
|
|||||||
TestAudioDeviceModule* send_audio_device,
|
TestAudioDeviceModule* send_audio_device,
|
||||||
TestAudioDeviceModule* recv_audio_device) override;
|
TestAudioDeviceModule* recv_audio_device) override;
|
||||||
|
|
||||||
std::unique_ptr<test::PacketTransport> CreateSendTransport(
|
|
||||||
TaskQueueBase* task_queue,
|
|
||||||
Call* sender_call) override;
|
|
||||||
std::unique_ptr<test::PacketTransport> CreateReceiveTransport(
|
|
||||||
TaskQueueBase* task_queue) override;
|
|
||||||
|
|
||||||
void ModifyAudioConfigs(AudioSendStream::Config* send_config,
|
void ModifyAudioConfigs(AudioSendStream::Config* send_config,
|
||||||
std::vector<AudioReceiveStreamInterface::Config>*
|
std::vector<AudioReceiveStreamInterface::Config>*
|
||||||
receive_configs) override;
|
receive_configs) override;
|
||||||
|
|||||||
@ -32,7 +32,7 @@ class NoLossTest : public AudioEndToEndTest {
|
|||||||
|
|
||||||
NoLossTest() = default;
|
NoLossTest() = default;
|
||||||
|
|
||||||
BuiltInNetworkBehaviorConfig GetNetworkPipeConfig() const override {
|
BuiltInNetworkBehaviorConfig GetSendTransportConfig() const override {
|
||||||
BuiltInNetworkBehaviorConfig pipe_config;
|
BuiltInNetworkBehaviorConfig pipe_config;
|
||||||
pipe_config.queue_delay_ms = kRttMs / 2;
|
pipe_config.queue_delay_ms = kRttMs / 2;
|
||||||
return pipe_config;
|
return pipe_config;
|
||||||
|
|||||||
@ -84,7 +84,7 @@ class Mobile2GNetworkTest : public AudioQualityTest {
|
|||||||
{{"maxaveragebitrate", "6000"}, {"ptime", "60"}, {"stereo", "1"}}});
|
{{"maxaveragebitrate", "6000"}, {"ptime", "60"}, {"stereo", "1"}}});
|
||||||
}
|
}
|
||||||
|
|
||||||
BuiltInNetworkBehaviorConfig GetNetworkPipeConfig() const override {
|
BuiltInNetworkBehaviorConfig GetSendTransportConfig() const override {
|
||||||
BuiltInNetworkBehaviorConfig pipe_config;
|
BuiltInNetworkBehaviorConfig pipe_config;
|
||||||
pipe_config.link_capacity_kbps = 12;
|
pipe_config.link_capacity_kbps = 12;
|
||||||
pipe_config.queue_length_packets = 1500;
|
pipe_config.queue_length_packets = 1500;
|
||||||
|
|||||||
@ -25,7 +25,7 @@ TEST_F(NackTest, ShouldNackInLossyNetwork) {
|
|||||||
const int64_t kLossPercent = 30;
|
const int64_t kLossPercent = 30;
|
||||||
const int kNackHistoryMs = 1000;
|
const int kNackHistoryMs = 1000;
|
||||||
|
|
||||||
BuiltInNetworkBehaviorConfig GetNetworkPipeConfig() const override {
|
BuiltInNetworkBehaviorConfig GetSendTransportConfig() const override {
|
||||||
BuiltInNetworkBehaviorConfig pipe_config;
|
BuiltInNetworkBehaviorConfig pipe_config;
|
||||||
pipe_config.queue_delay_ms = kRttMs / 2;
|
pipe_config.queue_delay_ms = kRttMs / 2;
|
||||||
pipe_config.loss_percent = kLossPercent;
|
pipe_config.loss_percent = kLossPercent;
|
||||||
|
|||||||
@ -23,7 +23,7 @@ TEST_F(NonSenderRttTest, NonSenderRttStats) {
|
|||||||
const int kTestDurationMs = 10000;
|
const int kTestDurationMs = 10000;
|
||||||
const int64_t kRttMs = 30;
|
const int64_t kRttMs = 30;
|
||||||
|
|
||||||
BuiltInNetworkBehaviorConfig GetNetworkPipeConfig() const override {
|
BuiltInNetworkBehaviorConfig GetSendTransportConfig() const override {
|
||||||
BuiltInNetworkBehaviorConfig pipe_config;
|
BuiltInNetworkBehaviorConfig pipe_config;
|
||||||
pipe_config.queue_delay_ms = kRttMs / 2;
|
pipe_config.queue_delay_ms = kRttMs / 2;
|
||||||
return pipe_config;
|
return pipe_config;
|
||||||
|
|||||||
@ -7,6 +7,7 @@
|
|||||||
* in the file PATENTS. All contributing project authors may
|
* in the file PATENTS. All contributing project authors may
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
* be found in the AUTHORS file in the root of the source tree.
|
||||||
*/
|
*/
|
||||||
|
#include <cstddef>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@ -15,7 +16,6 @@
|
|||||||
#include "absl/strings/string_view.h"
|
#include "absl/strings/string_view.h"
|
||||||
#include "api/test/create_frame_generator.h"
|
#include "api/test/create_frame_generator.h"
|
||||||
#include "call/call.h"
|
#include "call/call.h"
|
||||||
#include "call/fake_network_pipe.h"
|
|
||||||
#include "call/simulated_network.h"
|
#include "call/simulated_network.h"
|
||||||
#include "rtc_base/checks.h"
|
#include "rtc_base/checks.h"
|
||||||
#include "rtc_base/event.h"
|
#include "rtc_base/event.h"
|
||||||
@ -24,7 +24,6 @@
|
|||||||
#include "rtc_base/task_queue_for_test.h"
|
#include "rtc_base/task_queue_for_test.h"
|
||||||
#include "rtc_base/thread_annotations.h"
|
#include "rtc_base/thread_annotations.h"
|
||||||
#include "test/call_test.h"
|
#include "test/call_test.h"
|
||||||
#include "test/direct_transport.h"
|
|
||||||
#include "test/encoder_settings.h"
|
#include "test/encoder_settings.h"
|
||||||
#include "test/fake_decoder.h"
|
#include "test/fake_decoder.h"
|
||||||
#include "test/fake_encoder.h"
|
#include "test/fake_encoder.h"
|
||||||
@ -113,20 +112,9 @@ class BitrateEstimatorTest : public test::CallTest {
|
|||||||
SendTask(task_queue(), [this]() {
|
SendTask(task_queue(), [this]() {
|
||||||
CreateCalls();
|
CreateCalls();
|
||||||
|
|
||||||
send_transport_.reset(new test::DirectTransport(
|
CreateSendTransport(BuiltInNetworkBehaviorConfig(), /*observer=*/nullptr);
|
||||||
task_queue(),
|
CreateReceiveTransport(BuiltInNetworkBehaviorConfig(),
|
||||||
std::make_unique<FakeNetworkPipe>(
|
/*observer=*/nullptr);
|
||||||
Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
|
|
||||||
BuiltInNetworkBehaviorConfig())),
|
|
||||||
sender_call_.get(), payload_type_map_));
|
|
||||||
send_transport_->SetReceiver(receiver_call_->Receiver());
|
|
||||||
receive_transport_.reset(new test::DirectTransport(
|
|
||||||
task_queue(),
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
|
|
||||||
BuiltInNetworkBehaviorConfig())),
|
|
||||||
receiver_call_.get(), payload_type_map_));
|
|
||||||
receive_transport_->SetReceiver(sender_call_->Receiver());
|
|
||||||
|
|
||||||
VideoSendStream::Config video_send_config(send_transport_.get());
|
VideoSendStream::Config video_send_config(send_transport_.get());
|
||||||
video_send_config.rtp.ssrcs.push_back(kVideoSendSsrcs[0]);
|
video_send_config.rtp.ssrcs.push_back(kVideoSendSsrcs[0]);
|
||||||
@ -160,10 +148,6 @@ class BitrateEstimatorTest : public test::CallTest {
|
|||||||
delete stream;
|
delete stream;
|
||||||
}
|
}
|
||||||
streams_.clear();
|
streams_.clear();
|
||||||
|
|
||||||
send_transport_.reset();
|
|
||||||
receive_transport_.reset();
|
|
||||||
|
|
||||||
DestroyCalls();
|
DestroyCalls();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -245,8 +229,6 @@ class BitrateEstimatorTest : public test::CallTest {
|
|||||||
};
|
};
|
||||||
|
|
||||||
LogObserver receiver_log_;
|
LogObserver receiver_log_;
|
||||||
std::unique_ptr<test::DirectTransport> send_transport_;
|
|
||||||
std::unique_ptr<test::DirectTransport> receive_transport_;
|
|
||||||
VideoReceiveStreamInterface::Config receive_config_;
|
VideoReceiveStreamInterface::Config receive_config_;
|
||||||
std::vector<Stream*> streams_;
|
std::vector<Stream*> streams_;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -243,23 +243,26 @@ void CallPerfTest::TestAudioVideoSync(FecMode fec,
|
|||||||
test::PacketTransport::kSender, audio_pt_map,
|
test::PacketTransport::kSender, audio_pt_map,
|
||||||
std::make_unique<FakeNetworkPipe>(
|
std::make_unique<FakeNetworkPipe>(
|
||||||
Clock::GetRealTimeClock(),
|
Clock::GetRealTimeClock(),
|
||||||
std::make_unique<SimulatedNetwork>(audio_net_config)));
|
std::make_unique<SimulatedNetwork>(audio_net_config)),
|
||||||
|
GetRegisteredExtensions(), GetRegisteredExtensions());
|
||||||
audio_send_transport->SetReceiver(receiver_call_->Receiver());
|
audio_send_transport->SetReceiver(receiver_call_->Receiver());
|
||||||
|
|
||||||
video_send_transport = std::make_unique<test::PacketTransport>(
|
video_send_transport = std::make_unique<test::PacketTransport>(
|
||||||
task_queue(), sender_call_.get(), observer.get(),
|
task_queue(), sender_call_.get(), observer.get(),
|
||||||
test::PacketTransport::kSender, video_pt_map,
|
test::PacketTransport::kSender, video_pt_map,
|
||||||
std::make_unique<FakeNetworkPipe>(Clock::GetRealTimeClock(),
|
std::make_unique<FakeNetworkPipe>(
|
||||||
std::make_unique<SimulatedNetwork>(
|
Clock::GetRealTimeClock(),
|
||||||
BuiltInNetworkBehaviorConfig())));
|
std::make_unique<SimulatedNetwork>(BuiltInNetworkBehaviorConfig())),
|
||||||
|
GetRegisteredExtensions(), GetRegisteredExtensions());
|
||||||
video_send_transport->SetReceiver(receiver_call_->Receiver());
|
video_send_transport->SetReceiver(receiver_call_->Receiver());
|
||||||
|
|
||||||
receive_transport = std::make_unique<test::PacketTransport>(
|
receive_transport = std::make_unique<test::PacketTransport>(
|
||||||
task_queue(), receiver_call_.get(), observer.get(),
|
task_queue(), receiver_call_.get(), observer.get(),
|
||||||
test::PacketTransport::kReceiver, payload_type_map_,
|
test::PacketTransport::kReceiver, payload_type_map_,
|
||||||
std::make_unique<FakeNetworkPipe>(Clock::GetRealTimeClock(),
|
std::make_unique<FakeNetworkPipe>(
|
||||||
std::make_unique<SimulatedNetwork>(
|
Clock::GetRealTimeClock(),
|
||||||
BuiltInNetworkBehaviorConfig())));
|
std::make_unique<SimulatedNetwork>(BuiltInNetworkBehaviorConfig())),
|
||||||
|
GetRegisteredExtensions(), GetRegisteredExtensions());
|
||||||
receive_transport->SetReceiver(sender_call_->Receiver());
|
receive_transport->SetReceiver(sender_call_->Receiver());
|
||||||
|
|
||||||
CreateSendConfig(1, 0, 0, video_send_transport.get());
|
CreateSendConfig(1, 0, 0, video_send_transport.get());
|
||||||
@ -412,25 +415,12 @@ void CallPerfTest::TestCaptureNtpTime(
|
|||||||
rtp_start_timestamp_(0) {}
|
rtp_start_timestamp_(0) {}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<test::PacketTransport> CreateSendTransport(
|
BuiltInNetworkBehaviorConfig GetSendTransportConfig() const override {
|
||||||
TaskQueueBase* task_queue,
|
return net_config_;
|
||||||
Call* sender_call) override {
|
|
||||||
return std::make_unique<test::PacketTransport>(
|
|
||||||
task_queue, sender_call, this, test::PacketTransport::kSender,
|
|
||||||
payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(),
|
|
||||||
std::make_unique<SimulatedNetwork>(net_config_)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<test::PacketTransport> CreateReceiveTransport(
|
BuiltInNetworkBehaviorConfig GetReceiveTransportConfig() const override {
|
||||||
TaskQueueBase* task_queue) override {
|
return net_config_;
|
||||||
return std::make_unique<test::PacketTransport>(
|
|
||||||
task_queue, nullptr, this, test::PacketTransport::kReceiver,
|
|
||||||
payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(),
|
|
||||||
std::make_unique<SimulatedNetwork>(net_config_)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnFrame(const VideoFrame& video_frame) override {
|
void OnFrame(const VideoFrame& video_frame) override {
|
||||||
@ -946,35 +936,26 @@ void CallPerfTest::TestMinAudioVideoBitrate(int test_bitrate_from,
|
|||||||
task_queue_(task_queue) {}
|
task_queue_(task_queue) {}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
BuiltInNetworkBehaviorConfig GetFakeNetworkPipeConfig() {
|
BuiltInNetworkBehaviorConfig GetFakeNetworkPipeConfig() const {
|
||||||
BuiltInNetworkBehaviorConfig pipe_config;
|
BuiltInNetworkBehaviorConfig pipe_config;
|
||||||
pipe_config.link_capacity_kbps = test_bitrate_from_;
|
pipe_config.link_capacity_kbps = test_bitrate_from_;
|
||||||
return pipe_config;
|
return pipe_config;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<test::PacketTransport> CreateSendTransport(
|
BuiltInNetworkBehaviorConfig GetSendTransportConfig() const override {
|
||||||
TaskQueueBase* task_queue,
|
return GetFakeNetworkPipeConfig();
|
||||||
Call* sender_call) override {
|
}
|
||||||
auto network =
|
BuiltInNetworkBehaviorConfig GetReceiveTransportConfig() const override {
|
||||||
std::make_unique<SimulatedNetwork>(GetFakeNetworkPipeConfig());
|
return GetFakeNetworkPipeConfig();
|
||||||
send_simulated_network_ = network.get();
|
|
||||||
return std::make_unique<test::PacketTransport>(
|
|
||||||
task_queue, sender_call, this, test::PacketTransport::kSender,
|
|
||||||
test::CallTest::payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(Clock::GetRealTimeClock(),
|
|
||||||
std::move(network)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<test::PacketTransport> CreateReceiveTransport(
|
void OnTransportCreated(
|
||||||
TaskQueueBase* task_queue) override {
|
test::PacketTransport* to_receiver,
|
||||||
auto network =
|
SimulatedNetworkInterface* sender_network,
|
||||||
std::make_unique<SimulatedNetwork>(GetFakeNetworkPipeConfig());
|
test::PacketTransport* to_sender,
|
||||||
receive_simulated_network_ = network.get();
|
SimulatedNetworkInterface* receiver_network) override {
|
||||||
return std::make_unique<test::PacketTransport>(
|
send_simulated_network_ = sender_network;
|
||||||
task_queue, nullptr, this, test::PacketTransport::kReceiver,
|
receive_simulated_network_ = receiver_network;
|
||||||
test::CallTest::payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(Clock::GetRealTimeClock(),
|
|
||||||
std::move(network)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PerformTest() override {
|
void PerformTest() override {
|
||||||
@ -1048,8 +1029,8 @@ void CallPerfTest::TestMinAudioVideoBitrate(int test_bitrate_from,
|
|||||||
const int min_bwe_;
|
const int min_bwe_;
|
||||||
const int start_bwe_;
|
const int start_bwe_;
|
||||||
const int max_bwe_;
|
const int max_bwe_;
|
||||||
SimulatedNetwork* send_simulated_network_;
|
SimulatedNetworkInterface* send_simulated_network_;
|
||||||
SimulatedNetwork* receive_simulated_network_;
|
SimulatedNetworkInterface* receive_simulated_network_;
|
||||||
Call* sender_call_;
|
Call* sender_call_;
|
||||||
TaskQueueBase* const task_queue_;
|
TaskQueueBase* const task_queue_;
|
||||||
} test(test_bitrate_from, test_bitrate_to, test_bitrate_step, min_bwe,
|
} test(test_bitrate_from, test_bitrate_to, test_bitrate_step, min_bwe,
|
||||||
|
|||||||
@ -113,18 +113,8 @@ void RampUpTester::OnVideoStreamsCreated(
|
|||||||
send_stream_ = send_stream;
|
send_stream_ = send_stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<test::PacketTransport> RampUpTester::CreateSendTransport(
|
BuiltInNetworkBehaviorConfig RampUpTester::GetSendTransportConfig() const {
|
||||||
TaskQueueBase* task_queue,
|
return forward_transport_config_;
|
||||||
Call* sender_call) {
|
|
||||||
auto network = std::make_unique<SimulatedNetwork>(forward_transport_config_);
|
|
||||||
send_simulated_network_ = network.get();
|
|
||||||
auto send_transport = std::make_unique<test::PacketTransport>(
|
|
||||||
task_queue, sender_call, this, test::PacketTransport::kSender,
|
|
||||||
test::CallTest::payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(Clock::GetRealTimeClock(),
|
|
||||||
std::move(network)));
|
|
||||||
send_transport_ = send_transport.get();
|
|
||||||
return send_transport;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t RampUpTester::GetNumVideoStreams() const {
|
size_t RampUpTester::GetNumVideoStreams() const {
|
||||||
@ -310,6 +300,17 @@ void RampUpTester::OnCallsCreated(Call* sender_call, Call* receiver_call) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RampUpTester::OnTransportCreated(
|
||||||
|
test::PacketTransport* to_receiver,
|
||||||
|
SimulatedNetworkInterface* sender_network,
|
||||||
|
test::PacketTransport* to_sender,
|
||||||
|
SimulatedNetworkInterface* receiver_network) {
|
||||||
|
RTC_DCHECK_RUN_ON(task_queue_);
|
||||||
|
|
||||||
|
send_transport_ = to_receiver;
|
||||||
|
send_simulated_network_ = sender_network;
|
||||||
|
}
|
||||||
|
|
||||||
void RampUpTester::PollStats() {
|
void RampUpTester::PollStats() {
|
||||||
RTC_DCHECK_RUN_ON(task_queue_);
|
RTC_DCHECK_RUN_ON(task_queue_);
|
||||||
|
|
||||||
|
|||||||
@ -83,7 +83,7 @@ class RampUpTester : public test::EndToEndTest {
|
|||||||
Call* sender_call_;
|
Call* sender_call_;
|
||||||
VideoSendStream* send_stream_;
|
VideoSendStream* send_stream_;
|
||||||
test::PacketTransport* send_transport_;
|
test::PacketTransport* send_transport_;
|
||||||
SimulatedNetwork* send_simulated_network_;
|
SimulatedNetworkInterface* send_simulated_network_;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
typedef std::map<uint32_t, uint32_t> SsrcMap;
|
typedef std::map<uint32_t, uint32_t> SsrcMap;
|
||||||
@ -93,9 +93,7 @@ class RampUpTester : public test::EndToEndTest {
|
|||||||
void OnVideoStreamsCreated(VideoSendStream* send_stream,
|
void OnVideoStreamsCreated(VideoSendStream* send_stream,
|
||||||
const std::vector<VideoReceiveStreamInterface*>&
|
const std::vector<VideoReceiveStreamInterface*>&
|
||||||
receive_streams) override;
|
receive_streams) override;
|
||||||
std::unique_ptr<test::PacketTransport> CreateSendTransport(
|
BuiltInNetworkBehaviorConfig GetSendTransportConfig() const override;
|
||||||
TaskQueueBase* task_queue,
|
|
||||||
Call* sender_call) override;
|
|
||||||
void ModifyVideoConfigs(
|
void ModifyVideoConfigs(
|
||||||
VideoSendStream::Config* send_config,
|
VideoSendStream::Config* send_config,
|
||||||
std::vector<VideoReceiveStreamInterface::Config>* receive_configs,
|
std::vector<VideoReceiveStreamInterface::Config>* receive_configs,
|
||||||
@ -106,6 +104,10 @@ class RampUpTester : public test::EndToEndTest {
|
|||||||
void ModifyFlexfecConfigs(
|
void ModifyFlexfecConfigs(
|
||||||
std::vector<FlexfecReceiveStream::Config>* receive_configs) override;
|
std::vector<FlexfecReceiveStream::Config>* receive_configs) override;
|
||||||
void OnCallsCreated(Call* sender_call, Call* receiver_call) override;
|
void OnCallsCreated(Call* sender_call, Call* receiver_call) override;
|
||||||
|
void OnTransportCreated(test::PacketTransport* to_receiver,
|
||||||
|
SimulatedNetworkInterface* sender_network,
|
||||||
|
test::PacketTransport* to_sender,
|
||||||
|
SimulatedNetworkInterface* receiver_network) override;
|
||||||
|
|
||||||
const int start_bitrate_bps_;
|
const int start_bitrate_bps_;
|
||||||
const int64_t min_run_time_ms_;
|
const int64_t min_run_time_ms_;
|
||||||
|
|||||||
@ -863,6 +863,7 @@ rtc_library("direct_transport") {
|
|||||||
"direct_transport.h",
|
"direct_transport.h",
|
||||||
]
|
]
|
||||||
deps = [
|
deps = [
|
||||||
|
"../api:rtp_parameters",
|
||||||
"../api:sequence_checker",
|
"../api:sequence_checker",
|
||||||
"../api:simulated_network_api",
|
"../api:simulated_network_api",
|
||||||
"../api:transport_api",
|
"../api:transport_api",
|
||||||
@ -871,6 +872,7 @@ rtc_library("direct_transport") {
|
|||||||
"../call:call_interfaces",
|
"../call:call_interfaces",
|
||||||
"../call:simulated_packet_receiver",
|
"../call:simulated_packet_receiver",
|
||||||
"../modules/rtp_rtcp:rtp_rtcp_format",
|
"../modules/rtp_rtcp:rtp_rtcp_format",
|
||||||
|
"../rtc_base:checks",
|
||||||
"../rtc_base:macromagic",
|
"../rtc_base:macromagic",
|
||||||
"../rtc_base:timeutils",
|
"../rtc_base:timeutils",
|
||||||
"../rtc_base/synchronization:mutex",
|
"../rtc_base/synchronization:mutex",
|
||||||
|
|||||||
@ -20,12 +20,14 @@
|
|||||||
#include "api/test/create_frame_generator.h"
|
#include "api/test/create_frame_generator.h"
|
||||||
#include "api/video/builtin_video_bitrate_allocator_factory.h"
|
#include "api/video/builtin_video_bitrate_allocator_factory.h"
|
||||||
#include "call/fake_network_pipe.h"
|
#include "call/fake_network_pipe.h"
|
||||||
|
#include "call/packet_receiver.h"
|
||||||
#include "call/simulated_network.h"
|
#include "call/simulated_network.h"
|
||||||
#include "modules/audio_mixer/audio_mixer_impl.h"
|
#include "modules/audio_mixer/audio_mixer_impl.h"
|
||||||
#include "rtc_base/checks.h"
|
#include "rtc_base/checks.h"
|
||||||
#include "rtc_base/event.h"
|
#include "rtc_base/event.h"
|
||||||
#include "rtc_base/task_queue_for_test.h"
|
#include "rtc_base/task_queue_for_test.h"
|
||||||
#include "test/fake_encoder.h"
|
#include "test/fake_encoder.h"
|
||||||
|
#include "test/rtp_rtcp_observer.h"
|
||||||
#include "test/testsupport/file_utils.h"
|
#include "test/testsupport/file_utils.h"
|
||||||
#include "video/config/video_encoder_config.h"
|
#include "video/config/video_encoder_config.h"
|
||||||
|
|
||||||
@ -126,13 +128,12 @@ void CallTest::RunBaseTest(BaseTest* test) {
|
|||||||
CreateReceiverCall(recv_config);
|
CreateReceiverCall(recv_config);
|
||||||
}
|
}
|
||||||
test->OnCallsCreated(sender_call_.get(), receiver_call_.get());
|
test->OnCallsCreated(sender_call_.get(), receiver_call_.get());
|
||||||
receive_transport_ = test->CreateReceiveTransport(task_queue());
|
CreateReceiveTransport(test->GetReceiveTransportConfig(), test);
|
||||||
send_transport_ =
|
CreateSendTransport(test->GetSendTransportConfig(), test);
|
||||||
test->CreateSendTransport(task_queue(), sender_call_.get());
|
test->OnTransportCreated(send_transport_.get(), send_simulated_network_,
|
||||||
|
receive_transport_.get(),
|
||||||
|
receive_simulated_network_);
|
||||||
if (test->ShouldCreateReceivers()) {
|
if (test->ShouldCreateReceivers()) {
|
||||||
send_transport_->SetReceiver(receiver_call_->Receiver());
|
|
||||||
receive_transport_->SetReceiver(sender_call_->Receiver());
|
|
||||||
if (num_video_streams_ > 0)
|
if (num_video_streams_ > 0)
|
||||||
receiver_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp);
|
receiver_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp);
|
||||||
if (num_audio_streams_ > 0)
|
if (num_audio_streams_ > 0)
|
||||||
@ -146,7 +147,7 @@ void CallTest::RunBaseTest(BaseTest* test) {
|
|||||||
CreateSendConfig(num_video_streams_, num_audio_streams_,
|
CreateSendConfig(num_video_streams_, num_audio_streams_,
|
||||||
num_flexfec_streams_, send_transport_.get());
|
num_flexfec_streams_, send_transport_.get());
|
||||||
if (test->ShouldCreateReceivers()) {
|
if (test->ShouldCreateReceivers()) {
|
||||||
CreateMatchingReceiveConfigs(receive_transport_.get());
|
CreateMatchingReceiveConfigs();
|
||||||
}
|
}
|
||||||
if (num_video_streams_ > 0) {
|
if (num_video_streams_ > 0) {
|
||||||
test->ModifyVideoConfigs(GetVideoSendConfig(), &video_receive_configs_,
|
test->ModifyVideoConfigs(GetVideoSendConfig(), &video_receive_configs_,
|
||||||
@ -235,6 +236,8 @@ void CallTest::CreateReceiverCall(const Call::Config& config) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CallTest::DestroyCalls() {
|
void CallTest::DestroyCalls() {
|
||||||
|
send_transport_.reset();
|
||||||
|
receive_transport_.reset();
|
||||||
sender_call_.reset();
|
sender_call_.reset();
|
||||||
receiver_call_.reset();
|
receiver_call_.reset();
|
||||||
}
|
}
|
||||||
@ -568,6 +571,35 @@ void CallTest::CreateFlexfecStreams() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CallTest::CreateSendTransport(const BuiltInNetworkBehaviorConfig& config,
|
||||||
|
RtpRtcpObserver* observer) {
|
||||||
|
PacketReceiver* receiver =
|
||||||
|
receiver_call_ ? receiver_call_->Receiver() : nullptr;
|
||||||
|
|
||||||
|
auto network = std::make_unique<SimulatedNetwork>(config);
|
||||||
|
send_simulated_network_ = network.get();
|
||||||
|
send_transport_ = std::make_unique<PacketTransport>(
|
||||||
|
task_queue(), sender_call_.get(), observer,
|
||||||
|
test::PacketTransport::kSender, payload_type_map_,
|
||||||
|
std::make_unique<FakeNetworkPipe>(Clock::GetRealTimeClock(),
|
||||||
|
std::move(network), receiver),
|
||||||
|
rtp_extensions_, rtp_extensions_);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CallTest::CreateReceiveTransport(
|
||||||
|
const BuiltInNetworkBehaviorConfig& config,
|
||||||
|
RtpRtcpObserver* observer) {
|
||||||
|
auto network = std::make_unique<SimulatedNetwork>(config);
|
||||||
|
receive_simulated_network_ = network.get();
|
||||||
|
receive_transport_ = std::make_unique<PacketTransport>(
|
||||||
|
task_queue(), nullptr, observer, test::PacketTransport::kReceiver,
|
||||||
|
payload_type_map_,
|
||||||
|
std::make_unique<FakeNetworkPipe>(Clock::GetRealTimeClock(),
|
||||||
|
std::move(network),
|
||||||
|
sender_call_->Receiver()),
|
||||||
|
rtp_extensions_, rtp_extensions_);
|
||||||
|
}
|
||||||
|
|
||||||
void CallTest::ConnectVideoSourcesToStreams() {
|
void CallTest::ConnectVideoSourcesToStreams() {
|
||||||
for (size_t i = 0; i < video_sources_.size(); ++i)
|
for (size_t i = 0; i < video_sources_.size(); ++i)
|
||||||
video_send_streams_[i]->SetSource(video_sources_[i].get(),
|
video_send_streams_[i]->SetSource(video_sources_[i].get(),
|
||||||
@ -710,6 +742,10 @@ const std::map<uint8_t, MediaType> CallTest::payload_type_map_ = {
|
|||||||
{CallTest::kVideoSendPayloadType, MediaType::VIDEO},
|
{CallTest::kVideoSendPayloadType, MediaType::VIDEO},
|
||||||
{CallTest::kFakeVideoSendPayloadType, MediaType::VIDEO},
|
{CallTest::kFakeVideoSendPayloadType, MediaType::VIDEO},
|
||||||
{CallTest::kSendRtxPayloadType, MediaType::VIDEO},
|
{CallTest::kSendRtxPayloadType, MediaType::VIDEO},
|
||||||
|
{CallTest::kPayloadTypeVP8, MediaType::VIDEO},
|
||||||
|
{CallTest::kPayloadTypeVP9, MediaType::VIDEO},
|
||||||
|
{CallTest::kPayloadTypeH264, MediaType::VIDEO},
|
||||||
|
{CallTest::kPayloadTypeGeneric, MediaType::VIDEO},
|
||||||
{CallTest::kRedPayloadType, MediaType::VIDEO},
|
{CallTest::kRedPayloadType, MediaType::VIDEO},
|
||||||
{CallTest::kRtxRedPayloadType, MediaType::VIDEO},
|
{CallTest::kRtxRedPayloadType, MediaType::VIDEO},
|
||||||
{CallTest::kUlpfecPayloadType, MediaType::VIDEO},
|
{CallTest::kUlpfecPayloadType, MediaType::VIDEO},
|
||||||
@ -741,27 +777,18 @@ void BaseTest::ModifyReceiverBitrateConfig(BitrateConstraints* bitrate_config) {
|
|||||||
|
|
||||||
void BaseTest::OnCallsCreated(Call* sender_call, Call* receiver_call) {}
|
void BaseTest::OnCallsCreated(Call* sender_call, Call* receiver_call) {}
|
||||||
|
|
||||||
std::unique_ptr<PacketTransport> BaseTest::CreateSendTransport(
|
void BaseTest::OnTransportCreated(PacketTransport* to_receiver,
|
||||||
TaskQueueBase* task_queue,
|
SimulatedNetworkInterface* sender_network,
|
||||||
Call* sender_call) {
|
PacketTransport* to_sender,
|
||||||
return std::make_unique<PacketTransport>(
|
SimulatedNetworkInterface* receiver_network) {
|
||||||
task_queue, sender_call, this, test::PacketTransport::kSender,
|
|
||||||
CallTest::payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(),
|
|
||||||
std::make_unique<SimulatedNetwork>(BuiltInNetworkBehaviorConfig())));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<PacketTransport> BaseTest::CreateReceiveTransport(
|
BuiltInNetworkBehaviorConfig BaseTest::GetSendTransportConfig() const {
|
||||||
TaskQueueBase* task_queue) {
|
return BuiltInNetworkBehaviorConfig();
|
||||||
return std::make_unique<PacketTransport>(
|
}
|
||||||
task_queue, nullptr, this, test::PacketTransport::kReceiver,
|
BuiltInNetworkBehaviorConfig BaseTest::GetReceiveTransportConfig() const {
|
||||||
CallTest::payload_type_map_,
|
return BuiltInNetworkBehaviorConfig();
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(),
|
|
||||||
std::make_unique<SimulatedNetwork>(BuiltInNetworkBehaviorConfig())));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t BaseTest::GetNumVideoStreams() const {
|
size_t BaseTest::GetNumVideoStreams() const {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,9 +16,11 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "absl/types/optional.h"
|
#include "absl/types/optional.h"
|
||||||
|
#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/task_queue/task_queue_base.h"
|
#include "api/task_queue/task_queue_base.h"
|
||||||
#include "api/task_queue/task_queue_factory.h"
|
#include "api/task_queue/task_queue_factory.h"
|
||||||
|
#include "api/test/simulated_network.h"
|
||||||
#include "api/test/video/function_video_decoder_factory.h"
|
#include "api/test/video/function_video_decoder_factory.h"
|
||||||
#include "api/test/video/function_video_encoder_factory.h"
|
#include "api/test/video/function_video_encoder_factory.h"
|
||||||
#include "api/units/time_delta.h"
|
#include "api/units/time_delta.h"
|
||||||
@ -76,6 +78,10 @@ class CallTest : public ::testing::Test, public RtpPacketSinkInterface {
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void RegisterRtpExtension(const RtpExtension& extension);
|
void RegisterRtpExtension(const RtpExtension& extension);
|
||||||
|
// Returns header extensions that can be parsed by the transport.
|
||||||
|
rtc::ArrayView<const RtpExtension> GetRegisteredExtensions() {
|
||||||
|
return rtp_extensions_;
|
||||||
|
}
|
||||||
|
|
||||||
// RunBaseTest overwrites the audio_state of the send and receive Call configs
|
// RunBaseTest overwrites the audio_state of the send and receive Call configs
|
||||||
// to simplify test code.
|
// to simplify test code.
|
||||||
@ -102,11 +108,23 @@ class CallTest : public ::testing::Test, public RtpPacketSinkInterface {
|
|||||||
void SetSendUlpFecConfig(VideoSendStream::Config* send_config);
|
void SetSendUlpFecConfig(VideoSendStream::Config* send_config);
|
||||||
void SetReceiveUlpFecConfig(
|
void SetReceiveUlpFecConfig(
|
||||||
VideoReceiveStreamInterface::Config* receive_config);
|
VideoReceiveStreamInterface::Config* receive_config);
|
||||||
|
|
||||||
|
void CreateSendConfig(size_t num_video_streams,
|
||||||
|
size_t num_audio_streams,
|
||||||
|
size_t num_flexfec_streams) {
|
||||||
|
CreateSendConfig(num_video_streams, num_audio_streams, num_flexfec_streams,
|
||||||
|
send_transport_.get());
|
||||||
|
}
|
||||||
void CreateSendConfig(size_t num_video_streams,
|
void CreateSendConfig(size_t num_video_streams,
|
||||||
size_t num_audio_streams,
|
size_t num_audio_streams,
|
||||||
size_t num_flexfec_streams,
|
size_t num_flexfec_streams,
|
||||||
Transport* send_transport);
|
Transport* send_transport);
|
||||||
|
|
||||||
|
void CreateMatchingVideoReceiveConfigs(
|
||||||
|
const VideoSendStream::Config& video_send_config) {
|
||||||
|
CreateMatchingVideoReceiveConfigs(video_send_config,
|
||||||
|
receive_transport_.get());
|
||||||
|
}
|
||||||
void CreateMatchingVideoReceiveConfigs(
|
void CreateMatchingVideoReceiveConfigs(
|
||||||
const VideoSendStream::Config& video_send_config,
|
const VideoSendStream::Config& video_send_config,
|
||||||
Transport* rtcp_send_transport);
|
Transport* rtcp_send_transport);
|
||||||
@ -136,6 +154,9 @@ class CallTest : public ::testing::Test, public RtpPacketSinkInterface {
|
|||||||
void CreateMatchingFecConfig(
|
void CreateMatchingFecConfig(
|
||||||
Transport* transport,
|
Transport* transport,
|
||||||
const VideoSendStream::Config& video_send_config);
|
const VideoSendStream::Config& video_send_config);
|
||||||
|
void CreateMatchingReceiveConfigs() {
|
||||||
|
CreateMatchingReceiveConfigs(receive_transport_.get());
|
||||||
|
}
|
||||||
void CreateMatchingReceiveConfigs(Transport* rtcp_send_transport);
|
void CreateMatchingReceiveConfigs(Transport* rtcp_send_transport);
|
||||||
|
|
||||||
void CreateFrameGeneratorCapturerWithDrift(Clock* drift_clock,
|
void CreateFrameGeneratorCapturerWithDrift(Clock* drift_clock,
|
||||||
@ -154,6 +175,16 @@ class CallTest : public ::testing::Test, public RtpPacketSinkInterface {
|
|||||||
void CreateAudioStreams();
|
void CreateAudioStreams();
|
||||||
void CreateFlexfecStreams();
|
void CreateFlexfecStreams();
|
||||||
|
|
||||||
|
// Receiver call must be created before calling CreateSendTransport in order
|
||||||
|
// to set a receiver.
|
||||||
|
// Rtp header extensions must be registered (RegisterRtpExtension(..)) before
|
||||||
|
// the transport is created in order for the receiving call object receive RTP
|
||||||
|
// packets with extensions.
|
||||||
|
void CreateSendTransport(const BuiltInNetworkBehaviorConfig& config,
|
||||||
|
RtpRtcpObserver* observer);
|
||||||
|
void CreateReceiveTransport(const BuiltInNetworkBehaviorConfig& config,
|
||||||
|
RtpRtcpObserver* observer);
|
||||||
|
|
||||||
void ConnectVideoSourcesToStreams();
|
void ConnectVideoSourcesToStreams();
|
||||||
|
|
||||||
void Start();
|
void Start();
|
||||||
@ -187,6 +218,7 @@ class CallTest : public ::testing::Test, public RtpPacketSinkInterface {
|
|||||||
std::unique_ptr<webrtc::RtcEventLog> recv_event_log_;
|
std::unique_ptr<webrtc::RtcEventLog> recv_event_log_;
|
||||||
std::unique_ptr<Call> sender_call_;
|
std::unique_ptr<Call> sender_call_;
|
||||||
std::unique_ptr<PacketTransport> send_transport_;
|
std::unique_ptr<PacketTransport> send_transport_;
|
||||||
|
SimulatedNetworkInterface* send_simulated_network_ = nullptr;
|
||||||
std::vector<VideoSendStream::Config> video_send_configs_;
|
std::vector<VideoSendStream::Config> video_send_configs_;
|
||||||
std::vector<VideoEncoderConfig> video_encoder_configs_;
|
std::vector<VideoEncoderConfig> video_encoder_configs_;
|
||||||
std::vector<VideoSendStream*> video_send_streams_;
|
std::vector<VideoSendStream*> video_send_streams_;
|
||||||
@ -195,6 +227,7 @@ class CallTest : public ::testing::Test, public RtpPacketSinkInterface {
|
|||||||
|
|
||||||
std::unique_ptr<Call> receiver_call_;
|
std::unique_ptr<Call> receiver_call_;
|
||||||
std::unique_ptr<PacketTransport> receive_transport_;
|
std::unique_ptr<PacketTransport> receive_transport_;
|
||||||
|
SimulatedNetworkInterface* receive_simulated_network_ = nullptr;
|
||||||
std::vector<VideoReceiveStreamInterface::Config> video_receive_configs_;
|
std::vector<VideoReceiveStreamInterface::Config> video_receive_configs_;
|
||||||
std::vector<VideoReceiveStreamInterface*> video_receive_streams_;
|
std::vector<VideoReceiveStreamInterface*> video_receive_streams_;
|
||||||
std::vector<AudioReceiveStreamInterface::Config> audio_receive_configs_;
|
std::vector<AudioReceiveStreamInterface::Config> audio_receive_configs_;
|
||||||
@ -265,12 +298,13 @@ class BaseTest : public RtpRtcpObserver {
|
|||||||
virtual void ModifyReceiverBitrateConfig(BitrateConstraints* bitrate_config);
|
virtual void ModifyReceiverBitrateConfig(BitrateConstraints* bitrate_config);
|
||||||
|
|
||||||
virtual void OnCallsCreated(Call* sender_call, Call* receiver_call);
|
virtual void OnCallsCreated(Call* sender_call, Call* receiver_call);
|
||||||
|
virtual void OnTransportCreated(PacketTransport* to_receiver,
|
||||||
|
SimulatedNetworkInterface* sender_network,
|
||||||
|
PacketTransport* to_sender,
|
||||||
|
SimulatedNetworkInterface* receiver_network);
|
||||||
|
|
||||||
virtual std::unique_ptr<test::PacketTransport> CreateSendTransport(
|
virtual BuiltInNetworkBehaviorConfig GetSendTransportConfig() const;
|
||||||
TaskQueueBase* task_queue,
|
virtual BuiltInNetworkBehaviorConfig GetReceiveTransportConfig() const;
|
||||||
Call* sender_call);
|
|
||||||
virtual std::unique_ptr<test::PacketTransport> CreateReceiveTransport(
|
|
||||||
TaskQueueBase* task_queue);
|
|
||||||
|
|
||||||
virtual void ModifyVideoConfigs(
|
virtual void ModifyVideoConfigs(
|
||||||
VideoSendStream::Config* send_config,
|
VideoSendStream::Config* send_config,
|
||||||
|
|||||||
@ -9,12 +9,14 @@
|
|||||||
*/
|
*/
|
||||||
#include "test/direct_transport.h"
|
#include "test/direct_transport.h"
|
||||||
|
|
||||||
#include "absl/memory/memory.h"
|
#include "api/media_types.h"
|
||||||
#include "api/task_queue/task_queue_base.h"
|
#include "api/task_queue/task_queue_base.h"
|
||||||
#include "api/units/time_delta.h"
|
#include "api/units/time_delta.h"
|
||||||
#include "call/call.h"
|
#include "call/call.h"
|
||||||
#include "call/fake_network_pipe.h"
|
#include "call/fake_network_pipe.h"
|
||||||
|
#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
|
||||||
#include "modules/rtp_rtcp/source/rtp_util.h"
|
#include "modules/rtp_rtcp/source/rtp_util.h"
|
||||||
|
#include "rtc_base/checks.h"
|
||||||
#include "rtc_base/task_utils/repeating_task.h"
|
#include "rtc_base/task_utils/repeating_task.h"
|
||||||
#include "rtc_base/time_utils.h"
|
#include "rtc_base/time_utils.h"
|
||||||
|
|
||||||
@ -43,10 +45,27 @@ DirectTransport::DirectTransport(
|
|||||||
std::unique_ptr<SimulatedPacketReceiverInterface> pipe,
|
std::unique_ptr<SimulatedPacketReceiverInterface> pipe,
|
||||||
Call* send_call,
|
Call* send_call,
|
||||||
const std::map<uint8_t, MediaType>& payload_type_map)
|
const std::map<uint8_t, MediaType>& payload_type_map)
|
||||||
|
: DirectTransport(task_queue,
|
||||||
|
std::move(pipe),
|
||||||
|
send_call,
|
||||||
|
payload_type_map,
|
||||||
|
{},
|
||||||
|
{}) {}
|
||||||
|
|
||||||
|
DirectTransport::DirectTransport(
|
||||||
|
TaskQueueBase* task_queue,
|
||||||
|
std::unique_ptr<SimulatedPacketReceiverInterface> pipe,
|
||||||
|
Call* send_call,
|
||||||
|
const std::map<uint8_t, MediaType>& payload_type_map,
|
||||||
|
rtc::ArrayView<const RtpExtension> audio_extensions,
|
||||||
|
rtc::ArrayView<const RtpExtension> video_extensions)
|
||||||
: send_call_(send_call),
|
: send_call_(send_call),
|
||||||
task_queue_(task_queue),
|
task_queue_(task_queue),
|
||||||
demuxer_(payload_type_map),
|
demuxer_(payload_type_map),
|
||||||
fake_network_(std::move(pipe)) {
|
fake_network_(std::move(pipe)),
|
||||||
|
use_legacy_send_(audio_extensions.empty() && video_extensions.empty()),
|
||||||
|
audio_extensions_(audio_extensions),
|
||||||
|
video_extensions_(video_extensions) {
|
||||||
Start();
|
Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,23 +88,54 @@ bool DirectTransport::SendRtp(const uint8_t* data,
|
|||||||
sent_packet.info.packet_type = rtc::PacketType::kData;
|
sent_packet.info.packet_type = rtc::PacketType::kData;
|
||||||
send_call_->OnSentPacket(sent_packet);
|
send_call_->OnSentPacket(sent_packet);
|
||||||
}
|
}
|
||||||
SendPacket(data, length);
|
|
||||||
|
if (use_legacy_send_) {
|
||||||
|
LegacySendPacket(data, length);
|
||||||
|
} else {
|
||||||
|
const RtpHeaderExtensionMap* extensions = nullptr;
|
||||||
|
MediaType media_type = demuxer_.GetMediaType(data, length);
|
||||||
|
switch (demuxer_.GetMediaType(data, length)) {
|
||||||
|
case webrtc::MediaType::AUDIO:
|
||||||
|
extensions = &audio_extensions_;
|
||||||
|
break;
|
||||||
|
case webrtc::MediaType::VIDEO:
|
||||||
|
extensions = &video_extensions_;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
RTC_CHECK_NOTREACHED();
|
||||||
|
}
|
||||||
|
RtpPacketReceived packet(extensions, Timestamp::Micros(rtc::TimeMicros()));
|
||||||
|
if (media_type == MediaType::VIDEO) {
|
||||||
|
packet.set_payload_type_frequency(kVideoPayloadTypeFrequency);
|
||||||
|
}
|
||||||
|
RTC_CHECK(packet.Parse(rtc::CopyOnWriteBuffer(data, length)));
|
||||||
|
fake_network_->DeliverRtpPacket(
|
||||||
|
media_type, std::move(packet),
|
||||||
|
[](const RtpPacketReceived& packet) { return false; });
|
||||||
|
}
|
||||||
|
MutexLock lock(&process_lock_);
|
||||||
|
if (!next_process_task_.Running())
|
||||||
|
ProcessPackets();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DirectTransport::SendRtcp(const uint8_t* data, size_t length) {
|
bool DirectTransport::SendRtcp(const uint8_t* data, size_t length) {
|
||||||
SendPacket(data, length);
|
if (use_legacy_send_) {
|
||||||
|
LegacySendPacket(data, length);
|
||||||
|
} else {
|
||||||
|
fake_network_->DeliverRtcpPacket(rtc::CopyOnWriteBuffer(data, length));
|
||||||
|
}
|
||||||
|
MutexLock lock(&process_lock_);
|
||||||
|
if (!next_process_task_.Running())
|
||||||
|
ProcessPackets();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DirectTransport::SendPacket(const uint8_t* data, size_t length) {
|
void DirectTransport::LegacySendPacket(const uint8_t* data, size_t length) {
|
||||||
MediaType media_type = demuxer_.GetMediaType(data, length);
|
MediaType media_type = demuxer_.GetMediaType(data, length);
|
||||||
int64_t send_time_us = rtc::TimeMicros();
|
int64_t send_time_us = rtc::TimeMicros();
|
||||||
fake_network_->DeliverPacket(media_type, rtc::CopyOnWriteBuffer(data, length),
|
fake_network_->DeliverPacket(media_type, rtc::CopyOnWriteBuffer(data, length),
|
||||||
send_time_us);
|
send_time_us);
|
||||||
MutexLock lock(&process_lock_);
|
|
||||||
if (!next_process_task_.Running())
|
|
||||||
ProcessPackets();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int DirectTransport::GetAverageDelayMs() {
|
int DirectTransport::GetAverageDelayMs() {
|
||||||
|
|||||||
@ -44,11 +44,21 @@ class Demuxer {
|
|||||||
// same task-queue - the one that's passed in via the constructor.
|
// same task-queue - the one that's passed in via the constructor.
|
||||||
class DirectTransport : public Transport {
|
class DirectTransport : public Transport {
|
||||||
public:
|
public:
|
||||||
DirectTransport(TaskQueueBase* task_queue,
|
// TODO(perkj, https://bugs.webrtc.org/7135): Remove header once downstream
|
||||||
|
// projects have been updated.
|
||||||
|
[[deprecated("Use ctor that provide header extensions.")]] DirectTransport(
|
||||||
|
TaskQueueBase* task_queue,
|
||||||
std::unique_ptr<SimulatedPacketReceiverInterface> pipe,
|
std::unique_ptr<SimulatedPacketReceiverInterface> pipe,
|
||||||
Call* send_call,
|
Call* send_call,
|
||||||
const std::map<uint8_t, MediaType>& payload_type_map);
|
const std::map<uint8_t, MediaType>& payload_type_map);
|
||||||
|
|
||||||
|
DirectTransport(TaskQueueBase* task_queue,
|
||||||
|
std::unique_ptr<SimulatedPacketReceiverInterface> pipe,
|
||||||
|
Call* send_call,
|
||||||
|
const std::map<uint8_t, MediaType>& payload_type_map,
|
||||||
|
rtc::ArrayView<const RtpExtension> audio_extensions,
|
||||||
|
rtc::ArrayView<const RtpExtension> video_extensions);
|
||||||
|
|
||||||
~DirectTransport() override;
|
~DirectTransport() override;
|
||||||
|
|
||||||
// TODO(holmer): Look into moving this to the constructor.
|
// TODO(holmer): Look into moving this to the constructor.
|
||||||
@ -63,7 +73,7 @@ class DirectTransport : public Transport {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void ProcessPackets() RTC_EXCLUSIVE_LOCKS_REQUIRED(&process_lock_);
|
void ProcessPackets() RTC_EXCLUSIVE_LOCKS_REQUIRED(&process_lock_);
|
||||||
void SendPacket(const uint8_t* data, size_t length);
|
void LegacySendPacket(const uint8_t* data, size_t length);
|
||||||
void Start();
|
void Start();
|
||||||
|
|
||||||
Call* const send_call_;
|
Call* const send_call_;
|
||||||
@ -75,6 +85,9 @@ class DirectTransport : public Transport {
|
|||||||
|
|
||||||
const Demuxer demuxer_;
|
const Demuxer demuxer_;
|
||||||
const std::unique_ptr<SimulatedPacketReceiverInterface> fake_network_;
|
const std::unique_ptr<SimulatedPacketReceiverInterface> fake_network_;
|
||||||
|
const bool use_legacy_send_;
|
||||||
|
const RtpHeaderExtensionMap audio_extensions_;
|
||||||
|
const RtpHeaderExtensionMap video_extensions_;
|
||||||
};
|
};
|
||||||
} // namespace test
|
} // namespace test
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
|||||||
@ -39,8 +39,15 @@ LayerFilteringTransport::LayerFilteringTransport(
|
|||||||
int selected_sl,
|
int selected_sl,
|
||||||
const std::map<uint8_t, MediaType>& payload_type_map,
|
const std::map<uint8_t, MediaType>& payload_type_map,
|
||||||
uint32_t ssrc_to_filter_min,
|
uint32_t ssrc_to_filter_min,
|
||||||
uint32_t ssrc_to_filter_max)
|
uint32_t ssrc_to_filter_max,
|
||||||
: DirectTransport(task_queue, std::move(pipe), send_call, payload_type_map),
|
rtc::ArrayView<const RtpExtension> audio_extensions,
|
||||||
|
rtc::ArrayView<const RtpExtension> video_extensions)
|
||||||
|
: DirectTransport(task_queue,
|
||||||
|
std::move(pipe),
|
||||||
|
send_call,
|
||||||
|
payload_type_map,
|
||||||
|
audio_extensions,
|
||||||
|
video_extensions),
|
||||||
vp8_video_payload_type_(vp8_video_payload_type),
|
vp8_video_payload_type_(vp8_video_payload_type),
|
||||||
vp9_video_payload_type_(vp9_video_payload_type),
|
vp9_video_payload_type_(vp9_video_payload_type),
|
||||||
vp8_depacketizer_(CreateVideoRtpDepacketizer(kVideoCodecVP8)),
|
vp8_depacketizer_(CreateVideoRtpDepacketizer(kVideoCodecVP8)),
|
||||||
@ -59,7 +66,9 @@ LayerFilteringTransport::LayerFilteringTransport(
|
|||||||
uint8_t vp9_video_payload_type,
|
uint8_t vp9_video_payload_type,
|
||||||
int selected_tl,
|
int selected_tl,
|
||||||
int selected_sl,
|
int selected_sl,
|
||||||
const std::map<uint8_t, MediaType>& payload_type_map)
|
const std::map<uint8_t, MediaType>& payload_type_map,
|
||||||
|
rtc::ArrayView<const RtpExtension> audio_extensions,
|
||||||
|
rtc::ArrayView<const RtpExtension> video_extensions)
|
||||||
: LayerFilteringTransport(task_queue,
|
: LayerFilteringTransport(task_queue,
|
||||||
std::move(pipe),
|
std::move(pipe),
|
||||||
send_call,
|
send_call,
|
||||||
@ -69,7 +78,9 @@ LayerFilteringTransport::LayerFilteringTransport(
|
|||||||
selected_sl,
|
selected_sl,
|
||||||
payload_type_map,
|
payload_type_map,
|
||||||
/*ssrc_to_filter_min=*/0,
|
/*ssrc_to_filter_min=*/0,
|
||||||
/*ssrc_to_filter_max=*/0xFFFFFFFF) {}
|
/*ssrc_to_filter_max=*/0xFFFFFFFF,
|
||||||
|
audio_extensions,
|
||||||
|
video_extensions) {}
|
||||||
|
|
||||||
bool LayerFilteringTransport::DiscardedLastPacket() const {
|
bool LayerFilteringTransport::DiscardedLastPacket() const {
|
||||||
return discarded_last_packet_;
|
return discarded_last_packet_;
|
||||||
|
|||||||
@ -39,7 +39,9 @@ class LayerFilteringTransport : public test::DirectTransport {
|
|||||||
int selected_sl,
|
int selected_sl,
|
||||||
const std::map<uint8_t, MediaType>& payload_type_map,
|
const std::map<uint8_t, MediaType>& payload_type_map,
|
||||||
uint32_t ssrc_to_filter_min,
|
uint32_t ssrc_to_filter_min,
|
||||||
uint32_t ssrc_to_filter_max);
|
uint32_t ssrc_to_filter_max,
|
||||||
|
rtc::ArrayView<const RtpExtension> audio_extensions,
|
||||||
|
rtc::ArrayView<const RtpExtension> video_extensions);
|
||||||
LayerFilteringTransport(
|
LayerFilteringTransport(
|
||||||
TaskQueueBase* task_queue,
|
TaskQueueBase* task_queue,
|
||||||
std::unique_ptr<SimulatedPacketReceiverInterface> pipe,
|
std::unique_ptr<SimulatedPacketReceiverInterface> pipe,
|
||||||
@ -48,7 +50,9 @@ class LayerFilteringTransport : public test::DirectTransport {
|
|||||||
uint8_t vp9_video_payload_type,
|
uint8_t vp9_video_payload_type,
|
||||||
int selected_tl,
|
int selected_tl,
|
||||||
int selected_sl,
|
int selected_sl,
|
||||||
const std::map<uint8_t, MediaType>& payload_type_map);
|
const std::map<uint8_t, MediaType>& payload_type_map,
|
||||||
|
rtc::ArrayView<const RtpExtension> audio_extensions,
|
||||||
|
rtc::ArrayView<const RtpExtension> video_extensions);
|
||||||
bool DiscardedLastPacket() const;
|
bool DiscardedLastPacket() const;
|
||||||
bool SendRtp(const uint8_t* data,
|
bool SendRtp(const uint8_t* data,
|
||||||
size_t length,
|
size_t length,
|
||||||
|
|||||||
@ -87,11 +87,15 @@ class PacketTransport : public test::DirectTransport {
|
|||||||
RtpRtcpObserver* observer,
|
RtpRtcpObserver* observer,
|
||||||
TransportType transport_type,
|
TransportType transport_type,
|
||||||
const std::map<uint8_t, MediaType>& payload_type_map,
|
const std::map<uint8_t, MediaType>& payload_type_map,
|
||||||
std::unique_ptr<SimulatedPacketReceiverInterface> nw_pipe)
|
std::unique_ptr<SimulatedPacketReceiverInterface> nw_pipe,
|
||||||
|
rtc::ArrayView<const RtpExtension> audio_extensions,
|
||||||
|
rtc::ArrayView<const RtpExtension> video_extensions)
|
||||||
: test::DirectTransport(task_queue,
|
: test::DirectTransport(task_queue,
|
||||||
std::move(nw_pipe),
|
std::move(nw_pipe),
|
||||||
send_call,
|
send_call,
|
||||||
payload_type_map),
|
payload_type_map,
|
||||||
|
audio_extensions,
|
||||||
|
video_extensions),
|
||||||
observer_(observer),
|
observer_(observer),
|
||||||
transport_type_(transport_type) {}
|
transport_type_(transport_type) {}
|
||||||
|
|
||||||
@ -100,8 +104,8 @@ class PacketTransport : public test::DirectTransport {
|
|||||||
size_t length,
|
size_t length,
|
||||||
const PacketOptions& options) override {
|
const PacketOptions& options) override {
|
||||||
EXPECT_TRUE(IsRtpPacket(rtc::MakeArrayView(packet, length)));
|
EXPECT_TRUE(IsRtpPacket(rtc::MakeArrayView(packet, length)));
|
||||||
RtpRtcpObserver::Action action;
|
RtpRtcpObserver::Action action = RtpRtcpObserver::SEND_PACKET;
|
||||||
{
|
if (observer_) {
|
||||||
if (transport_type_ == kSender) {
|
if (transport_type_ == kSender) {
|
||||||
action = observer_->OnSendRtp(packet, length);
|
action = observer_->OnSendRtp(packet, length);
|
||||||
} else {
|
} else {
|
||||||
@ -120,8 +124,8 @@ class PacketTransport : public test::DirectTransport {
|
|||||||
|
|
||||||
bool SendRtcp(const uint8_t* packet, size_t length) override {
|
bool SendRtcp(const uint8_t* packet, size_t length) override {
|
||||||
EXPECT_TRUE(IsRtcpPacket(rtc::MakeArrayView(packet, length)));
|
EXPECT_TRUE(IsRtcpPacket(rtc::MakeArrayView(packet, length)));
|
||||||
RtpRtcpObserver::Action action;
|
RtpRtcpObserver::Action action = RtpRtcpObserver::SEND_PACKET;
|
||||||
{
|
if (observer_) {
|
||||||
if (transport_type_ == kSender) {
|
if (transport_type_ == kSender) {
|
||||||
action = observer_->OnSendRtcp(packet, length);
|
action = observer_->OnSendRtcp(packet, length);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -196,25 +196,12 @@ TEST_F(BandwidthEndToEndTest, RembWithSendSideBwe) {
|
|||||||
clock_(Clock::GetRealTimeClock()),
|
clock_(Clock::GetRealTimeClock()),
|
||||||
sender_ssrc_(0),
|
sender_ssrc_(0),
|
||||||
remb_bitrate_bps_(1000000),
|
remb_bitrate_bps_(1000000),
|
||||||
receive_transport_(nullptr),
|
|
||||||
state_(kWaitForFirstRampUp),
|
state_(kWaitForFirstRampUp),
|
||||||
retransmission_rate_limiter_(clock_, 1000),
|
retransmission_rate_limiter_(clock_, 1000),
|
||||||
task_queue_(task_queue) {}
|
task_queue_(task_queue) {}
|
||||||
|
|
||||||
void OnStreamsStopped() override { rtp_rtcp_ = nullptr; }
|
void OnStreamsStopped() override { rtp_rtcp_ = nullptr; }
|
||||||
|
|
||||||
std::unique_ptr<test::PacketTransport> CreateReceiveTransport(
|
|
||||||
TaskQueueBase* task_queue) override {
|
|
||||||
auto receive_transport = std::make_unique<test::PacketTransport>(
|
|
||||||
task_queue, nullptr, this, test::PacketTransport::kReceiver,
|
|
||||||
payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
|
|
||||||
BuiltInNetworkBehaviorConfig())));
|
|
||||||
receive_transport_ = receive_transport.get();
|
|
||||||
return receive_transport;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModifySenderBitrateConfig(
|
void ModifySenderBitrateConfig(
|
||||||
BitrateConstraints* bitrate_config) override {
|
BitrateConstraints* bitrate_config) override {
|
||||||
// Set a high start bitrate to reduce the test completion time.
|
// Set a high start bitrate to reduce the test completion time.
|
||||||
@ -231,15 +218,8 @@ TEST_F(BandwidthEndToEndTest, RembWithSendSideBwe) {
|
|||||||
encoder_config->max_bitrate_bps = 2000000;
|
encoder_config->max_bitrate_bps = 2000000;
|
||||||
|
|
||||||
ASSERT_EQ(1u, receive_configs->size());
|
ASSERT_EQ(1u, receive_configs->size());
|
||||||
RtpRtcpInterface::Configuration config;
|
remb_sender_local_ssrc_ = (*receive_configs)[0].rtp.local_ssrc;
|
||||||
config.receiver_only = true;
|
remb_sender_remote_ssrc_ = (*receive_configs)[0].rtp.remote_ssrc;
|
||||||
config.clock = clock_;
|
|
||||||
config.outgoing_transport = receive_transport_;
|
|
||||||
config.retransmission_rate_limiter = &retransmission_rate_limiter_;
|
|
||||||
config.local_media_ssrc = (*receive_configs)[0].rtp.local_ssrc;
|
|
||||||
rtp_rtcp_ = ModuleRtpRtcpImpl2::Create(config);
|
|
||||||
rtp_rtcp_->SetRemoteSSRC((*receive_configs)[0].rtp.remote_ssrc);
|
|
||||||
rtp_rtcp_->SetRTCPStatus(RtcpMode::kReducedSize);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnCallsCreated(Call* sender_call, Call* receiver_call) override {
|
void OnCallsCreated(Call* sender_call, Call* receiver_call) override {
|
||||||
@ -248,6 +228,23 @@ TEST_F(BandwidthEndToEndTest, RembWithSendSideBwe) {
|
|||||||
task_queue_->PostTask([this]() { PollStats(); });
|
task_queue_->PostTask([this]() { PollStats(); });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OnTransportCreated(
|
||||||
|
test::PacketTransport* /*to_receiver*/,
|
||||||
|
SimulatedNetworkInterface* /*sender_network*/,
|
||||||
|
test::PacketTransport* to_sender,
|
||||||
|
SimulatedNetworkInterface* /*receiver_network*/) override {
|
||||||
|
RtpRtcpInterface::Configuration config;
|
||||||
|
config.receiver_only = true;
|
||||||
|
config.clock = clock_;
|
||||||
|
config.outgoing_transport = to_sender;
|
||||||
|
config.retransmission_rate_limiter = &retransmission_rate_limiter_;
|
||||||
|
config.local_media_ssrc = remb_sender_local_ssrc_;
|
||||||
|
|
||||||
|
rtp_rtcp_ = ModuleRtpRtcpImpl2::Create(config);
|
||||||
|
rtp_rtcp_->SetRemoteSSRC(remb_sender_remote_ssrc_);
|
||||||
|
rtp_rtcp_->SetRTCPStatus(RtcpMode::kReducedSize);
|
||||||
|
}
|
||||||
|
|
||||||
void PollStats() {
|
void PollStats() {
|
||||||
Call::Stats stats = sender_call_->GetStats();
|
Call::Stats stats = sender_call_->GetStats();
|
||||||
switch (state_) {
|
switch (state_) {
|
||||||
@ -296,9 +293,10 @@ TEST_F(BandwidthEndToEndTest, RembWithSendSideBwe) {
|
|||||||
Call* sender_call_;
|
Call* sender_call_;
|
||||||
Clock* const clock_;
|
Clock* const clock_;
|
||||||
uint32_t sender_ssrc_;
|
uint32_t sender_ssrc_;
|
||||||
|
uint32_t remb_sender_local_ssrc_ = 0;
|
||||||
|
uint32_t remb_sender_remote_ssrc_ = 0;
|
||||||
int remb_bitrate_bps_;
|
int remb_bitrate_bps_;
|
||||||
std::unique_ptr<ModuleRtpRtcpImpl2> rtp_rtcp_;
|
std::unique_ptr<ModuleRtpRtcpImpl2> rtp_rtcp_;
|
||||||
test::PacketTransport* receive_transport_;
|
|
||||||
TestState state_;
|
TestState state_;
|
||||||
RateLimiter retransmission_rate_limiter_;
|
RateLimiter retransmission_rate_limiter_;
|
||||||
TaskQueueBase* const task_queue_;
|
TaskQueueBase* const task_queue_;
|
||||||
|
|||||||
@ -94,31 +94,17 @@ TEST_F(CallOperationEndToEndTest, RendersSingleDelayedFrame) {
|
|||||||
} renderer;
|
} renderer;
|
||||||
|
|
||||||
test::FrameForwarder frame_forwarder;
|
test::FrameForwarder frame_forwarder;
|
||||||
std::unique_ptr<test::DirectTransport> sender_transport;
|
|
||||||
std::unique_ptr<test::DirectTransport> receiver_transport;
|
|
||||||
|
|
||||||
SendTask(
|
SendTask(
|
||||||
task_queue(), [this, &renderer, &frame_forwarder, &sender_transport,
|
task_queue(), [this, &renderer, &frame_forwarder]() {
|
||||||
&receiver_transport]() {
|
|
||||||
CreateCalls();
|
CreateCalls();
|
||||||
|
CreateSendTransport(BuiltInNetworkBehaviorConfig(),
|
||||||
|
/*observer=*/nullptr);
|
||||||
|
|
||||||
sender_transport = std::make_unique<test::DirectTransport>(
|
CreateReceiveTransport(BuiltInNetworkBehaviorConfig(),
|
||||||
task_queue(),
|
/*observer=*/nullptr);
|
||||||
std::make_unique<FakeNetworkPipe>(
|
CreateSendConfig(1, 0, 0);
|
||||||
Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
|
CreateMatchingReceiveConfigs();
|
||||||
BuiltInNetworkBehaviorConfig())),
|
|
||||||
sender_call_.get(), payload_type_map_);
|
|
||||||
receiver_transport = std::make_unique<test::DirectTransport>(
|
|
||||||
task_queue(),
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
|
|
||||||
BuiltInNetworkBehaviorConfig())),
|
|
||||||
receiver_call_.get(), payload_type_map_);
|
|
||||||
sender_transport->SetReceiver(receiver_call_->Receiver());
|
|
||||||
receiver_transport->SetReceiver(sender_call_->Receiver());
|
|
||||||
|
|
||||||
CreateSendConfig(1, 0, 0, sender_transport.get());
|
|
||||||
CreateMatchingReceiveConfigs(receiver_transport.get());
|
|
||||||
|
|
||||||
video_receive_configs_[0].renderer = &renderer;
|
video_receive_configs_[0].renderer = &renderer;
|
||||||
|
|
||||||
@ -145,11 +131,9 @@ TEST_F(CallOperationEndToEndTest, RendersSingleDelayedFrame) {
|
|||||||
EXPECT_TRUE(renderer.Wait())
|
EXPECT_TRUE(renderer.Wait())
|
||||||
<< "Timed out while waiting for the frame to render.";
|
<< "Timed out while waiting for the frame to render.";
|
||||||
|
|
||||||
SendTask(task_queue(), [this, &sender_transport, &receiver_transport]() {
|
SendTask(task_queue(), [this]() {
|
||||||
Stop();
|
Stop();
|
||||||
DestroyStreams();
|
DestroyStreams();
|
||||||
sender_transport.reset();
|
|
||||||
receiver_transport.reset();
|
|
||||||
DestroyCalls();
|
DestroyCalls();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -171,27 +155,15 @@ TEST_F(CallOperationEndToEndTest, TransmitsFirstFrame) {
|
|||||||
std::unique_ptr<test::DirectTransport> receiver_transport;
|
std::unique_ptr<test::DirectTransport> receiver_transport;
|
||||||
|
|
||||||
SendTask(
|
SendTask(
|
||||||
task_queue(), [this, &renderer, &frame_generator, &frame_forwarder,
|
task_queue(), [this, &renderer, &frame_generator, &frame_forwarder]() {
|
||||||
&sender_transport, &receiver_transport]() {
|
|
||||||
CreateCalls();
|
CreateCalls();
|
||||||
|
CreateSendTransport(BuiltInNetworkBehaviorConfig(),
|
||||||
|
/*observer=*/nullptr);
|
||||||
|
CreateReceiveTransport(BuiltInNetworkBehaviorConfig(),
|
||||||
|
/*observer=*/nullptr);
|
||||||
|
|
||||||
sender_transport = std::make_unique<test::DirectTransport>(
|
CreateSendConfig(1, 0, 0);
|
||||||
task_queue(),
|
CreateMatchingReceiveConfigs();
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
|
|
||||||
BuiltInNetworkBehaviorConfig())),
|
|
||||||
sender_call_.get(), payload_type_map_);
|
|
||||||
receiver_transport = std::make_unique<test::DirectTransport>(
|
|
||||||
task_queue(),
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
|
|
||||||
BuiltInNetworkBehaviorConfig())),
|
|
||||||
receiver_call_.get(), payload_type_map_);
|
|
||||||
sender_transport->SetReceiver(receiver_call_->Receiver());
|
|
||||||
receiver_transport->SetReceiver(sender_call_->Receiver());
|
|
||||||
|
|
||||||
CreateSendConfig(1, 0, 0, sender_transport.get());
|
|
||||||
CreateMatchingReceiveConfigs(receiver_transport.get());
|
|
||||||
video_receive_configs_[0].renderer = &renderer;
|
video_receive_configs_[0].renderer = &renderer;
|
||||||
|
|
||||||
CreateVideoStreams();
|
CreateVideoStreams();
|
||||||
@ -213,11 +185,9 @@ TEST_F(CallOperationEndToEndTest, TransmitsFirstFrame) {
|
|||||||
EXPECT_TRUE(renderer.Wait())
|
EXPECT_TRUE(renderer.Wait())
|
||||||
<< "Timed out while waiting for the frame to render.";
|
<< "Timed out while waiting for the frame to render.";
|
||||||
|
|
||||||
SendTask(task_queue(), [this, &sender_transport, &receiver_transport]() {
|
SendTask(task_queue(), [this]() {
|
||||||
Stop();
|
Stop();
|
||||||
DestroyStreams();
|
DestroyStreams();
|
||||||
sender_transport.reset();
|
|
||||||
receiver_transport.reset();
|
|
||||||
DestroyCalls();
|
DestroyCalls();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -158,17 +158,16 @@ class RtcpXrObserver : public test::EndToEndTest {
|
|||||||
return enable_zero_target_bitrate_ ? 2 : 1;
|
return enable_zero_target_bitrate_ ? 2 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<test::PacketTransport> CreateSendTransport(
|
BuiltInNetworkBehaviorConfig GetSendTransportConfig() const override {
|
||||||
TaskQueueBase* task_queue,
|
return forward_transport_config_;
|
||||||
Call* sender_call) {
|
}
|
||||||
auto network =
|
|
||||||
std::make_unique<SimulatedNetwork>(forward_transport_config_);
|
void OnTransportCreated(
|
||||||
send_simulated_network_ = network.get();
|
test::PacketTransport* to_receiver,
|
||||||
return std::make_unique<test::PacketTransport>(
|
SimulatedNetworkInterface* sender_network,
|
||||||
task_queue, sender_call, this, test::PacketTransport::kSender,
|
test::PacketTransport* to_sender,
|
||||||
test::CallTest::payload_type_map_,
|
SimulatedNetworkInterface* receiver_network) override {
|
||||||
std::make_unique<FakeNetworkPipe>(Clock::GetRealTimeClock(),
|
send_simulated_network_ = sender_network;
|
||||||
std::move(network)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModifyVideoConfigs(
|
void ModifyVideoConfigs(
|
||||||
@ -210,7 +209,7 @@ class RtcpXrObserver : public test::EndToEndTest {
|
|||||||
bool sent_zero_rtcp_target_bitrate_ RTC_GUARDED_BY(&mutex_);
|
bool sent_zero_rtcp_target_bitrate_ RTC_GUARDED_BY(&mutex_);
|
||||||
int sent_rtcp_dlrr_;
|
int sent_rtcp_dlrr_;
|
||||||
BuiltInNetworkBehaviorConfig forward_transport_config_;
|
BuiltInNetworkBehaviorConfig forward_transport_config_;
|
||||||
SimulatedNetwork* send_simulated_network_;
|
SimulatedNetworkInterface* send_simulated_network_ = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST_F(ExtendedReportsEndToEndTest,
|
TEST_F(ExtendedReportsEndToEndTest,
|
||||||
|
|||||||
@ -256,19 +256,12 @@ class FlexfecRenderObserver : public test::EndToEndTest,
|
|||||||
return SEND_PACKET;
|
return SEND_PACKET;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<test::PacketTransport> CreateSendTransport(
|
BuiltInNetworkBehaviorConfig GetSendTransportConfig() const override {
|
||||||
TaskQueueBase* task_queue,
|
|
||||||
Call* sender_call) override {
|
|
||||||
// At low RTT (< kLowRttNackMs) -> NACK only, no FEC.
|
// At low RTT (< kLowRttNackMs) -> NACK only, no FEC.
|
||||||
const int kNetworkDelayMs = 100;
|
const int kNetworkDelayMs = 100;
|
||||||
BuiltInNetworkBehaviorConfig config;
|
BuiltInNetworkBehaviorConfig config;
|
||||||
config.queue_delay_ms = kNetworkDelayMs;
|
config.queue_delay_ms = kNetworkDelayMs;
|
||||||
return std::make_unique<test::PacketTransport>(
|
return config;
|
||||||
task_queue, sender_call, this, test::PacketTransport::kSender,
|
|
||||||
test::CallTest::payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(),
|
|
||||||
std::make_unique<SimulatedNetwork>(config)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnFrame(const VideoFrame& video_frame) override {
|
void OnFrame(const VideoFrame& video_frame) override {
|
||||||
@ -439,20 +432,13 @@ TEST_F(FecEndToEndTest, ReceivedUlpfecPacketsNotNacked) {
|
|||||||
return SEND_PACKET;
|
return SEND_PACKET;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<test::PacketTransport> CreateSendTransport(
|
BuiltInNetworkBehaviorConfig GetSendTransportConfig() const override {
|
||||||
TaskQueueBase* task_queue,
|
|
||||||
Call* sender_call) override {
|
|
||||||
// At low RTT (< kLowRttNackMs) -> NACK only, no FEC.
|
// At low RTT (< kLowRttNackMs) -> NACK only, no FEC.
|
||||||
// Configure some network delay.
|
// Configure some network delay.
|
||||||
const int kNetworkDelayMs = 50;
|
const int kNetworkDelayMs = 50;
|
||||||
BuiltInNetworkBehaviorConfig config;
|
BuiltInNetworkBehaviorConfig config;
|
||||||
config.queue_delay_ms = kNetworkDelayMs;
|
config.queue_delay_ms = kNetworkDelayMs;
|
||||||
return std::make_unique<test::PacketTransport>(
|
return config;
|
||||||
task_queue, sender_call, this, test::PacketTransport::kSender,
|
|
||||||
payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(),
|
|
||||||
std::make_unique<SimulatedNetwork>(config)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(holmer): Investigate why we don't send FEC packets when the bitrate
|
// TODO(holmer): Investigate why we don't send FEC packets when the bitrate
|
||||||
|
|||||||
@ -131,22 +131,8 @@ class MultiCodecReceiveTest : public test::CallTest {
|
|||||||
MultiCodecReceiveTest() {
|
MultiCodecReceiveTest() {
|
||||||
SendTask(task_queue(), [this]() {
|
SendTask(task_queue(), [this]() {
|
||||||
CreateCalls();
|
CreateCalls();
|
||||||
|
CreateSendTransport(BuiltInNetworkBehaviorConfig(), &observer_);
|
||||||
send_transport_.reset(new test::PacketTransport(
|
CreateReceiveTransport(BuiltInNetworkBehaviorConfig(), &observer_);
|
||||||
task_queue(), sender_call_.get(), &observer_,
|
|
||||||
test::PacketTransport::kSender, kPayloadTypeMap,
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
|
|
||||||
BuiltInNetworkBehaviorConfig()))));
|
|
||||||
send_transport_->SetReceiver(receiver_call_->Receiver());
|
|
||||||
|
|
||||||
receive_transport_.reset(new test::PacketTransport(
|
|
||||||
task_queue(), receiver_call_.get(), &observer_,
|
|
||||||
test::PacketTransport::kReceiver, kPayloadTypeMap,
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
|
|
||||||
BuiltInNetworkBehaviorConfig()))));
|
|
||||||
receive_transport_->SetReceiver(sender_call_->Receiver());
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -170,10 +156,6 @@ class MultiCodecReceiveTest : public test::CallTest {
|
|||||||
void RunTestWithCodecs(const std::vector<CodecConfig>& configs);
|
void RunTestWithCodecs(const std::vector<CodecConfig>& configs);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const std::map<uint8_t, MediaType> kPayloadTypeMap = {
|
|
||||||
{CallTest::kPayloadTypeVP8, MediaType::VIDEO},
|
|
||||||
{CallTest::kPayloadTypeVP9, MediaType::VIDEO},
|
|
||||||
{CallTest::kPayloadTypeH264, MediaType::VIDEO}};
|
|
||||||
FrameObserver observer_;
|
FrameObserver observer_;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -245,9 +227,9 @@ void MultiCodecReceiveTest::RunTestWithCodecs(
|
|||||||
// Create and start call.
|
// Create and start call.
|
||||||
SendTask(task_queue(),
|
SendTask(task_queue(),
|
||||||
[this, &configs, &encoder_factory, &decoder_factory]() {
|
[this, &configs, &encoder_factory, &decoder_factory]() {
|
||||||
CreateSendConfig(1, 0, 0, send_transport_.get());
|
CreateSendConfig(1, 0, 0);
|
||||||
ConfigureEncoder(configs[0], &encoder_factory);
|
ConfigureEncoder(configs[0], &encoder_factory);
|
||||||
CreateMatchingReceiveConfigs(receive_transport_.get());
|
CreateMatchingReceiveConfigs();
|
||||||
video_receive_configs_[0].renderer = &observer_;
|
video_receive_configs_[0].renderer = &observer_;
|
||||||
// Disable to avoid post-decode frame dropping in
|
// Disable to avoid post-decode frame dropping in
|
||||||
// VideoRenderFrames.
|
// VideoRenderFrames.
|
||||||
|
|||||||
@ -73,7 +73,6 @@ void MultiStreamTester::RunTest() {
|
|||||||
sender_transport = CreateSendTransport(task_queue.get(), sender_call.get());
|
sender_transport = CreateSendTransport(task_queue.get(), sender_call.get());
|
||||||
receiver_transport =
|
receiver_transport =
|
||||||
CreateReceiveTransport(task_queue.get(), receiver_call.get());
|
CreateReceiveTransport(task_queue.get(), receiver_call.get());
|
||||||
|
|
||||||
sender_transport->SetReceiver(receiver_call->Receiver());
|
sender_transport->SetReceiver(receiver_call->Receiver());
|
||||||
receiver_transport->SetReceiver(sender_call->Receiver());
|
receiver_transport->SetReceiver(sender_call->Receiver());
|
||||||
|
|
||||||
@ -158,22 +157,24 @@ void MultiStreamTester::UpdateReceiveConfig(
|
|||||||
std::unique_ptr<test::DirectTransport> MultiStreamTester::CreateSendTransport(
|
std::unique_ptr<test::DirectTransport> MultiStreamTester::CreateSendTransport(
|
||||||
TaskQueueBase* task_queue,
|
TaskQueueBase* task_queue,
|
||||||
Call* sender_call) {
|
Call* sender_call) {
|
||||||
|
std::vector<RtpExtension> extensions = {};
|
||||||
return std::make_unique<test::DirectTransport>(
|
return std::make_unique<test::DirectTransport>(
|
||||||
task_queue,
|
task_queue,
|
||||||
std::make_unique<FakeNetworkPipe>(
|
std::make_unique<FakeNetworkPipe>(
|
||||||
Clock::GetRealTimeClock(),
|
Clock::GetRealTimeClock(),
|
||||||
std::make_unique<SimulatedNetwork>(BuiltInNetworkBehaviorConfig())),
|
std::make_unique<SimulatedNetwork>(BuiltInNetworkBehaviorConfig())),
|
||||||
sender_call, payload_type_map_);
|
sender_call, payload_type_map_, extensions, extensions);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<test::DirectTransport>
|
std::unique_ptr<test::DirectTransport>
|
||||||
MultiStreamTester::CreateReceiveTransport(TaskQueueBase* task_queue,
|
MultiStreamTester::CreateReceiveTransport(TaskQueueBase* task_queue,
|
||||||
Call* receiver_call) {
|
Call* receiver_call) {
|
||||||
|
std::vector<RtpExtension> extensions = {};
|
||||||
return std::make_unique<test::DirectTransport>(
|
return std::make_unique<test::DirectTransport>(
|
||||||
task_queue,
|
task_queue,
|
||||||
std::make_unique<FakeNetworkPipe>(
|
std::make_unique<FakeNetworkPipe>(
|
||||||
Clock::GetRealTimeClock(),
|
Clock::GetRealTimeClock(),
|
||||||
std::make_unique<SimulatedNetwork>(BuiltInNetworkBehaviorConfig())),
|
std::make_unique<SimulatedNetwork>(BuiltInNetworkBehaviorConfig())),
|
||||||
receiver_call, payload_type_map_);
|
receiver_call, payload_type_map_, extensions, extensions);
|
||||||
}
|
}
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
|||||||
@ -122,22 +122,13 @@ void NetworkStateEndToEndTest::VerifyNewVideoSendStreamsRespectNetworkState(
|
|||||||
void NetworkStateEndToEndTest::VerifyNewVideoReceiveStreamsRespectNetworkState(
|
void NetworkStateEndToEndTest::VerifyNewVideoReceiveStreamsRespectNetworkState(
|
||||||
MediaType network_to_bring_up,
|
MediaType network_to_bring_up,
|
||||||
Transport* transport) {
|
Transport* transport) {
|
||||||
std::unique_ptr<test::DirectTransport> sender_transport;
|
SendTask(task_queue(), [this, network_to_bring_up, transport]() {
|
||||||
|
|
||||||
SendTask(
|
|
||||||
task_queue(),
|
|
||||||
[this, &sender_transport, network_to_bring_up, transport]() {
|
|
||||||
CreateCalls();
|
CreateCalls();
|
||||||
receiver_call_->SignalChannelNetworkState(network_to_bring_up,
|
receiver_call_->SignalChannelNetworkState(network_to_bring_up, kNetworkUp);
|
||||||
kNetworkUp);
|
CreateSendTransport(BuiltInNetworkBehaviorConfig(),
|
||||||
sender_transport = std::make_unique<test::DirectTransport>(
|
/*observer=*/nullptr);
|
||||||
task_queue(),
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
CreateSendConfig(1, 0, 0);
|
||||||
Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
|
|
||||||
BuiltInNetworkBehaviorConfig())),
|
|
||||||
sender_call_.get(), payload_type_map_);
|
|
||||||
sender_transport->SetReceiver(receiver_call_->Receiver());
|
|
||||||
CreateSendConfig(1, 0, 0, sender_transport.get());
|
|
||||||
CreateMatchingReceiveConfigs(transport);
|
CreateMatchingReceiveConfigs(transport);
|
||||||
CreateVideoStreams();
|
CreateVideoStreams();
|
||||||
CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth,
|
CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth,
|
||||||
@ -147,10 +138,9 @@ void NetworkStateEndToEndTest::VerifyNewVideoReceiveStreamsRespectNetworkState(
|
|||||||
|
|
||||||
SleepMs(kSilenceTimeoutMs);
|
SleepMs(kSilenceTimeoutMs);
|
||||||
|
|
||||||
SendTask(task_queue(), [this, &sender_transport]() {
|
SendTask(task_queue(), [this]() {
|
||||||
Stop();
|
Stop();
|
||||||
DestroyStreams();
|
DestroyStreams();
|
||||||
sender_transport.reset();
|
|
||||||
DestroyCalls();
|
DestroyCalls();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -142,24 +142,13 @@ TEST_F(RetransmissionEndToEndTest, ReceivesNackAndRetransmitsAudio) {
|
|||||||
size_t GetNumVideoStreams() const override { return 0; }
|
size_t GetNumVideoStreams() const override { return 0; }
|
||||||
size_t GetNumAudioStreams() const override { return 1; }
|
size_t GetNumAudioStreams() const override { return 1; }
|
||||||
|
|
||||||
std::unique_ptr<test::PacketTransport> CreateReceiveTransport(
|
|
||||||
TaskQueueBase* task_queue) override {
|
|
||||||
auto receive_transport = std::make_unique<test::PacketTransport>(
|
|
||||||
task_queue, nullptr, this, test::PacketTransport::kReceiver,
|
|
||||||
payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
|
|
||||||
BuiltInNetworkBehaviorConfig())));
|
|
||||||
receive_transport_ = receive_transport.get();
|
|
||||||
return receive_transport;
|
|
||||||
}
|
|
||||||
|
|
||||||
Action OnSendRtp(const uint8_t* packet, size_t length) override {
|
Action OnSendRtp(const uint8_t* packet, size_t length) override {
|
||||||
RtpPacket rtp_packet;
|
RtpPacket rtp_packet;
|
||||||
EXPECT_TRUE(rtp_packet.Parse(packet, length));
|
EXPECT_TRUE(rtp_packet.Parse(packet, length));
|
||||||
|
|
||||||
if (!sequence_number_to_retransmit_) {
|
if (!sequence_number_to_retransmit_) {
|
||||||
sequence_number_to_retransmit_ = rtp_packet.SequenceNumber();
|
sequence_number_to_retransmit_ = rtp_packet.SequenceNumber();
|
||||||
|
return DROP_PACKET;
|
||||||
|
|
||||||
// Don't ask for retransmission straight away, may be deduped in pacer.
|
// Don't ask for retransmission straight away, may be deduped in pacer.
|
||||||
} else if (rtp_packet.SequenceNumber() ==
|
} else if (rtp_packet.SequenceNumber() ==
|
||||||
@ -186,6 +175,7 @@ TEST_F(RetransmissionEndToEndTest, ReceivesNackAndRetransmitsAudio) {
|
|||||||
(*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
|
(*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
|
||||||
local_ssrc_ = (*receive_configs)[0].rtp.local_ssrc;
|
local_ssrc_ = (*receive_configs)[0].rtp.local_ssrc;
|
||||||
remote_ssrc_ = (*receive_configs)[0].rtp.remote_ssrc;
|
remote_ssrc_ = (*receive_configs)[0].rtp.remote_ssrc;
|
||||||
|
receive_transport_ = (*receive_configs)[0].rtcp_send_transport;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PerformTest() override {
|
void PerformTest() override {
|
||||||
|
|||||||
@ -279,34 +279,13 @@ void RtpRtcpEndToEndTest::TestRtpStatePreservation(
|
|||||||
std::map<uint32_t, bool> ssrc_observed_ RTC_GUARDED_BY(mutex_);
|
std::map<uint32_t, bool> ssrc_observed_ RTC_GUARDED_BY(mutex_);
|
||||||
} observer(use_rtx);
|
} observer(use_rtx);
|
||||||
|
|
||||||
std::unique_ptr<test::PacketTransport> send_transport;
|
|
||||||
std::unique_ptr<test::PacketTransport> receive_transport;
|
|
||||||
|
|
||||||
VideoEncoderConfig one_stream;
|
VideoEncoderConfig one_stream;
|
||||||
|
|
||||||
SendTask(
|
SendTask(task_queue(), [this, &observer, &one_stream, use_rtx]() {
|
||||||
task_queue(), [this, &observer, &send_transport, &receive_transport,
|
|
||||||
&one_stream, use_rtx]() {
|
|
||||||
CreateCalls();
|
CreateCalls();
|
||||||
|
CreateSendTransport(BuiltInNetworkBehaviorConfig(), &observer);
|
||||||
send_transport = std::make_unique<test::PacketTransport>(
|
CreateReceiveTransport(BuiltInNetworkBehaviorConfig(), &observer);
|
||||||
task_queue(), sender_call_.get(), &observer,
|
CreateSendConfig(kNumSimulcastStreams, 0, 0);
|
||||||
test::PacketTransport::kSender, payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(),
|
|
||||||
std::make_unique<SimulatedNetwork>(
|
|
||||||
BuiltInNetworkBehaviorConfig())));
|
|
||||||
receive_transport = std::make_unique<test::PacketTransport>(
|
|
||||||
task_queue(), nullptr, &observer, test::PacketTransport::kReceiver,
|
|
||||||
payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(),
|
|
||||||
std::make_unique<SimulatedNetwork>(
|
|
||||||
BuiltInNetworkBehaviorConfig())));
|
|
||||||
send_transport->SetReceiver(receiver_call_->Receiver());
|
|
||||||
receive_transport->SetReceiver(sender_call_->Receiver());
|
|
||||||
|
|
||||||
CreateSendConfig(kNumSimulcastStreams, 0, 0, send_transport.get());
|
|
||||||
|
|
||||||
if (use_rtx) {
|
if (use_rtx) {
|
||||||
for (size_t i = 0; i < kNumSimulcastStreams; ++i) {
|
for (size_t i = 0; i < kNumSimulcastStreams; ++i) {
|
||||||
@ -322,7 +301,7 @@ void RtpRtcpEndToEndTest::TestRtpStatePreservation(
|
|||||||
one_stream = GetVideoEncoderConfig()->Copy();
|
one_stream = GetVideoEncoderConfig()->Copy();
|
||||||
// one_stream.streams.resize(1);
|
// one_stream.streams.resize(1);
|
||||||
one_stream.number_of_streams = 1;
|
one_stream.number_of_streams = 1;
|
||||||
CreateMatchingReceiveConfigs(receive_transport.get());
|
CreateMatchingReceiveConfigs();
|
||||||
|
|
||||||
CreateVideoStreams();
|
CreateVideoStreams();
|
||||||
CreateFrameGeneratorCapturer(30, 1280, 720);
|
CreateFrameGeneratorCapturer(30, 1280, 720);
|
||||||
@ -348,7 +327,7 @@ void RtpRtcpEndToEndTest::TestRtpStatePreservation(
|
|||||||
// to wait for a second for periodic Sender Report.
|
// to wait for a second for periodic Sender Report.
|
||||||
rtcp::RapidResyncRequest force_send_sr_back_request;
|
rtcp::RapidResyncRequest force_send_sr_back_request;
|
||||||
rtc::Buffer packet = force_send_sr_back_request.Build();
|
rtc::Buffer packet = force_send_sr_back_request.Build();
|
||||||
static_cast<webrtc::test::DirectTransport*>(receive_transport.get())
|
static_cast<webrtc::Transport*>(receive_transport_.get())
|
||||||
->SendRtcp(packet.data(), packet.size());
|
->SendRtcp(packet.data(), packet.size());
|
||||||
}
|
}
|
||||||
CreateFrameGeneratorCapturer(30, 1280, 720);
|
CreateFrameGeneratorCapturer(30, 1280, 720);
|
||||||
@ -383,11 +362,9 @@ void RtpRtcpEndToEndTest::TestRtpStatePreservation(
|
|||||||
<< "Timed out waiting for all SSRCs to send packets.";
|
<< "Timed out waiting for all SSRCs to send packets.";
|
||||||
}
|
}
|
||||||
|
|
||||||
SendTask(task_queue(), [this, &send_transport, &receive_transport]() {
|
SendTask(task_queue(), [this]() {
|
||||||
Stop();
|
Stop();
|
||||||
DestroyStreams();
|
DestroyStreams();
|
||||||
send_transport.reset();
|
|
||||||
receive_transport.reset();
|
|
||||||
DestroyCalls();
|
DestroyCalls();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -478,8 +455,6 @@ TEST_F(RtpRtcpEndToEndTest, DISABLED_TestFlexfecRtpStatePreservation) {
|
|||||||
static constexpr int kFrameMaxHeight = 180;
|
static constexpr int kFrameMaxHeight = 180;
|
||||||
static constexpr int kFrameRate = 15;
|
static constexpr int kFrameRate = 15;
|
||||||
|
|
||||||
std::unique_ptr<test::PacketTransport> send_transport;
|
|
||||||
std::unique_ptr<test::PacketTransport> receive_transport;
|
|
||||||
test::FunctionVideoEncoderFactory encoder_factory(
|
test::FunctionVideoEncoderFactory encoder_factory(
|
||||||
[]() { return VP8Encoder::Create(); });
|
[]() { return VP8Encoder::Create(); });
|
||||||
|
|
||||||
@ -490,29 +465,14 @@ TEST_F(RtpRtcpEndToEndTest, DISABLED_TestFlexfecRtpStatePreservation) {
|
|||||||
lossy_delayed_link.loss_percent = 2;
|
lossy_delayed_link.loss_percent = 2;
|
||||||
lossy_delayed_link.queue_delay_ms = 50;
|
lossy_delayed_link.queue_delay_ms = 50;
|
||||||
|
|
||||||
send_transport = std::make_unique<test::PacketTransport>(
|
CreateSendTransport(lossy_delayed_link, &observer);
|
||||||
task_queue(), sender_call_.get(), &observer,
|
CreateReceiveTransport(BuiltInNetworkBehaviorConfig(), &observer);
|
||||||
test::PacketTransport::kSender, payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(),
|
|
||||||
std::make_unique<SimulatedNetwork>(lossy_delayed_link)));
|
|
||||||
send_transport->SetReceiver(receiver_call_->Receiver());
|
|
||||||
|
|
||||||
BuiltInNetworkBehaviorConfig flawless_link;
|
|
||||||
receive_transport = std::make_unique<test::PacketTransport>(
|
|
||||||
task_queue(), nullptr, &observer, test::PacketTransport::kReceiver,
|
|
||||||
payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(),
|
|
||||||
std::make_unique<SimulatedNetwork>(flawless_link)));
|
|
||||||
receive_transport->SetReceiver(sender_call_->Receiver());
|
|
||||||
|
|
||||||
// For reduced flakyness, we use a real VP8 encoder together with NACK
|
// For reduced flakyness, we use a real VP8 encoder together with NACK
|
||||||
// and RTX.
|
// and RTX.
|
||||||
const int kNumVideoStreams = 1;
|
const int kNumVideoStreams = 1;
|
||||||
const int kNumFlexfecStreams = 1;
|
const int kNumFlexfecStreams = 1;
|
||||||
CreateSendConfig(kNumVideoStreams, 0, kNumFlexfecStreams,
|
CreateSendConfig(kNumVideoStreams, 0, kNumFlexfecStreams);
|
||||||
send_transport.get());
|
|
||||||
|
|
||||||
GetVideoSendConfig()->encoder_settings.encoder_factory = &encoder_factory;
|
GetVideoSendConfig()->encoder_settings.encoder_factory = &encoder_factory;
|
||||||
GetVideoSendConfig()->rtp.payload_name = "VP8";
|
GetVideoSendConfig()->rtp.payload_name = "VP8";
|
||||||
@ -522,7 +482,7 @@ TEST_F(RtpRtcpEndToEndTest, DISABLED_TestFlexfecRtpStatePreservation) {
|
|||||||
GetVideoSendConfig()->rtp.rtx.payload_type = kSendRtxPayloadType;
|
GetVideoSendConfig()->rtp.rtx.payload_type = kSendRtxPayloadType;
|
||||||
GetVideoEncoderConfig()->codec_type = kVideoCodecVP8;
|
GetVideoEncoderConfig()->codec_type = kVideoCodecVP8;
|
||||||
|
|
||||||
CreateMatchingReceiveConfigs(receive_transport.get());
|
CreateMatchingReceiveConfigs();
|
||||||
video_receive_configs_[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
|
video_receive_configs_[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
|
||||||
video_receive_configs_[0].rtp.rtx_ssrc = kSendRtxSsrcs[0];
|
video_receive_configs_[0].rtp.rtx_ssrc = kSendRtxSsrcs[0];
|
||||||
video_receive_configs_[0]
|
video_receive_configs_[0]
|
||||||
@ -533,7 +493,7 @@ TEST_F(RtpRtcpEndToEndTest, DISABLED_TestFlexfecRtpStatePreservation) {
|
|||||||
// CreateMatchingReceiveConfigs since this is not a test::BaseTest.
|
// CreateMatchingReceiveConfigs since this is not a test::BaseTest.
|
||||||
// Set up the receive config manually instead.
|
// Set up the receive config manually instead.
|
||||||
FlexfecReceiveStream::Config flexfec_receive_config(
|
FlexfecReceiveStream::Config flexfec_receive_config(
|
||||||
receive_transport.get());
|
receive_transport_.get());
|
||||||
flexfec_receive_config.payload_type =
|
flexfec_receive_config.payload_type =
|
||||||
GetVideoSendConfig()->rtp.flexfec.payload_type;
|
GetVideoSendConfig()->rtp.flexfec.payload_type;
|
||||||
flexfec_receive_config.rtp.remote_ssrc =
|
flexfec_receive_config.rtp.remote_ssrc =
|
||||||
@ -582,11 +542,9 @@ TEST_F(RtpRtcpEndToEndTest, DISABLED_TestFlexfecRtpStatePreservation) {
|
|||||||
EXPECT_TRUE(observer.Wait()) << "Timed out waiting for packets.";
|
EXPECT_TRUE(observer.Wait()) << "Timed out waiting for packets.";
|
||||||
|
|
||||||
// Cleanup.
|
// Cleanup.
|
||||||
SendTask(task_queue(), [this, &send_transport, &receive_transport]() {
|
SendTask(task_queue(), [this]() {
|
||||||
Stop();
|
Stop();
|
||||||
DestroyStreams();
|
DestroyStreams();
|
||||||
send_transport.reset();
|
|
||||||
receive_transport.reset();
|
|
||||||
DestroyCalls();
|
DestroyCalls();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,8 +12,10 @@
|
|||||||
|
|
||||||
#include "api/test/simulated_network.h"
|
#include "api/test/simulated_network.h"
|
||||||
#include "call/fake_network_pipe.h"
|
#include "call/fake_network_pipe.h"
|
||||||
|
#include "call/packet_receiver.h"
|
||||||
#include "call/simulated_network.h"
|
#include "call/simulated_network.h"
|
||||||
#include "modules/rtp_rtcp/source/rtp_packet.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/rtp_rtcp/source/rtp_util.h"
|
||||||
#include "rtc_base/task_queue_for_test.h"
|
#include "rtc_base/task_queue_for_test.h"
|
||||||
#include "test/call_test.h"
|
#include "test/call_test.h"
|
||||||
@ -22,6 +24,12 @@
|
|||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
class SsrcEndToEndTest : public test::CallTest {
|
class SsrcEndToEndTest : public test::CallTest {
|
||||||
|
public:
|
||||||
|
SsrcEndToEndTest() {
|
||||||
|
RegisterRtpExtension(
|
||||||
|
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 1));
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void TestSendsSetSsrcs(size_t num_ssrcs, bool send_single_ssrc_first);
|
void TestSendsSetSsrcs(size_t num_ssrcs, bool send_single_ssrc_first);
|
||||||
};
|
};
|
||||||
@ -49,31 +57,34 @@ TEST_F(SsrcEndToEndTest, ReceiverUsesLocalSsrc) {
|
|||||||
RunBaseTest(&test);
|
RunBaseTest(&test);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(SsrcEndToEndTest, UnknownRtpPacketGivesUnknownSsrcReturnCode) {
|
TEST_F(SsrcEndToEndTest, UnknownRtpPacketTriggersUndemuxablePacketHandler) {
|
||||||
class PacketInputObserver : public PacketReceiver {
|
class PacketInputObserver : public PacketReceiver {
|
||||||
public:
|
public:
|
||||||
explicit PacketInputObserver(PacketReceiver* receiver)
|
explicit PacketInputObserver(PacketReceiver* receiver)
|
||||||
: receiver_(receiver) {}
|
: receiver_(receiver) {}
|
||||||
|
|
||||||
bool Wait() { return delivered_packet_.Wait(kDefaultTimeout); }
|
bool Wait() {
|
||||||
|
return undemuxable_packet_handler_triggered_.Wait(kDefaultTimeout);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DeliveryStatus DeliverPacket(MediaType media_type,
|
void DeliverRtpPacket(
|
||||||
rtc::CopyOnWriteBuffer packet,
|
MediaType media_type,
|
||||||
int64_t packet_time_us) override {
|
RtpPacketReceived packet,
|
||||||
if (IsRtcpPacket(packet)) {
|
OnUndemuxablePacketHandler undemuxable_packet_handler) override {
|
||||||
return receiver_->DeliverPacket(media_type, std::move(packet),
|
PacketReceiver::OnUndemuxablePacketHandler handler =
|
||||||
packet_time_us);
|
[this](const RtpPacketReceived& packet) {
|
||||||
}
|
undemuxable_packet_handler_triggered_.Set();
|
||||||
DeliveryStatus delivery_status = receiver_->DeliverPacket(
|
// No need to re-attempt deliver the packet.
|
||||||
media_type, std::move(packet), packet_time_us);
|
return false;
|
||||||
EXPECT_EQ(DELIVERY_UNKNOWN_SSRC, delivery_status);
|
};
|
||||||
delivered_packet_.Set();
|
receiver_->DeliverRtpPacket(media_type, std::move(packet),
|
||||||
return delivery_status;
|
std::move(handler));
|
||||||
}
|
}
|
||||||
|
void DeliverRtcpPacket(rtc::CopyOnWriteBuffer packet) override {}
|
||||||
|
|
||||||
PacketReceiver* receiver_;
|
PacketReceiver* receiver_;
|
||||||
rtc::Event delivered_packet_;
|
rtc::Event undemuxable_packet_handler_triggered_;
|
||||||
};
|
};
|
||||||
|
|
||||||
std::unique_ptr<test::DirectTransport> send_transport;
|
std::unique_ptr<test::DirectTransport> send_transport;
|
||||||
@ -90,7 +101,8 @@ TEST_F(SsrcEndToEndTest, UnknownRtpPacketGivesUnknownSsrcReturnCode) {
|
|||||||
std::make_unique<FakeNetworkPipe>(
|
std::make_unique<FakeNetworkPipe>(
|
||||||
Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
|
Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
|
||||||
BuiltInNetworkBehaviorConfig())),
|
BuiltInNetworkBehaviorConfig())),
|
||||||
sender_call_.get(), payload_type_map_);
|
sender_call_.get(), payload_type_map_, GetRegisteredExtensions(),
|
||||||
|
GetRegisteredExtensions());
|
||||||
receive_transport = std::make_unique<test::DirectTransport>(
|
receive_transport = std::make_unique<test::DirectTransport>(
|
||||||
task_queue(),
|
task_queue(),
|
||||||
std::make_unique<FakeNetworkPipe>(
|
std::make_unique<FakeNetworkPipe>(
|
||||||
|
|||||||
@ -228,17 +228,10 @@ TEST_F(StatsEndToEndTest, GetStats) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<test::PacketTransport> CreateSendTransport(
|
BuiltInNetworkBehaviorConfig GetSendTransportConfig() const override {
|
||||||
TaskQueueBase* task_queue,
|
|
||||||
Call* sender_call) override {
|
|
||||||
BuiltInNetworkBehaviorConfig network_config;
|
BuiltInNetworkBehaviorConfig network_config;
|
||||||
network_config.loss_percent = 5;
|
network_config.loss_percent = 5;
|
||||||
return std::make_unique<test::PacketTransport>(
|
return network_config;
|
||||||
task_queue, sender_call, this, test::PacketTransport::kSender,
|
|
||||||
payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(),
|
|
||||||
std::make_unique<SimulatedNetwork>(network_config)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModifySenderBitrateConfig(
|
void ModifySenderBitrateConfig(
|
||||||
@ -349,6 +342,8 @@ TEST_F(StatsEndToEndTest, GetStats) {
|
|||||||
|
|
||||||
TEST_F(StatsEndToEndTest, TimingFramesAreReported) {
|
TEST_F(StatsEndToEndTest, TimingFramesAreReported) {
|
||||||
static const int kExtensionId = 5;
|
static const int kExtensionId = 5;
|
||||||
|
RegisterRtpExtension(
|
||||||
|
RtpExtension(RtpExtension::kVideoTimingUri, kExtensionId));
|
||||||
|
|
||||||
class StatsObserver : public test::EndToEndTest {
|
class StatsObserver : public test::EndToEndTest {
|
||||||
public:
|
public:
|
||||||
@ -514,16 +509,12 @@ TEST_F(StatsEndToEndTest, MAYBE_ContentTypeSwitches) {
|
|||||||
&encoder_config_with_screenshare]() {
|
&encoder_config_with_screenshare]() {
|
||||||
CreateSenderCall(send_config);
|
CreateSenderCall(send_config);
|
||||||
CreateReceiverCall(recv_config);
|
CreateReceiverCall(recv_config);
|
||||||
|
CreateReceiveTransport(test.GetReceiveTransportConfig(), &test);
|
||||||
receive_transport_ = test.CreateReceiveTransport(task_queue());
|
CreateSendTransport(test.GetReceiveTransportConfig(), &test);
|
||||||
send_transport_ =
|
|
||||||
test.CreateSendTransport(task_queue(), sender_call_.get());
|
|
||||||
send_transport_->SetReceiver(receiver_call_->Receiver());
|
|
||||||
receive_transport_->SetReceiver(sender_call_->Receiver());
|
|
||||||
|
|
||||||
receiver_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp);
|
receiver_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp);
|
||||||
CreateSendConfig(1, 0, 0, send_transport_.get());
|
CreateSendConfig(1, 0, 0);
|
||||||
CreateMatchingReceiveConfigs(receive_transport_.get());
|
CreateMatchingReceiveConfigs();
|
||||||
|
|
||||||
// Modify send and receive configs.
|
// Modify send and receive configs.
|
||||||
GetVideoSendConfig()->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
|
GetVideoSendConfig()->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
|
||||||
@ -562,8 +553,6 @@ TEST_F(StatsEndToEndTest, MAYBE_ContentTypeSwitches) {
|
|||||||
SendTask(task_queue(), [this]() {
|
SendTask(task_queue(), [this]() {
|
||||||
Stop();
|
Stop();
|
||||||
DestroyStreams();
|
DestroyStreams();
|
||||||
send_transport_.reset();
|
|
||||||
receive_transport_.reset();
|
|
||||||
DestroyCalls();
|
DestroyCalls();
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -698,36 +687,22 @@ TEST_F(StatsEndToEndTest, CallReportsRttForSender) {
|
|||||||
static const int kSendDelayMs = 30;
|
static const int kSendDelayMs = 30;
|
||||||
static const int kReceiveDelayMs = 70;
|
static const int kReceiveDelayMs = 70;
|
||||||
|
|
||||||
std::unique_ptr<test::DirectTransport> sender_transport;
|
SendTask(task_queue(), [this]() {
|
||||||
std::unique_ptr<test::DirectTransport> receiver_transport;
|
|
||||||
|
|
||||||
SendTask(task_queue(),
|
|
||||||
[this, &sender_transport, &receiver_transport]() {
|
|
||||||
BuiltInNetworkBehaviorConfig config;
|
BuiltInNetworkBehaviorConfig config;
|
||||||
config.queue_delay_ms = kSendDelayMs;
|
config.queue_delay_ms = kSendDelayMs;
|
||||||
CreateCalls();
|
CreateCalls();
|
||||||
sender_transport = std::make_unique<test::DirectTransport>(
|
CreateSendTransport(config, /*observer*/ nullptr);
|
||||||
task_queue(),
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(),
|
|
||||||
std::make_unique<SimulatedNetwork>(config)),
|
|
||||||
sender_call_.get(), payload_type_map_);
|
|
||||||
config.queue_delay_ms = kReceiveDelayMs;
|
|
||||||
receiver_transport = std::make_unique<test::DirectTransport>(
|
|
||||||
task_queue(),
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(),
|
|
||||||
std::make_unique<SimulatedNetwork>(config)),
|
|
||||||
receiver_call_.get(), payload_type_map_);
|
|
||||||
sender_transport->SetReceiver(receiver_call_->Receiver());
|
|
||||||
receiver_transport->SetReceiver(sender_call_->Receiver());
|
|
||||||
|
|
||||||
CreateSendConfig(1, 0, 0, sender_transport.get());
|
config.queue_delay_ms = kReceiveDelayMs;
|
||||||
CreateMatchingReceiveConfigs(receiver_transport.get());
|
CreateReceiveTransport(config, /*observer*/ nullptr);
|
||||||
|
|
||||||
|
CreateSendConfig(1, 0, 0);
|
||||||
|
CreateMatchingReceiveConfigs();
|
||||||
|
|
||||||
CreateVideoStreams();
|
CreateVideoStreams();
|
||||||
CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth,
|
CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth,
|
||||||
kDefaultHeight);
|
kDefaultHeight);
|
||||||
|
receiver_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp);
|
||||||
Start();
|
Start();
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -749,11 +724,9 @@ TEST_F(StatsEndToEndTest, CallReportsRttForSender) {
|
|||||||
SleepMs(10);
|
SleepMs(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
SendTask(task_queue(), [this, &sender_transport, &receiver_transport]() {
|
SendTask(task_queue(), [this]() {
|
||||||
Stop();
|
Stop();
|
||||||
DestroyStreams();
|
DestroyStreams();
|
||||||
sender_transport.reset();
|
|
||||||
receiver_transport.reset();
|
|
||||||
DestroyCalls();
|
DestroyCalls();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,7 +9,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "api/rtp_parameters.h"
|
||||||
#include "api/task_queue/task_queue_base.h"
|
#include "api/task_queue/task_queue_base.h"
|
||||||
#include "api/units/time_delta.h"
|
#include "api/units/time_delta.h"
|
||||||
#include "call/call.h"
|
#include "call/call.h"
|
||||||
@ -46,14 +48,18 @@ TEST(TransportFeedbackMultiStreamTest, AssignsTransportSequenceNumbers) {
|
|||||||
TaskQueueBase* task_queue,
|
TaskQueueBase* task_queue,
|
||||||
Call* sender_call,
|
Call* sender_call,
|
||||||
const std::map<uint32_t, uint32_t>& ssrc_map,
|
const std::map<uint32_t, uint32_t>& ssrc_map,
|
||||||
const std::map<uint8_t, MediaType>& payload_type_map)
|
const std::map<uint8_t, MediaType>& payload_type_map,
|
||||||
|
rtc::ArrayView<const RtpExtension> audio_extensions,
|
||||||
|
rtc::ArrayView<const RtpExtension> video_extensions)
|
||||||
: DirectTransport(task_queue,
|
: DirectTransport(task_queue,
|
||||||
std::make_unique<FakeNetworkPipe>(
|
std::make_unique<FakeNetworkPipe>(
|
||||||
Clock::GetRealTimeClock(),
|
Clock::GetRealTimeClock(),
|
||||||
std::make_unique<SimulatedNetwork>(
|
std::make_unique<SimulatedNetwork>(
|
||||||
BuiltInNetworkBehaviorConfig())),
|
BuiltInNetworkBehaviorConfig())),
|
||||||
sender_call,
|
sender_call,
|
||||||
payload_type_map),
|
payload_type_map,
|
||||||
|
audio_extensions,
|
||||||
|
video_extensions),
|
||||||
rtx_to_media_ssrcs_(ssrc_map),
|
rtx_to_media_ssrcs_(ssrc_map),
|
||||||
rtx_padding_observed_(false),
|
rtx_padding_observed_(false),
|
||||||
retransmit_observed_(false),
|
retransmit_observed_(false),
|
||||||
@ -219,8 +225,12 @@ TEST(TransportFeedbackMultiStreamTest, AssignsTransportSequenceNumbers) {
|
|||||||
RTC_DCHECK(payload_type_map.find(kSendRtxPayloadType) ==
|
RTC_DCHECK(payload_type_map.find(kSendRtxPayloadType) ==
|
||||||
payload_type_map.end());
|
payload_type_map.end());
|
||||||
payload_type_map[kSendRtxPayloadType] = MediaType::VIDEO;
|
payload_type_map[kSendRtxPayloadType] = MediaType::VIDEO;
|
||||||
|
std::vector<RtpExtension> extensions = {
|
||||||
|
RtpExtension(RtpExtension::kTransportSequenceNumberUri,
|
||||||
|
kTransportSequenceNumberExtensionId)};
|
||||||
auto observer = std::make_unique<RtpExtensionHeaderObserver>(
|
auto observer = std::make_unique<RtpExtensionHeaderObserver>(
|
||||||
task_queue, sender_call, rtx_to_media_ssrcs_, payload_type_map);
|
task_queue, sender_call, rtx_to_media_ssrcs_, payload_type_map,
|
||||||
|
extensions, extensions);
|
||||||
observer_ = observer.get();
|
observer_ = observer.get();
|
||||||
return observer;
|
return observer;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -256,15 +256,7 @@ void PictureIdTest::SetupEncoder(VideoEncoderFactory* encoder_factory,
|
|||||||
SendTask(
|
SendTask(
|
||||||
task_queue(), [this, encoder_factory, payload_name]() {
|
task_queue(), [this, encoder_factory, payload_name]() {
|
||||||
CreateCalls();
|
CreateCalls();
|
||||||
|
CreateSendTransport(BuiltInNetworkBehaviorConfig(), observer_.get());
|
||||||
send_transport_.reset(new test::PacketTransport(
|
|
||||||
task_queue(), sender_call_.get(), observer_.get(),
|
|
||||||
test::PacketTransport::kSender, payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(),
|
|
||||||
std::make_unique<SimulatedNetwork>(
|
|
||||||
BuiltInNetworkBehaviorConfig()))));
|
|
||||||
|
|
||||||
CreateSendConfig(kNumSimulcastStreams, 0, 0, send_transport_.get());
|
CreateSendConfig(kNumSimulcastStreams, 0, 0, send_transport_.get());
|
||||||
GetVideoSendConfig()->encoder_settings.encoder_factory =
|
GetVideoSendConfig()->encoder_settings.encoder_factory =
|
||||||
encoder_factory;
|
encoder_factory;
|
||||||
|
|||||||
@ -218,43 +218,38 @@ rtc::VideoSourceInterface<VideoFrame>* VideoAnalyzer::OutputInterface() {
|
|||||||
return &captured_frame_forwarder_;
|
return &captured_frame_forwarder_;
|
||||||
}
|
}
|
||||||
|
|
||||||
PacketReceiver::DeliveryStatus VideoAnalyzer::DeliverPacket(
|
void VideoAnalyzer::DeliverRtcpPacket(rtc::CopyOnWriteBuffer packet) {
|
||||||
MediaType media_type,
|
return receiver_->DeliverRtcpPacket(std::move(packet));
|
||||||
rtc::CopyOnWriteBuffer packet,
|
|
||||||
int64_t packet_time_us) {
|
|
||||||
// Ignore timestamps of RTCP packets. They're not synchronized with
|
|
||||||
// RTP packet timestamps and so they would confuse wrap_handler_.
|
|
||||||
if (IsRtcpPacket(packet)) {
|
|
||||||
return receiver_->DeliverPacket(media_type, std::move(packet),
|
|
||||||
packet_time_us);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VideoAnalyzer::DeliverRtpPacket(
|
||||||
|
MediaType media_type,
|
||||||
|
RtpPacketReceived packet,
|
||||||
|
PacketReceiver::OnUndemuxablePacketHandler undemuxable_packet_handler) {
|
||||||
if (rtp_file_writer_) {
|
if (rtp_file_writer_) {
|
||||||
test::RtpPacket p;
|
test::RtpPacket p;
|
||||||
memcpy(p.data, packet.cdata(), packet.size());
|
memcpy(p.data, packet.Buffer().data(), packet.size());
|
||||||
p.length = packet.size();
|
p.length = packet.size();
|
||||||
p.original_length = packet.size();
|
p.original_length = packet.size();
|
||||||
p.time_ms = clock_->TimeInMilliseconds() - start_ms_;
|
p.time_ms = clock_->TimeInMilliseconds() - start_ms_;
|
||||||
rtp_file_writer_->WritePacket(&p);
|
rtp_file_writer_->WritePacket(&p);
|
||||||
}
|
}
|
||||||
|
|
||||||
RtpPacket rtp_packet;
|
if (!IsFlexfec(packet.PayloadType()) &&
|
||||||
rtp_packet.Parse(packet);
|
(packet.Ssrc() == ssrc_to_analyze_ ||
|
||||||
if (!IsFlexfec(rtp_packet.PayloadType()) &&
|
packet.Ssrc() == rtx_ssrc_to_analyze_)) {
|
||||||
(rtp_packet.Ssrc() == ssrc_to_analyze_ ||
|
|
||||||
rtp_packet.Ssrc() == rtx_ssrc_to_analyze_)) {
|
|
||||||
// Ignore FlexFEC timestamps, to avoid collisions with media timestamps.
|
// Ignore FlexFEC timestamps, to avoid collisions with media timestamps.
|
||||||
// (FlexFEC and media are sent on different SSRCs, which have different
|
// (FlexFEC and media are sent on different SSRCs, which have different
|
||||||
// timestamps spaces.)
|
// timestamps spaces.)
|
||||||
// Also ignore packets from wrong SSRC, but include retransmits.
|
// Also ignore packets from wrong SSRC, but include retransmits.
|
||||||
MutexLock lock(&lock_);
|
MutexLock lock(&lock_);
|
||||||
int64_t timestamp =
|
int64_t timestamp =
|
||||||
wrap_handler_.Unwrap(rtp_packet.Timestamp() - rtp_timestamp_delta_);
|
wrap_handler_.Unwrap(packet.Timestamp() - rtp_timestamp_delta_);
|
||||||
recv_times_[timestamp] = clock_->CurrentNtpInMilliseconds();
|
recv_times_[timestamp] = clock_->CurrentNtpInMilliseconds();
|
||||||
}
|
}
|
||||||
|
|
||||||
return receiver_->DeliverPacket(media_type, std::move(packet),
|
return receiver_->DeliverRtpPacket(media_type, std::move(packet),
|
||||||
packet_time_us);
|
std::move(undemuxable_packet_handler));
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoAnalyzer::PreEncodeOnFrame(const VideoFrame& video_frame) {
|
void VideoAnalyzer::PreEncodeOnFrame(const VideoFrame& video_frame) {
|
||||||
|
|||||||
@ -67,9 +67,11 @@ class VideoAnalyzer : public PacketReceiver,
|
|||||||
rtc::VideoSinkInterface<VideoFrame>* InputInterface();
|
rtc::VideoSinkInterface<VideoFrame>* InputInterface();
|
||||||
rtc::VideoSourceInterface<VideoFrame>* OutputInterface();
|
rtc::VideoSourceInterface<VideoFrame>* OutputInterface();
|
||||||
|
|
||||||
DeliveryStatus DeliverPacket(MediaType media_type,
|
void DeliverRtcpPacket(rtc::CopyOnWriteBuffer packet) override;
|
||||||
rtc::CopyOnWriteBuffer packet,
|
void DeliverRtpPacket(MediaType media_type,
|
||||||
int64_t packet_time_us) override;
|
RtpPacketReceived packet,
|
||||||
|
PacketReceiver::OnUndemuxablePacketHandler
|
||||||
|
undemuxable_packet_handler) override;
|
||||||
|
|
||||||
void PreEncodeOnFrame(const VideoFrame& video_frame);
|
void PreEncodeOnFrame(const VideoFrame& video_frame);
|
||||||
void PostEncodeOnFrame(size_t stream_id, uint32_t timestamp);
|
void PostEncodeOnFrame(size_t stream_id, uint32_t timestamp);
|
||||||
|
|||||||
@ -411,26 +411,27 @@ VideoQualityTest::VideoQualityTest(
|
|||||||
encoder_factory_ = std::make_unique<InternalEncoderFactory>();
|
encoder_factory_ = std::make_unique<InternalEncoderFactory>();
|
||||||
}
|
}
|
||||||
|
|
||||||
payload_type_map_ = test::CallTest::payload_type_map_;
|
|
||||||
RTC_DCHECK(payload_type_map_.find(kPayloadTypeH264) ==
|
|
||||||
payload_type_map_.end());
|
|
||||||
RTC_DCHECK(payload_type_map_.find(kPayloadTypeVP8) ==
|
|
||||||
payload_type_map_.end());
|
|
||||||
RTC_DCHECK(payload_type_map_.find(kPayloadTypeVP9) ==
|
|
||||||
payload_type_map_.end());
|
|
||||||
RTC_DCHECK(payload_type_map_.find(kPayloadTypeGeneric) ==
|
|
||||||
payload_type_map_.end());
|
|
||||||
payload_type_map_[kPayloadTypeH264] = webrtc::MediaType::VIDEO;
|
|
||||||
payload_type_map_[kPayloadTypeVP8] = webrtc::MediaType::VIDEO;
|
|
||||||
payload_type_map_[kPayloadTypeVP9] = webrtc::MediaType::VIDEO;
|
|
||||||
payload_type_map_[kPayloadTypeGeneric] = webrtc::MediaType::VIDEO;
|
|
||||||
|
|
||||||
fec_controller_factory_ =
|
fec_controller_factory_ =
|
||||||
std::move(injection_components_->fec_controller_factory);
|
std::move(injection_components_->fec_controller_factory);
|
||||||
network_state_predictor_factory_ =
|
network_state_predictor_factory_ =
|
||||||
std::move(injection_components_->network_state_predictor_factory);
|
std::move(injection_components_->network_state_predictor_factory);
|
||||||
network_controller_factory_ =
|
network_controller_factory_ =
|
||||||
std::move(injection_components_->network_controller_factory);
|
std::move(injection_components_->network_controller_factory);
|
||||||
|
|
||||||
|
// Register header extensions that are used by transport to identify
|
||||||
|
// extensions when parsing incomig packets.
|
||||||
|
RegisterRtpExtension(RtpExtension(RtpExtension::kTransportSequenceNumberUri,
|
||||||
|
kTransportSequenceNumberExtensionId));
|
||||||
|
RegisterRtpExtension(
|
||||||
|
RtpExtension(RtpExtension::kAbsSendTimeUri, kAbsSendTimeExtensionId));
|
||||||
|
RegisterRtpExtension(RtpExtension(RtpExtension::kGenericFrameDescriptorUri00,
|
||||||
|
kGenericFrameDescriptorExtensionId00));
|
||||||
|
RegisterRtpExtension(RtpExtension(RtpExtension::kDependencyDescriptorUri,
|
||||||
|
kRtpExtensionDependencyDescriptor));
|
||||||
|
RegisterRtpExtension(RtpExtension(RtpExtension::kVideoContentTypeUri,
|
||||||
|
kVideoContentTypeExtensionId));
|
||||||
|
RegisterRtpExtension(
|
||||||
|
RtpExtension(RtpExtension::kVideoTimingUri, kVideoTimingExtensionId));
|
||||||
}
|
}
|
||||||
|
|
||||||
VideoQualityTest::InjectionComponents::InjectionComponents() = default;
|
VideoQualityTest::InjectionComponents::InjectionComponents() = default;
|
||||||
@ -1185,7 +1186,8 @@ VideoQualityTest::CreateSendTransport() {
|
|||||||
params_.video[0].selected_tl, params_.ss[0].selected_sl,
|
params_.video[0].selected_tl, params_.ss[0].selected_sl,
|
||||||
payload_type_map_, kVideoSendSsrcs[0],
|
payload_type_map_, kVideoSendSsrcs[0],
|
||||||
static_cast<uint32_t>(kVideoSendSsrcs[0] + params_.ss[0].streams.size() -
|
static_cast<uint32_t>(kVideoSendSsrcs[0] + params_.ss[0].streams.size() -
|
||||||
1));
|
1),
|
||||||
|
GetRegisteredExtensions(), GetRegisteredExtensions());
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<test::DirectTransport>
|
std::unique_ptr<test::DirectTransport>
|
||||||
@ -1199,7 +1201,8 @@ VideoQualityTest::CreateReceiveTransport() {
|
|||||||
return std::make_unique<test::DirectTransport>(
|
return std::make_unique<test::DirectTransport>(
|
||||||
task_queue(),
|
task_queue(),
|
||||||
std::make_unique<FakeNetworkPipe>(clock_, std::move(network_behavior)),
|
std::make_unique<FakeNetworkPipe>(clock_, std::move(network_behavior)),
|
||||||
receiver_call_.get(), payload_type_map_);
|
receiver_call_.get(), payload_type_map_, GetRegisteredExtensions(),
|
||||||
|
GetRegisteredExtensions());
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoQualityTest::RunWithAnalyzer(const Params& params) {
|
void VideoQualityTest::RunWithAnalyzer(const Params& params) {
|
||||||
|
|||||||
@ -65,8 +65,6 @@ class VideoQualityTest : public test::CallTest,
|
|||||||
static std::vector<int> ParseCSV(const std::string& str);
|
static std::vector<int> ParseCSV(const std::string& str);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::map<uint8_t, webrtc::MediaType> payload_type_map_;
|
|
||||||
|
|
||||||
// No-op implementation to be able to instantiate this class from non-TEST_F
|
// No-op implementation to be able to instantiate this class from non-TEST_F
|
||||||
// locations.
|
// locations.
|
||||||
void TestBody() override;
|
void TestBody() override;
|
||||||
|
|||||||
@ -19,6 +19,7 @@
|
|||||||
#include "api/test/metrics/global_metrics_logger_and_exporter.h"
|
#include "api/test/metrics/global_metrics_logger_and_exporter.h"
|
||||||
#include "api/test/metrics/metric.h"
|
#include "api/test/metrics/metric.h"
|
||||||
#include "api/test/simulated_network.h"
|
#include "api/test/simulated_network.h"
|
||||||
|
#include "api/units/time_delta.h"
|
||||||
#include "api/video/builtin_video_bitrate_allocator_factory.h"
|
#include "api/video/builtin_video_bitrate_allocator_factory.h"
|
||||||
#include "api/video/encoded_image.h"
|
#include "api/video/encoded_image.h"
|
||||||
#include "api/video/video_bitrate_allocation.h"
|
#include "api/video/video_bitrate_allocation.h"
|
||||||
@ -68,6 +69,7 @@
|
|||||||
#include "test/gtest.h"
|
#include "test/gtest.h"
|
||||||
#include "test/null_transport.h"
|
#include "test/null_transport.h"
|
||||||
#include "test/rtcp_packet_parser.h"
|
#include "test/rtcp_packet_parser.h"
|
||||||
|
#include "test/rtp_rtcp_observer.h"
|
||||||
#include "test/video_encoder_proxy_factory.h"
|
#include "test/video_encoder_proxy_factory.h"
|
||||||
#include "video/config/encoder_stream_factory.h"
|
#include "video/config/encoder_stream_factory.h"
|
||||||
#include "video/send_statistics_proxy.h"
|
#include "video/send_statistics_proxy.h"
|
||||||
@ -600,21 +602,14 @@ class UlpfecObserver : public test::EndToEndTest {
|
|||||||
return SEND_PACKET;
|
return SEND_PACKET;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<test::PacketTransport> CreateSendTransport(
|
BuiltInNetworkBehaviorConfig GetSendTransportConfig() const override {
|
||||||
TaskQueueBase* task_queue,
|
|
||||||
Call* sender_call) override {
|
|
||||||
// At low RTT (< kLowRttNackMs) -> NACK only, no FEC.
|
// At low RTT (< kLowRttNackMs) -> NACK only, no FEC.
|
||||||
// Configure some network delay.
|
// Configure some network delay.
|
||||||
const int kNetworkDelayMs = 100;
|
const int kNetworkDelayMs = 100;
|
||||||
BuiltInNetworkBehaviorConfig config;
|
BuiltInNetworkBehaviorConfig config;
|
||||||
config.loss_percent = 5;
|
config.loss_percent = 5;
|
||||||
config.queue_delay_ms = kNetworkDelayMs;
|
config.queue_delay_ms = kNetworkDelayMs;
|
||||||
return std::make_unique<test::PacketTransport>(
|
return config;
|
||||||
task_queue, sender_call, this, test::PacketTransport::kSender,
|
|
||||||
VideoSendStreamTest::payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(),
|
|
||||||
std::make_unique<SimulatedNetwork>(config)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModifyVideoConfigs(
|
void ModifyVideoConfigs(
|
||||||
@ -799,36 +794,23 @@ class FlexfecObserver : public test::EndToEndTest {
|
|||||||
return SEND_PACKET;
|
return SEND_PACKET;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<test::PacketTransport> CreateSendTransport(
|
BuiltInNetworkBehaviorConfig GetSendTransportConfig() const {
|
||||||
TaskQueueBase* task_queue,
|
|
||||||
Call* sender_call) override {
|
|
||||||
// At low RTT (< kLowRttNackMs) -> NACK only, no FEC.
|
// At low RTT (< kLowRttNackMs) -> NACK only, no FEC.
|
||||||
// Therefore we need some network delay.
|
// Therefore we need some network delay.
|
||||||
const int kNetworkDelayMs = 100;
|
const int kNetworkDelayMs = 100;
|
||||||
BuiltInNetworkBehaviorConfig config;
|
BuiltInNetworkBehaviorConfig config;
|
||||||
config.loss_percent = 5;
|
config.loss_percent = 5;
|
||||||
config.queue_delay_ms = kNetworkDelayMs;
|
config.queue_delay_ms = kNetworkDelayMs;
|
||||||
return std::make_unique<test::PacketTransport>(
|
return config;
|
||||||
task_queue, sender_call, this, test::PacketTransport::kSender,
|
|
||||||
VideoSendStreamTest::payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(),
|
|
||||||
std::make_unique<SimulatedNetwork>(config)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<test::PacketTransport> CreateReceiveTransport(
|
BuiltInNetworkBehaviorConfig GetReceiveTransportConfig() const {
|
||||||
TaskQueueBase* task_queue) override {
|
|
||||||
// We need the RTT to be >200 ms to send FEC and the network delay for the
|
// We need the RTT to be >200 ms to send FEC and the network delay for the
|
||||||
// send transport is 100 ms, so add 100 ms (but no loss) on the return link.
|
// send transport is 100 ms, so add 100 ms (but no loss) on the return link.
|
||||||
BuiltInNetworkBehaviorConfig config;
|
BuiltInNetworkBehaviorConfig config;
|
||||||
config.loss_percent = 0;
|
config.loss_percent = 0;
|
||||||
config.queue_delay_ms = 100;
|
config.queue_delay_ms = 100;
|
||||||
return std::make_unique<test::PacketTransport>(
|
return config;
|
||||||
task_queue, nullptr, this, test::PacketTransport::kReceiver,
|
|
||||||
VideoSendStreamTest::payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(),
|
|
||||||
std::make_unique<SimulatedNetwork>(config)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModifyVideoConfigs(
|
void ModifyVideoConfigs(
|
||||||
@ -1017,6 +999,7 @@ void VideoSendStreamTest::TestNackRetransmission(
|
|||||||
sequence_numbers_pending_retransmission_.size() <
|
sequence_numbers_pending_retransmission_.size() <
|
||||||
kRetransmitTarget) {
|
kRetransmitTarget) {
|
||||||
sequence_numbers_pending_retransmission_.insert(sequence_number);
|
sequence_numbers_pending_retransmission_.insert(sequence_number);
|
||||||
|
return DROP_PACKET;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Packet is a retransmission, remove it from queue and check if done.
|
// Packet is a retransmission, remove it from queue and check if done.
|
||||||
@ -1431,20 +1414,13 @@ TEST_F(VideoSendStreamTest, PaddingIsPrimarilyRetransmissions) {
|
|||||||
return SEND_PACKET;
|
return SEND_PACKET;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<test::PacketTransport> CreateSendTransport(
|
BuiltInNetworkBehaviorConfig GetSendTransportConfig() const override {
|
||||||
TaskQueueBase* task_queue,
|
|
||||||
Call* sender_call) override {
|
|
||||||
const int kNetworkDelayMs = 50;
|
const int kNetworkDelayMs = 50;
|
||||||
BuiltInNetworkBehaviorConfig config;
|
BuiltInNetworkBehaviorConfig config;
|
||||||
config.loss_percent = 10;
|
config.loss_percent = 10;
|
||||||
config.link_capacity_kbps = kCapacityKbps;
|
config.link_capacity_kbps = kCapacityKbps;
|
||||||
config.queue_delay_ms = kNetworkDelayMs;
|
config.queue_delay_ms = kNetworkDelayMs;
|
||||||
return std::make_unique<test::PacketTransport>(
|
return config;
|
||||||
task_queue, sender_call, this, test::PacketTransport::kSender,
|
|
||||||
payload_type_map_,
|
|
||||||
std::make_unique<FakeNetworkPipe>(
|
|
||||||
Clock::GetRealTimeClock(),
|
|
||||||
std::make_unique<SimulatedNetwork>(config)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModifyVideoConfigs(
|
void ModifyVideoConfigs(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user