OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 #if defined(MEMORY_SANITIZER) | 59 #if defined(MEMORY_SANITIZER) |
60 // Flaky under MemorySanitizer, see | 60 // Flaky under MemorySanitizer, see |
61 // https://bugs.chromium.org/p/webrtc/issues/detail?id=7419 | 61 // https://bugs.chromium.org/p/webrtc/issues/detail?id=7419 |
62 #define MAYBE_InitialProbing DISABLED_InitialProbing | 62 #define MAYBE_InitialProbing DISABLED_InitialProbing |
63 #else | 63 #else |
64 #define MAYBE_InitialProbing InitialProbing | 64 #define MAYBE_InitialProbing InitialProbing |
65 #endif | 65 #endif |
66 | 66 |
67 namespace webrtc { | 67 namespace webrtc { |
68 | 68 |
69 static const int kSilenceTimeoutMs = 2000; | 69 namespace { |
| 70 constexpr int kSilenceTimeoutMs = 2000; |
| 71 } |
70 | 72 |
71 class EndToEndTest : public test::CallTest { | 73 class EndToEndTest : public test::CallTest { |
72 public: | 74 public: |
73 EndToEndTest() {} | 75 EndToEndTest() {} |
74 | 76 |
75 virtual ~EndToEndTest() { | 77 virtual ~EndToEndTest() { |
76 EXPECT_EQ(nullptr, video_send_stream_); | 78 EXPECT_EQ(nullptr, video_send_stream_); |
77 EXPECT_TRUE(video_receive_streams_.empty()); | 79 EXPECT_TRUE(video_receive_streams_.empty()); |
78 } | 80 } |
79 | 81 |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 event_.Set(); | 205 event_.Set(); |
204 } | 206 } |
205 | 207 |
206 bool Wait() { return event_.Wait(kDefaultTimeoutMs); } | 208 bool Wait() { return event_.Wait(kDefaultTimeoutMs); } |
207 | 209 |
208 rtc::Event event_; | 210 rtc::Event event_; |
209 } renderer; | 211 } renderer; |
210 | 212 |
211 CreateCalls(Call::Config(event_log_.get()), Call::Config(event_log_.get())); | 213 CreateCalls(Call::Config(event_log_.get()), Call::Config(event_log_.get())); |
212 | 214 |
213 test::DirectTransport sender_transport( | 215 test::DirectTransport sender_transport(sender_call_.get(), payload_type_map_); |
214 sender_call_.get(), MediaType::VIDEO); | 216 test::DirectTransport receiver_transport(receiver_call_.get(), |
215 test::DirectTransport receiver_transport( | 217 payload_type_map_); |
216 receiver_call_.get(), MediaType::VIDEO); | |
217 sender_transport.SetReceiver(receiver_call_->Receiver()); | 218 sender_transport.SetReceiver(receiver_call_->Receiver()); |
218 receiver_transport.SetReceiver(sender_call_->Receiver()); | 219 receiver_transport.SetReceiver(sender_call_->Receiver()); |
219 | 220 |
220 CreateSendConfig(1, 0, 0, &sender_transport); | 221 CreateSendConfig(1, 0, 0, &sender_transport); |
221 CreateMatchingReceiveConfigs(&receiver_transport); | 222 CreateMatchingReceiveConfigs(&receiver_transport); |
222 | 223 |
223 video_receive_configs_[0].renderer = &renderer; | 224 video_receive_configs_[0].renderer = &renderer; |
224 | 225 |
225 CreateVideoStreams(); | 226 CreateVideoStreams(); |
226 Start(); | 227 Start(); |
(...skipping 26 matching lines...) Expand all Loading... |
253 | 254 |
254 void OnFrame(const VideoFrame& video_frame) override { event_.Set(); } | 255 void OnFrame(const VideoFrame& video_frame) override { event_.Set(); } |
255 | 256 |
256 bool Wait() { return event_.Wait(kDefaultTimeoutMs); } | 257 bool Wait() { return event_.Wait(kDefaultTimeoutMs); } |
257 | 258 |
258 rtc::Event event_; | 259 rtc::Event event_; |
259 } renderer; | 260 } renderer; |
260 | 261 |
261 CreateCalls(Call::Config(event_log_.get()), Call::Config(event_log_.get())); | 262 CreateCalls(Call::Config(event_log_.get()), Call::Config(event_log_.get())); |
262 | 263 |
263 test::DirectTransport sender_transport( | 264 test::DirectTransport sender_transport(sender_call_.get(), payload_type_map_); |
264 sender_call_.get(), MediaType::VIDEO); | 265 test::DirectTransport receiver_transport(receiver_call_.get(), |
265 test::DirectTransport receiver_transport( | 266 payload_type_map_); |
266 receiver_call_.get(), MediaType::VIDEO); | |
267 sender_transport.SetReceiver(receiver_call_->Receiver()); | 267 sender_transport.SetReceiver(receiver_call_->Receiver()); |
268 receiver_transport.SetReceiver(sender_call_->Receiver()); | 268 receiver_transport.SetReceiver(sender_call_->Receiver()); |
269 | 269 |
270 CreateSendConfig(1, 0, 0, &sender_transport); | 270 CreateSendConfig(1, 0, 0, &sender_transport); |
271 CreateMatchingReceiveConfigs(&receiver_transport); | 271 CreateMatchingReceiveConfigs(&receiver_transport); |
272 video_receive_configs_[0].renderer = &renderer; | 272 video_receive_configs_[0].renderer = &renderer; |
273 | 273 |
274 CreateVideoStreams(); | 274 CreateVideoStreams(); |
275 Start(); | 275 Start(); |
276 | 276 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 EXPECT_TRUE(Wait()) | 316 EXPECT_TRUE(Wait()) |
317 << "Timed out while waiting for enough frames to be decoded."; | 317 << "Timed out while waiting for enough frames to be decoded."; |
318 } | 318 } |
319 | 319 |
320 void ModifyVideoConfigs( | 320 void ModifyVideoConfigs( |
321 VideoSendStream::Config* send_config, | 321 VideoSendStream::Config* send_config, |
322 std::vector<VideoReceiveStream::Config>* receive_configs, | 322 std::vector<VideoReceiveStream::Config>* receive_configs, |
323 VideoEncoderConfig* encoder_config) override { | 323 VideoEncoderConfig* encoder_config) override { |
324 send_config->encoder_settings.encoder = encoder_.get(); | 324 send_config->encoder_settings.encoder = encoder_.get(); |
325 send_config->encoder_settings.payload_name = payload_name_; | 325 send_config->encoder_settings.payload_name = payload_name_; |
326 send_config->encoder_settings.payload_type = 126; | 326 send_config->encoder_settings.payload_type = |
| 327 test::CallTest::kVideoSendPayloadType; |
327 | 328 |
328 (*receive_configs)[0].renderer = this; | 329 (*receive_configs)[0].renderer = this; |
329 (*receive_configs)[0].decoders.resize(1); | 330 (*receive_configs)[0].decoders.resize(1); |
330 (*receive_configs)[0].decoders[0].payload_type = | 331 (*receive_configs)[0].decoders[0].payload_type = |
331 send_config->encoder_settings.payload_type; | 332 send_config->encoder_settings.payload_type; |
332 (*receive_configs)[0].decoders[0].payload_name = | 333 (*receive_configs)[0].decoders[0].payload_name = |
333 send_config->encoder_settings.payload_name; | 334 send_config->encoder_settings.payload_name; |
334 (*receive_configs)[0].decoders[0].decoder = decoder_.get(); | 335 (*receive_configs)[0].decoders[0].decoder = decoder_.get(); |
335 } | 336 } |
336 | 337 |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
527 local_ssrc_(0), | 528 local_ssrc_(0), |
528 remote_ssrc_(0), | 529 remote_ssrc_(0), |
529 receive_transport_(nullptr) {} | 530 receive_transport_(nullptr) {} |
530 | 531 |
531 private: | 532 private: |
532 size_t GetNumVideoStreams() const override { return 0; } | 533 size_t GetNumVideoStreams() const override { return 0; } |
533 size_t GetNumAudioStreams() const override { return 1; } | 534 size_t GetNumAudioStreams() const override { return 1; } |
534 | 535 |
535 test::PacketTransport* CreateReceiveTransport() override { | 536 test::PacketTransport* CreateReceiveTransport() override { |
536 test::PacketTransport* receive_transport = new test::PacketTransport( | 537 test::PacketTransport* receive_transport = new test::PacketTransport( |
537 nullptr, this, test::PacketTransport::kReceiver, | 538 nullptr, this, test::PacketTransport::kReceiver, payload_type_map_, |
538 MediaType::AUDIO, | |
539 FakeNetworkPipe::Config()); | 539 FakeNetworkPipe::Config()); |
540 receive_transport_ = receive_transport; | 540 receive_transport_ = receive_transport; |
541 return receive_transport; | 541 return receive_transport; |
542 } | 542 } |
543 | 543 |
544 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 544 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
545 RTPHeader header; | 545 RTPHeader header; |
546 EXPECT_TRUE(parser_->Parse(packet, length, &header)); | 546 EXPECT_TRUE(parser_->Parse(packet, length, &header)); |
547 | 547 |
548 if (!sequence_number_to_retransmit_) { | 548 if (!sequence_number_to_retransmit_) { |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
791 return SEND_PACKET; | 791 return SEND_PACKET; |
792 } | 792 } |
793 | 793 |
794 test::PacketTransport* CreateSendTransport(Call* sender_call) override { | 794 test::PacketTransport* CreateSendTransport(Call* sender_call) override { |
795 // At low RTT (< kLowRttNackMs) -> NACK only, no FEC. | 795 // At low RTT (< kLowRttNackMs) -> NACK only, no FEC. |
796 const int kNetworkDelayMs = 100; | 796 const int kNetworkDelayMs = 100; |
797 FakeNetworkPipe::Config config; | 797 FakeNetworkPipe::Config config; |
798 config.queue_delay_ms = kNetworkDelayMs; | 798 config.queue_delay_ms = kNetworkDelayMs; |
799 return new test::PacketTransport(sender_call, this, | 799 return new test::PacketTransport(sender_call, this, |
800 test::PacketTransport::kSender, | 800 test::PacketTransport::kSender, |
801 MediaType::VIDEO, config); | 801 test::CallTest::payload_type_map_, config); |
802 } | 802 } |
803 | 803 |
804 void OnFrame(const VideoFrame& video_frame) override { | 804 void OnFrame(const VideoFrame& video_frame) override { |
805 rtc::CritScope lock(&crit_); | 805 rtc::CritScope lock(&crit_); |
806 // Rendering frame with timestamp of packet that was dropped -> FEC | 806 // Rendering frame with timestamp of packet that was dropped -> FEC |
807 // protection worked. | 807 // protection worked. |
808 auto it = dropped_timestamps_.find(video_frame.timestamp()); | 808 auto it = dropped_timestamps_.find(video_frame.timestamp()); |
809 if (it != dropped_timestamps_.end()) { | 809 if (it != dropped_timestamps_.end()) { |
810 if (!expect_flexfec_rtcp_ || received_flexfec_rtcp_) { | 810 if (!expect_flexfec_rtcp_ || received_flexfec_rtcp_) { |
811 observation_complete_.Set(); | 811 observation_complete_.Set(); |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
971 } | 971 } |
972 | 972 |
973 test::PacketTransport* CreateSendTransport(Call* sender_call) override { | 973 test::PacketTransport* CreateSendTransport(Call* sender_call) override { |
974 // At low RTT (< kLowRttNackMs) -> NACK only, no FEC. | 974 // At low RTT (< kLowRttNackMs) -> NACK only, no FEC. |
975 // Configure some network delay. | 975 // Configure some network delay. |
976 const int kNetworkDelayMs = 50; | 976 const int kNetworkDelayMs = 50; |
977 FakeNetworkPipe::Config config; | 977 FakeNetworkPipe::Config config; |
978 config.queue_delay_ms = kNetworkDelayMs; | 978 config.queue_delay_ms = kNetworkDelayMs; |
979 return new test::PacketTransport(sender_call, this, | 979 return new test::PacketTransport(sender_call, this, |
980 test::PacketTransport::kSender, | 980 test::PacketTransport::kSender, |
981 MediaType::VIDEO, config); | 981 payload_type_map_, config); |
982 } | 982 } |
983 | 983 |
984 // TODO(holmer): Investigate why we don't send FEC packets when the bitrate | 984 // TODO(holmer): Investigate why we don't send FEC packets when the bitrate |
985 // is 10 kbps. | 985 // is 10 kbps. |
986 Call::Config GetSenderCallConfig() override { | 986 Call::Config GetSenderCallConfig() override { |
987 Call::Config config(event_log_.get()); | 987 Call::Config config(event_log_.get()); |
988 const int kMinBitrateBps = 30000; | 988 const int kMinBitrateBps = 30000; |
989 config.bitrate_config.min_bitrate_bps = kMinBitrateBps; | 989 config.bitrate_config.min_bitrate_bps = kMinBitrateBps; |
990 return config; | 990 return config; |
991 } | 991 } |
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1313 return delivery_status; | 1313 return delivery_status; |
1314 } | 1314 } |
1315 } | 1315 } |
1316 | 1316 |
1317 PacketReceiver* receiver_; | 1317 PacketReceiver* receiver_; |
1318 rtc::Event delivered_packet_; | 1318 rtc::Event delivered_packet_; |
1319 }; | 1319 }; |
1320 | 1320 |
1321 CreateCalls(Call::Config(event_log_.get()), Call::Config(event_log_.get())); | 1321 CreateCalls(Call::Config(event_log_.get()), Call::Config(event_log_.get())); |
1322 | 1322 |
1323 test::DirectTransport send_transport( | 1323 test::DirectTransport send_transport(sender_call_.get(), payload_type_map_); |
1324 sender_call_.get(), MediaType::VIDEO); | 1324 test::DirectTransport receive_transport(receiver_call_.get(), |
1325 test::DirectTransport receive_transport( | 1325 payload_type_map_); |
1326 receiver_call_.get(), MediaType::VIDEO); | |
1327 PacketInputObserver input_observer(receiver_call_->Receiver()); | 1326 PacketInputObserver input_observer(receiver_call_->Receiver()); |
1328 send_transport.SetReceiver(&input_observer); | 1327 send_transport.SetReceiver(&input_observer); |
1329 receive_transport.SetReceiver(sender_call_->Receiver()); | 1328 receive_transport.SetReceiver(sender_call_->Receiver()); |
1330 | 1329 |
1331 CreateSendConfig(1, 0, 0, &send_transport); | 1330 CreateSendConfig(1, 0, 0, &send_transport); |
1332 CreateMatchingReceiveConfigs(&receive_transport); | 1331 CreateMatchingReceiveConfigs(&receive_transport); |
1333 | 1332 |
1334 CreateVideoStreams(); | 1333 CreateVideoStreams(); |
1335 CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth, | 1334 CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth, |
1336 kDefaultHeight); | 1335 kDefaultHeight); |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1436 } | 1435 } |
1437 | 1436 |
1438 TEST_F(EndToEndTest, UsesRtcpReducedSizeMode) { | 1437 TEST_F(EndToEndTest, UsesRtcpReducedSizeMode) { |
1439 RespectsRtcpMode(RtcpMode::kReducedSize); | 1438 RespectsRtcpMode(RtcpMode::kReducedSize); |
1440 } | 1439 } |
1441 | 1440 |
1442 // Test sets up a Call multiple senders with different resolutions and SSRCs. | 1441 // Test sets up a Call multiple senders with different resolutions and SSRCs. |
1443 // Another is set up to receive all three of these with different renderers. | 1442 // Another is set up to receive all three of these with different renderers. |
1444 class MultiStreamTest { | 1443 class MultiStreamTest { |
1445 public: | 1444 public: |
1446 static const size_t kNumStreams = 3; | 1445 static constexpr size_t kNumStreams = 3; |
| 1446 const uint8_t kVideoPayloadType = 124; |
| 1447 const std::map<uint8_t, MediaType> payload_type_map_ = { |
| 1448 {kVideoPayloadType, MediaType::VIDEO}}; |
| 1449 |
1447 struct CodecSettings { | 1450 struct CodecSettings { |
1448 uint32_t ssrc; | 1451 uint32_t ssrc; |
1449 int width; | 1452 int width; |
1450 int height; | 1453 int height; |
1451 } codec_settings[kNumStreams]; | 1454 } codec_settings[kNumStreams]; |
1452 | 1455 |
1453 MultiStreamTest() { | 1456 MultiStreamTest() { |
1454 // TODO(sprang): Cleanup when msvc supports explicit initializers for array. | 1457 // TODO(sprang): Cleanup when msvc supports explicit initializers for array. |
1455 codec_settings[0] = {1, 640, 480}; | 1458 codec_settings[0] = {1, 640, 480}; |
1456 codec_settings[1] = {2, 320, 240}; | 1459 codec_settings[1] = {2, 320, 240}; |
(...skipping 25 matching lines...) Expand all Loading... |
1482 std::vector<std::unique_ptr<VideoDecoder>> allocated_decoders; | 1485 std::vector<std::unique_ptr<VideoDecoder>> allocated_decoders; |
1483 for (size_t i = 0; i < kNumStreams; ++i) { | 1486 for (size_t i = 0; i < kNumStreams; ++i) { |
1484 uint32_t ssrc = codec_settings[i].ssrc; | 1487 uint32_t ssrc = codec_settings[i].ssrc; |
1485 int width = codec_settings[i].width; | 1488 int width = codec_settings[i].width; |
1486 int height = codec_settings[i].height; | 1489 int height = codec_settings[i].height; |
1487 | 1490 |
1488 VideoSendStream::Config send_config(sender_transport.get()); | 1491 VideoSendStream::Config send_config(sender_transport.get()); |
1489 send_config.rtp.ssrcs.push_back(ssrc); | 1492 send_config.rtp.ssrcs.push_back(ssrc); |
1490 send_config.encoder_settings.encoder = encoders[i].get(); | 1493 send_config.encoder_settings.encoder = encoders[i].get(); |
1491 send_config.encoder_settings.payload_name = "VP8"; | 1494 send_config.encoder_settings.payload_name = "VP8"; |
1492 send_config.encoder_settings.payload_type = 124; | 1495 send_config.encoder_settings.payload_type = kVideoPayloadType; |
1493 VideoEncoderConfig encoder_config; | 1496 VideoEncoderConfig encoder_config; |
1494 test::FillEncoderConfiguration(1, &encoder_config); | 1497 test::FillEncoderConfiguration(1, &encoder_config); |
1495 encoder_config.max_bitrate_bps = 100000; | 1498 encoder_config.max_bitrate_bps = 100000; |
1496 | 1499 |
1497 UpdateSendConfig(i, &send_config, &encoder_config, &frame_generators[i]); | 1500 UpdateSendConfig(i, &send_config, &encoder_config, &frame_generators[i]); |
1498 | 1501 |
1499 send_streams[i] = sender_call->CreateVideoSendStream( | 1502 send_streams[i] = sender_call->CreateVideoSendStream( |
1500 send_config.Copy(), encoder_config.Copy()); | 1503 send_config.Copy(), encoder_config.Copy()); |
1501 send_streams[i]->Start(); | 1504 send_streams[i]->Start(); |
1502 | 1505 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1543 // start flowing should this be dereferenced. | 1546 // start flowing should this be dereferenced. |
1544 virtual void UpdateSendConfig( | 1547 virtual void UpdateSendConfig( |
1545 size_t stream_index, | 1548 size_t stream_index, |
1546 VideoSendStream::Config* send_config, | 1549 VideoSendStream::Config* send_config, |
1547 VideoEncoderConfig* encoder_config, | 1550 VideoEncoderConfig* encoder_config, |
1548 test::FrameGeneratorCapturer** frame_generator) {} | 1551 test::FrameGeneratorCapturer** frame_generator) {} |
1549 virtual void UpdateReceiveConfig(size_t stream_index, | 1552 virtual void UpdateReceiveConfig(size_t stream_index, |
1550 VideoReceiveStream::Config* receive_config) { | 1553 VideoReceiveStream::Config* receive_config) { |
1551 } | 1554 } |
1552 virtual test::DirectTransport* CreateSendTransport(Call* sender_call) { | 1555 virtual test::DirectTransport* CreateSendTransport(Call* sender_call) { |
1553 return new test::DirectTransport(sender_call, MediaType::VIDEO); | 1556 return new test::DirectTransport(sender_call, payload_type_map_); |
1554 } | 1557 } |
1555 virtual test::DirectTransport* CreateReceiveTransport(Call* receiver_call) { | 1558 virtual test::DirectTransport* CreateReceiveTransport(Call* receiver_call) { |
1556 return new test::DirectTransport(receiver_call, MediaType::VIDEO); | 1559 return new test::DirectTransport(receiver_call, payload_type_map_); |
1557 } | 1560 } |
1558 }; | 1561 }; |
1559 | 1562 |
1560 // Each renderer verifies that it receives the expected resolution, and as soon | 1563 // Each renderer verifies that it receives the expected resolution, and as soon |
1561 // as every renderer has received a frame, the test finishes. | 1564 // as every renderer has received a frame, the test finishes. |
1562 TEST_F(EndToEndTest, SendsAndReceivesMultipleStreams) { | 1565 TEST_F(EndToEndTest, SendsAndReceivesMultipleStreams) { |
1563 class VideoOutputObserver : public rtc::VideoSinkInterface<VideoFrame> { | 1566 class VideoOutputObserver : public rtc::VideoSinkInterface<VideoFrame> { |
1564 public: | 1567 public: |
1565 VideoOutputObserver(const MultiStreamTest::CodecSettings& settings, | 1568 VideoOutputObserver(const MultiStreamTest::CodecSettings& settings, |
1566 uint32_t ssrc, | 1569 uint32_t ssrc, |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1622 } tester; | 1625 } tester; |
1623 | 1626 |
1624 tester.RunTest(); | 1627 tester.RunTest(); |
1625 } | 1628 } |
1626 | 1629 |
1627 TEST_F(EndToEndTest, AssignsTransportSequenceNumbers) { | 1630 TEST_F(EndToEndTest, AssignsTransportSequenceNumbers) { |
1628 static const int kExtensionId = 5; | 1631 static const int kExtensionId = 5; |
1629 | 1632 |
1630 class RtpExtensionHeaderObserver : public test::DirectTransport { | 1633 class RtpExtensionHeaderObserver : public test::DirectTransport { |
1631 public: | 1634 public: |
1632 RtpExtensionHeaderObserver(Call* sender_call, | 1635 RtpExtensionHeaderObserver( |
1633 const uint32_t& first_media_ssrc, | 1636 Call* sender_call, |
1634 const std::map<uint32_t, uint32_t>& ssrc_map) | 1637 const uint32_t& first_media_ssrc, |
1635 : DirectTransport(sender_call, MediaType::VIDEO), | 1638 const std::map<uint32_t, uint32_t>& ssrc_map, |
| 1639 const std::map<uint8_t, MediaType>& payload_type_map) |
| 1640 : DirectTransport(sender_call, payload_type_map), |
1636 done_(false, false), | 1641 done_(false, false), |
1637 parser_(RtpHeaderParser::Create()), | 1642 parser_(RtpHeaderParser::Create()), |
1638 first_media_ssrc_(first_media_ssrc), | 1643 first_media_ssrc_(first_media_ssrc), |
1639 rtx_to_media_ssrcs_(ssrc_map), | 1644 rtx_to_media_ssrcs_(ssrc_map), |
1640 padding_observed_(false), | 1645 padding_observed_(false), |
1641 rtx_padding_observed_(false), | 1646 rtx_padding_observed_(false), |
1642 retransmit_observed_(false), | 1647 retransmit_observed_(false), |
1643 started_(false) { | 1648 started_(false) { |
1644 parser_->RegisterRtpHeaderExtension(kRtpExtensionTransportSequenceNumber, | 1649 parser_->RegisterRtpHeaderExtension(kRtpExtensionTransportSequenceNumber, |
1645 kExtensionId); | 1650 kExtensionId); |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1789 size_t stream_index, | 1794 size_t stream_index, |
1790 VideoReceiveStream::Config* receive_config) override { | 1795 VideoReceiveStream::Config* receive_config) override { |
1791 receive_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 1796 receive_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
1792 receive_config->rtp.extensions.clear(); | 1797 receive_config->rtp.extensions.clear(); |
1793 receive_config->rtp.extensions.push_back(RtpExtension( | 1798 receive_config->rtp.extensions.push_back(RtpExtension( |
1794 RtpExtension::kTransportSequenceNumberUri, kExtensionId)); | 1799 RtpExtension::kTransportSequenceNumberUri, kExtensionId)); |
1795 receive_config->renderer = &fake_renderer_; | 1800 receive_config->renderer = &fake_renderer_; |
1796 } | 1801 } |
1797 | 1802 |
1798 test::DirectTransport* CreateSendTransport(Call* sender_call) override { | 1803 test::DirectTransport* CreateSendTransport(Call* sender_call) override { |
1799 observer_ = new RtpExtensionHeaderObserver(sender_call, first_media_ssrc_, | 1804 std::map<uint8_t, MediaType> payload_type_map = |
1800 rtx_to_media_ssrcs_); | 1805 MultiStreamTest::payload_type_map_; |
| 1806 RTC_DCHECK(payload_type_map.find(kSendRtxPayloadType) == |
| 1807 payload_type_map.end()); |
| 1808 payload_type_map[kSendRtxPayloadType] = MediaType::VIDEO; |
| 1809 observer_ = |
| 1810 new RtpExtensionHeaderObserver(sender_call, first_media_ssrc_, |
| 1811 rtx_to_media_ssrcs_, payload_type_map); |
1801 return observer_; | 1812 return observer_; |
1802 } | 1813 } |
1803 | 1814 |
1804 private: | 1815 private: |
1805 test::FakeVideoRenderer fake_renderer_; | 1816 test::FakeVideoRenderer fake_renderer_; |
1806 uint32_t first_media_ssrc_; | 1817 uint32_t first_media_ssrc_; |
1807 std::map<uint32_t, uint32_t> rtx_to_media_ssrcs_; | 1818 std::map<uint32_t, uint32_t> rtx_to_media_ssrcs_; |
1808 RtpExtensionHeaderObserver* observer_; | 1819 RtpExtensionHeaderObserver* observer_; |
1809 } tester; | 1820 } tester; |
1810 | 1821 |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1941 size_t length_; | 1952 size_t length_; |
1942 FrameType frame_type_; | 1953 FrameType frame_type_; |
1943 rtc::Event called_; | 1954 rtc::Event called_; |
1944 }; | 1955 }; |
1945 | 1956 |
1946 EncodedFrameTestObserver post_encode_observer; | 1957 EncodedFrameTestObserver post_encode_observer; |
1947 EncodedFrameTestObserver pre_decode_observer; | 1958 EncodedFrameTestObserver pre_decode_observer; |
1948 | 1959 |
1949 CreateCalls(Call::Config(event_log_.get()), Call::Config(event_log_.get())); | 1960 CreateCalls(Call::Config(event_log_.get()), Call::Config(event_log_.get())); |
1950 | 1961 |
1951 test::DirectTransport sender_transport( | 1962 test::DirectTransport sender_transport(sender_call_.get(), payload_type_map_); |
1952 sender_call_.get(), MediaType::VIDEO); | 1963 test::DirectTransport receiver_transport(receiver_call_.get(), |
1953 test::DirectTransport receiver_transport( | 1964 payload_type_map_); |
1954 receiver_call_.get(), MediaType::VIDEO); | |
1955 sender_transport.SetReceiver(receiver_call_->Receiver()); | 1965 sender_transport.SetReceiver(receiver_call_->Receiver()); |
1956 receiver_transport.SetReceiver(sender_call_->Receiver()); | 1966 receiver_transport.SetReceiver(sender_call_->Receiver()); |
1957 | 1967 |
1958 CreateSendConfig(1, 0, 0, &sender_transport); | 1968 CreateSendConfig(1, 0, 0, &sender_transport); |
1959 CreateMatchingReceiveConfigs(&receiver_transport); | 1969 CreateMatchingReceiveConfigs(&receiver_transport); |
1960 video_send_config_.post_encode_callback = &post_encode_observer; | 1970 video_send_config_.post_encode_callback = &post_encode_observer; |
1961 video_receive_configs_[0].pre_decode_callback = &pre_decode_observer; | 1971 video_receive_configs_[0].pre_decode_callback = &pre_decode_observer; |
1962 | 1972 |
1963 CreateVideoStreams(); | 1973 CreateVideoStreams(); |
1964 Start(); | 1974 Start(); |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2107 poller_thread_(&BitrateStatsPollingThread, | 2117 poller_thread_(&BitrateStatsPollingThread, |
2108 this, | 2118 this, |
2109 "BitrateStatsPollingThread"), | 2119 "BitrateStatsPollingThread"), |
2110 state_(kWaitForFirstRampUp), | 2120 state_(kWaitForFirstRampUp), |
2111 retransmission_rate_limiter_(clock_, 1000) {} | 2121 retransmission_rate_limiter_(clock_, 1000) {} |
2112 | 2122 |
2113 ~BweObserver() {} | 2123 ~BweObserver() {} |
2114 | 2124 |
2115 test::PacketTransport* CreateReceiveTransport() override { | 2125 test::PacketTransport* CreateReceiveTransport() override { |
2116 receive_transport_ = new test::PacketTransport( | 2126 receive_transport_ = new test::PacketTransport( |
2117 nullptr, this, test::PacketTransport::kReceiver, | 2127 nullptr, this, test::PacketTransport::kReceiver, payload_type_map_, |
2118 MediaType::VIDEO, | |
2119 FakeNetworkPipe::Config()); | 2128 FakeNetworkPipe::Config()); |
2120 return receive_transport_; | 2129 return receive_transport_; |
2121 } | 2130 } |
2122 | 2131 |
2123 Call::Config GetSenderCallConfig() override { | 2132 Call::Config GetSenderCallConfig() override { |
2124 Call::Config config(event_log_.get()); | 2133 Call::Config config(event_log_.get()); |
2125 // Set a high start bitrate to reduce the test completion time. | 2134 // Set a high start bitrate to reduce the test completion time. |
2126 config.bitrate_config.start_bitrate_bps = remb_bitrate_bps_; | 2135 config.bitrate_config.start_bitrate_bps = remb_bitrate_bps_; |
2127 return config; | 2136 return config; |
2128 } | 2137 } |
(...skipping 971 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3100 for (const auto& stat : stats_map) { | 3109 for (const auto& stat : stats_map) { |
3101 if (!stat.second) | 3110 if (!stat.second) |
3102 return false; | 3111 return false; |
3103 } | 3112 } |
3104 return true; | 3113 return true; |
3105 } | 3114 } |
3106 | 3115 |
3107 test::PacketTransport* CreateSendTransport(Call* sender_call) override { | 3116 test::PacketTransport* CreateSendTransport(Call* sender_call) override { |
3108 FakeNetworkPipe::Config network_config; | 3117 FakeNetworkPipe::Config network_config; |
3109 network_config.loss_percent = 5; | 3118 network_config.loss_percent = 5; |
3110 return new test::PacketTransport( | 3119 return new test::PacketTransport(sender_call, this, |
3111 sender_call, this, test::PacketTransport::kSender, MediaType::VIDEO, | 3120 test::PacketTransport::kSender, |
3112 network_config); | 3121 payload_type_map_, network_config); |
3113 } | 3122 } |
3114 | 3123 |
3115 Call::Config GetSenderCallConfig() override { | 3124 Call::Config GetSenderCallConfig() override { |
3116 Call::Config config = EndToEndTest::GetSenderCallConfig(); | 3125 Call::Config config = EndToEndTest::GetSenderCallConfig(); |
3117 config.bitrate_config.start_bitrate_bps = kStartBitrateBps; | 3126 config.bitrate_config.start_bitrate_bps = kStartBitrateBps; |
3118 return config; | 3127 return config; |
3119 } | 3128 } |
3120 | 3129 |
3121 // This test use other VideoStream settings than the the default settings | 3130 // This test use other VideoStream settings than the the default settings |
3122 // implemented in DefaultVideoStreamFactory. Therefore this test implement | 3131 // implemented in DefaultVideoStreamFactory. Therefore this test implement |
(...skipping 531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3654 std::map<uint32_t, bool> ssrc_is_rtx_; | 3663 std::map<uint32_t, bool> ssrc_is_rtx_; |
3655 | 3664 |
3656 rtc::CriticalSection crit_; | 3665 rtc::CriticalSection crit_; |
3657 size_t ssrcs_to_observe_ GUARDED_BY(crit_); | 3666 size_t ssrcs_to_observe_ GUARDED_BY(crit_); |
3658 std::map<uint32_t, bool> ssrc_observed_ GUARDED_BY(crit_); | 3667 std::map<uint32_t, bool> ssrc_observed_ GUARDED_BY(crit_); |
3659 } observer(use_rtx); | 3668 } observer(use_rtx); |
3660 | 3669 |
3661 Call::Config config(event_log_.get()); | 3670 Call::Config config(event_log_.get()); |
3662 CreateCalls(config, config); | 3671 CreateCalls(config, config); |
3663 | 3672 |
3664 test::PacketTransport send_transport(sender_call_.get(), &observer, | 3673 test::PacketTransport send_transport( |
3665 test::PacketTransport::kSender, | 3674 sender_call_.get(), &observer, test::PacketTransport::kSender, |
3666 MediaType::VIDEO, | 3675 payload_type_map_, FakeNetworkPipe::Config()); |
3667 FakeNetworkPipe::Config()); | 3676 test::PacketTransport receive_transport( |
3668 test::PacketTransport receive_transport(nullptr, &observer, | 3677 nullptr, &observer, test::PacketTransport::kReceiver, payload_type_map_, |
3669 test::PacketTransport::kReceiver, | 3678 FakeNetworkPipe::Config()); |
3670 MediaType::VIDEO, | |
3671 FakeNetworkPipe::Config()); | |
3672 send_transport.SetReceiver(receiver_call_->Receiver()); | 3679 send_transport.SetReceiver(receiver_call_->Receiver()); |
3673 receive_transport.SetReceiver(sender_call_->Receiver()); | 3680 receive_transport.SetReceiver(sender_call_->Receiver()); |
3674 | 3681 |
3675 CreateSendConfig(kNumSsrcs, 0, 0, &send_transport); | 3682 CreateSendConfig(kNumSsrcs, 0, 0, &send_transport); |
3676 | 3683 |
3677 if (use_rtx) { | 3684 if (use_rtx) { |
3678 for (size_t i = 0; i < kNumSsrcs; ++i) { | 3685 for (size_t i = 0; i < kNumSsrcs; ++i) { |
3679 video_send_config_.rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[i]); | 3686 video_send_config_.rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[i]); |
3680 } | 3687 } |
3681 video_send_config_.rtp.rtx.payload_type = kSendRtxPayloadType; | 3688 video_send_config_.rtp.rtx.payload_type = kSendRtxPayloadType; |
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3953 RunBaseTest(&test); | 3960 RunBaseTest(&test); |
3954 } | 3961 } |
3955 | 3962 |
3956 TEST_F(EndToEndTest, CallReportsRttForSender) { | 3963 TEST_F(EndToEndTest, CallReportsRttForSender) { |
3957 static const int kSendDelayMs = 30; | 3964 static const int kSendDelayMs = 30; |
3958 static const int kReceiveDelayMs = 70; | 3965 static const int kReceiveDelayMs = 70; |
3959 CreateCalls(Call::Config(event_log_.get()), Call::Config(event_log_.get())); | 3966 CreateCalls(Call::Config(event_log_.get()), Call::Config(event_log_.get())); |
3960 | 3967 |
3961 FakeNetworkPipe::Config config; | 3968 FakeNetworkPipe::Config config; |
3962 config.queue_delay_ms = kSendDelayMs; | 3969 config.queue_delay_ms = kSendDelayMs; |
3963 test::DirectTransport sender_transport( | 3970 test::DirectTransport sender_transport(config, sender_call_.get(), |
3964 config, sender_call_.get(), MediaType::VIDEO); | 3971 payload_type_map_); |
3965 config.queue_delay_ms = kReceiveDelayMs; | 3972 config.queue_delay_ms = kReceiveDelayMs; |
3966 test::DirectTransport receiver_transport( | 3973 test::DirectTransport receiver_transport(config, receiver_call_.get(), |
3967 config, receiver_call_.get(), MediaType::VIDEO); | 3974 payload_type_map_); |
3968 sender_transport.SetReceiver(receiver_call_->Receiver()); | 3975 sender_transport.SetReceiver(receiver_call_->Receiver()); |
3969 receiver_transport.SetReceiver(sender_call_->Receiver()); | 3976 receiver_transport.SetReceiver(sender_call_->Receiver()); |
3970 | 3977 |
3971 CreateSendConfig(1, 0, 0, &sender_transport); | 3978 CreateSendConfig(1, 0, 0, &sender_transport); |
3972 CreateMatchingReceiveConfigs(&receiver_transport); | 3979 CreateMatchingReceiveConfigs(&receiver_transport); |
3973 | 3980 |
3974 CreateVideoStreams(); | 3981 CreateVideoStreams(); |
3975 CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth, | 3982 CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth, |
3976 kDefaultHeight); | 3983 kDefaultHeight); |
3977 Start(); | 3984 Start(); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4019 DestroyStreams(); | 4026 DestroyStreams(); |
4020 } | 4027 } |
4021 | 4028 |
4022 void EndToEndTest::VerifyNewVideoReceiveStreamsRespectNetworkState( | 4029 void EndToEndTest::VerifyNewVideoReceiveStreamsRespectNetworkState( |
4023 MediaType network_to_bring_up, | 4030 MediaType network_to_bring_up, |
4024 Transport* transport) { | 4031 Transport* transport) { |
4025 Call::Config config(event_log_.get()); | 4032 Call::Config config(event_log_.get()); |
4026 CreateCalls(config, config); | 4033 CreateCalls(config, config); |
4027 receiver_call_->SignalChannelNetworkState(network_to_bring_up, kNetworkUp); | 4034 receiver_call_->SignalChannelNetworkState(network_to_bring_up, kNetworkUp); |
4028 | 4035 |
4029 test::DirectTransport sender_transport(sender_call_.get(), MediaType::VIDEO); | 4036 test::DirectTransport sender_transport(sender_call_.get(), payload_type_map_); |
4030 sender_transport.SetReceiver(receiver_call_->Receiver()); | 4037 sender_transport.SetReceiver(receiver_call_->Receiver()); |
4031 CreateSendConfig(1, 0, 0, &sender_transport); | 4038 CreateSendConfig(1, 0, 0, &sender_transport); |
4032 CreateMatchingReceiveConfigs(transport); | 4039 CreateMatchingReceiveConfigs(transport); |
4033 CreateVideoStreams(); | 4040 CreateVideoStreams(); |
4034 CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth, | 4041 CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth, |
4035 kDefaultHeight); | 4042 kDefaultHeight); |
4036 | 4043 |
4037 Start(); | 4044 Start(); |
4038 SleepMs(kSilenceTimeoutMs); | 4045 SleepMs(kSilenceTimeoutMs); |
4039 Stop(); | 4046 Stop(); |
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4343 std::unique_ptr<VideoEncoder> encoder_; | 4350 std::unique_ptr<VideoEncoder> encoder_; |
4344 std::unique_ptr<VideoDecoder> decoder_; | 4351 std::unique_ptr<VideoDecoder> decoder_; |
4345 rtc::CriticalSection crit_; | 4352 rtc::CriticalSection crit_; |
4346 int recorded_frames_ GUARDED_BY(crit_); | 4353 int recorded_frames_ GUARDED_BY(crit_); |
4347 } test(this); | 4354 } test(this); |
4348 | 4355 |
4349 RunBaseTest(&test); | 4356 RunBaseTest(&test); |
4350 } | 4357 } |
4351 | 4358 |
4352 } // namespace webrtc | 4359 } // namespace webrtc |
OLD | NEW |