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 1813 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1824 uint32_t first_media_ssrc_; | 1824 uint32_t first_media_ssrc_; |
1825 std::map<uint32_t, uint32_t> rtx_to_media_ssrcs_; | 1825 std::map<uint32_t, uint32_t> rtx_to_media_ssrcs_; |
1826 RtpExtensionHeaderObserver* observer_; | 1826 RtpExtensionHeaderObserver* observer_; |
1827 } tester; | 1827 } tester; |
1828 | 1828 |
1829 tester.RunTest(); | 1829 tester.RunTest(); |
1830 } | 1830 } |
1831 | 1831 |
1832 class TransportFeedbackTester : public test::EndToEndTest { | 1832 class TransportFeedbackTester : public test::EndToEndTest { |
1833 public: | 1833 public: |
1834 explicit TransportFeedbackTester(bool feedback_enabled, | 1834 TransportFeedbackTester(bool feedback_enabled, |
1835 size_t num_video_streams, | 1835 size_t num_video_streams, |
1836 size_t num_audio_streams) | 1836 size_t num_audio_streams) |
1837 : EndToEndTest(::webrtc::EndToEndTest::kDefaultTimeoutMs), | 1837 : EndToEndTest(::webrtc::EndToEndTest::kDefaultTimeoutMs), |
1838 feedback_enabled_(feedback_enabled), | 1838 feedback_enabled_(feedback_enabled), |
1839 num_video_streams_(num_video_streams), | 1839 num_video_streams_(num_video_streams), |
1840 num_audio_streams_(num_audio_streams), | 1840 num_audio_streams_(num_audio_streams), |
1841 receiver_call_(nullptr) { | 1841 receiver_call_(nullptr) { |
1842 // Only one stream of each supported for now. | 1842 // Only one stream of each supported for now. |
1843 EXPECT_LE(num_video_streams, 1u); | 1843 EXPECT_LE(num_video_streams, 1u); |
1844 EXPECT_LE(num_audio_streams, 1u); | 1844 EXPECT_LE(num_audio_streams, 1u); |
1845 } | 1845 } |
1846 | 1846 |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1921 TEST_F(EndToEndTest, AudioTransportFeedbackNotConfigured) { | 1921 TEST_F(EndToEndTest, AudioTransportFeedbackNotConfigured) { |
1922 TransportFeedbackTester test(false, 0, 1); | 1922 TransportFeedbackTester test(false, 0, 1); |
1923 RunBaseTest(&test); | 1923 RunBaseTest(&test); |
1924 } | 1924 } |
1925 | 1925 |
1926 TEST_F(EndToEndTest, AudioVideoReceivesTransportFeedback) { | 1926 TEST_F(EndToEndTest, AudioVideoReceivesTransportFeedback) { |
1927 TransportFeedbackTester test(true, 1, 1); | 1927 TransportFeedbackTester test(true, 1, 1); |
1928 RunBaseTest(&test); | 1928 RunBaseTest(&test); |
1929 } | 1929 } |
1930 | 1930 |
| 1931 TEST_F(EndToEndTest, StopsSendingMediaWithoutFeedback) { |
| 1932 test::ScopedFieldTrials override_field_trials( |
| 1933 "WebRTC-CwndExperiment/Enabled/"); |
| 1934 |
| 1935 class TransportFeedbackTester : public test::EndToEndTest { |
| 1936 public: |
| 1937 TransportFeedbackTester(size_t num_video_streams, size_t num_audio_streams) |
| 1938 : EndToEndTest(::webrtc::EndToEndTest::kDefaultTimeoutMs), |
| 1939 num_video_streams_(num_video_streams), |
| 1940 num_audio_streams_(num_audio_streams), |
| 1941 media_sent_(0), |
| 1942 padding_sent_(0) { |
| 1943 // Only one stream of each supported for now. |
| 1944 EXPECT_LE(num_video_streams, 1u); |
| 1945 EXPECT_LE(num_audio_streams, 1u); |
| 1946 } |
| 1947 |
| 1948 protected: |
| 1949 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
| 1950 RTPHeader header; |
| 1951 EXPECT_TRUE(parser_->Parse(packet, length, &header)); |
| 1952 const bool only_padding = |
| 1953 header.headerLength + header.paddingLength == length; |
| 1954 if (only_padding) { |
| 1955 ++padding_sent_; |
| 1956 } else { |
| 1957 ++media_sent_; |
| 1958 EXPECT_LT(media_sent_, 40) << "Media sent without feedback."; |
| 1959 } |
| 1960 |
| 1961 return SEND_PACKET; |
| 1962 } |
| 1963 |
| 1964 Action OnReceiveRtcp(const uint8_t* data, size_t length) override { |
| 1965 if (media_sent_ > 20 && HasTransportFeedback(data, length)) { |
| 1966 return DROP_PACKET; |
| 1967 } |
| 1968 return SEND_PACKET; |
| 1969 } |
| 1970 |
| 1971 bool HasTransportFeedback(const uint8_t* data, size_t length) const { |
| 1972 test::RtcpPacketParser parser; |
| 1973 EXPECT_TRUE(parser.Parse(data, length)); |
| 1974 return parser.transport_feedback()->num_packets() > 0; |
| 1975 } |
| 1976 |
| 1977 Call::Config GetSenderCallConfig() override { |
| 1978 Call::Config config = EndToEndTest::GetSenderCallConfig(); |
| 1979 config.bitrate_config.max_bitrate_bps = 300000; |
| 1980 return config; |
| 1981 } |
| 1982 |
| 1983 void PerformTest() override { |
| 1984 const int64_t kDisabledFeedbackTimeoutMs = 10000; |
| 1985 observation_complete_.Wait(kDisabledFeedbackTimeoutMs); |
| 1986 EXPECT_GT(padding_sent_, 0); |
| 1987 } |
| 1988 |
| 1989 size_t GetNumVideoStreams() const override { return num_video_streams_; } |
| 1990 size_t GetNumAudioStreams() const override { return num_audio_streams_; } |
| 1991 |
| 1992 private: |
| 1993 const size_t num_video_streams_; |
| 1994 const size_t num_audio_streams_; |
| 1995 int media_sent_; |
| 1996 int padding_sent_; |
| 1997 } test(1, 0); |
| 1998 RunBaseTest(&test); |
| 1999 } |
| 2000 |
1931 TEST_F(EndToEndTest, ObserversEncodedFrames) { | 2001 TEST_F(EndToEndTest, ObserversEncodedFrames) { |
1932 class EncodedFrameTestObserver : public EncodedFrameObserver { | 2002 class EncodedFrameTestObserver : public EncodedFrameObserver { |
1933 public: | 2003 public: |
1934 EncodedFrameTestObserver() | 2004 EncodedFrameTestObserver() |
1935 : length_(0), frame_type_(kEmptyFrame), called_(false, false) {} | 2005 : length_(0), frame_type_(kEmptyFrame), called_(false, false) {} |
1936 virtual ~EncodedFrameTestObserver() {} | 2006 virtual ~EncodedFrameTestObserver() {} |
1937 | 2007 |
1938 virtual void EncodedFrameCallback(const EncodedFrame& encoded_frame) { | 2008 virtual void EncodedFrameCallback(const EncodedFrame& encoded_frame) { |
1939 frame_type_ = encoded_frame.frame_type_; | 2009 frame_type_ = encoded_frame.frame_type_; |
1940 length_ = encoded_frame.length_; | 2010 length_ = encoded_frame.length_; |
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2401 }; | 2471 }; |
2402 | 2472 |
2403 bool success; | 2473 bool success; |
2404 const int kMaxAttempts = 3; | 2474 const int kMaxAttempts = 3; |
2405 for (int i = 0; i < kMaxAttempts; ++i) { | 2475 for (int i = 0; i < kMaxAttempts; ++i) { |
2406 TriggerMidCallProbingTest test(&success); | 2476 TriggerMidCallProbingTest test(&success); |
2407 RunBaseTest(&test); | 2477 RunBaseTest(&test); |
2408 if (success) | 2478 if (success) |
2409 return; | 2479 return; |
2410 } | 2480 } |
2411 RTC_DCHECK(success) << "Failed to perform mid call probing (" << kMaxAttempts | 2481 EXPECT_TRUE(success) << "Failed to perform mid call probing (" << kMaxAttempts |
2412 << " attempts)."; | 2482 << " attempts)."; |
2413 } | 2483 } |
2414 | 2484 |
2415 TEST_F(EndToEndTest, VerifyNackStats) { | 2485 TEST_F(EndToEndTest, VerifyNackStats) { |
2416 static const int kPacketNumberToDrop = 200; | 2486 static const int kPacketNumberToDrop = 200; |
2417 class NackObserver : public test::EndToEndTest { | 2487 class NackObserver : public test::EndToEndTest { |
2418 public: | 2488 public: |
2419 NackObserver() | 2489 NackObserver() |
2420 : EndToEndTest(kLongTimeoutMs), | 2490 : EndToEndTest(kLongTimeoutMs), |
2421 sent_rtp_packets_(0), | 2491 sent_rtp_packets_(0), |
2422 dropped_rtp_packet_(0), | 2492 dropped_rtp_packet_(0), |
(...skipping 1764 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4187 public: | 4257 public: |
4188 NetworkStateTest() | 4258 NetworkStateTest() |
4189 : EndToEndTest(kDefaultTimeoutMs), | 4259 : EndToEndTest(kDefaultTimeoutMs), |
4190 FakeEncoder(Clock::GetRealTimeClock()), | 4260 FakeEncoder(Clock::GetRealTimeClock()), |
4191 encoded_frames_(false, false), | 4261 encoded_frames_(false, false), |
4192 packet_event_(false, false), | 4262 packet_event_(false, false), |
4193 sender_call_(nullptr), | 4263 sender_call_(nullptr), |
4194 receiver_call_(nullptr), | 4264 receiver_call_(nullptr), |
4195 sender_state_(kNetworkUp), | 4265 sender_state_(kNetworkUp), |
4196 sender_rtp_(0), | 4266 sender_rtp_(0), |
| 4267 sender_padding_(0), |
4197 sender_rtcp_(0), | 4268 sender_rtcp_(0), |
4198 receiver_rtcp_(0), | 4269 receiver_rtcp_(0), |
4199 down_frames_(0) {} | 4270 down_frames_(0) {} |
4200 | 4271 |
4201 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 4272 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
4202 rtc::CritScope lock(&test_crit_); | 4273 rtc::CritScope lock(&test_crit_); |
| 4274 RTPHeader header; |
| 4275 EXPECT_TRUE(parser_->Parse(packet, length, &header)); |
| 4276 if (length == header.headerLength + header.paddingLength) |
| 4277 ++sender_padding_; |
4203 ++sender_rtp_; | 4278 ++sender_rtp_; |
4204 packet_event_.Set(); | 4279 packet_event_.Set(); |
4205 return SEND_PACKET; | 4280 return SEND_PACKET; |
4206 } | 4281 } |
4207 | 4282 |
4208 Action OnSendRtcp(const uint8_t* packet, size_t length) override { | 4283 Action OnSendRtcp(const uint8_t* packet, size_t length) override { |
4209 rtc::CritScope lock(&test_crit_); | 4284 rtc::CritScope lock(&test_crit_); |
4210 ++sender_rtcp_; | 4285 ++sender_rtcp_; |
4211 packet_event_.Set(); | 4286 packet_event_.Set(); |
4212 return SEND_PACKET; | 4287 return SEND_PACKET; |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4317 initial_sender_rtcp = sender_rtcp_; | 4392 initial_sender_rtcp = sender_rtcp_; |
4318 initial_receiver_rtcp = receiver_rtcp_; | 4393 initial_receiver_rtcp = receiver_rtcp_; |
4319 } | 4394 } |
4320 bool sender_done = false; | 4395 bool sender_done = false; |
4321 bool receiver_done = false; | 4396 bool receiver_done = false; |
4322 while (!sender_done || !receiver_done) { | 4397 while (!sender_done || !receiver_done) { |
4323 packet_event_.Wait(kSilenceTimeoutMs); | 4398 packet_event_.Wait(kSilenceTimeoutMs); |
4324 int64_t time_now_ms = clock_->TimeInMilliseconds(); | 4399 int64_t time_now_ms = clock_->TimeInMilliseconds(); |
4325 rtc::CritScope lock(&test_crit_); | 4400 rtc::CritScope lock(&test_crit_); |
4326 if (sender_down) { | 4401 if (sender_down) { |
4327 ASSERT_LE(sender_rtp_ - initial_sender_rtp, kNumAcceptedDowntimeRtp) | 4402 ASSERT_LE(sender_rtp_ - initial_sender_rtp - sender_padding_, |
| 4403 kNumAcceptedDowntimeRtp) |
4328 << "RTP sent during sender-side downtime."; | 4404 << "RTP sent during sender-side downtime."; |
4329 ASSERT_LE(sender_rtcp_ - initial_sender_rtcp, | 4405 ASSERT_LE(sender_rtcp_ - initial_sender_rtcp, |
4330 kNumAcceptedDowntimeRtcp) | 4406 kNumAcceptedDowntimeRtcp) |
4331 << "RTCP sent during sender-side downtime."; | 4407 << "RTCP sent during sender-side downtime."; |
4332 if (time_now_ms - initial_time_ms >= | 4408 if (time_now_ms - initial_time_ms >= |
4333 static_cast<int64_t>(kSilenceTimeoutMs)) { | 4409 static_cast<int64_t>(kSilenceTimeoutMs)) { |
4334 sender_done = true; | 4410 sender_done = true; |
4335 } | 4411 } |
4336 } else { | 4412 } else { |
4337 if (sender_rtp_ > initial_sender_rtp + kNumAcceptedDowntimeRtp) | 4413 if (sender_rtp_ > initial_sender_rtp + kNumAcceptedDowntimeRtp) |
(...skipping 14 matching lines...) Expand all Loading... |
4352 } | 4428 } |
4353 } | 4429 } |
4354 | 4430 |
4355 rtc::CriticalSection test_crit_; | 4431 rtc::CriticalSection test_crit_; |
4356 rtc::Event encoded_frames_; | 4432 rtc::Event encoded_frames_; |
4357 rtc::Event packet_event_; | 4433 rtc::Event packet_event_; |
4358 Call* sender_call_; | 4434 Call* sender_call_; |
4359 Call* receiver_call_; | 4435 Call* receiver_call_; |
4360 NetworkState sender_state_ GUARDED_BY(test_crit_); | 4436 NetworkState sender_state_ GUARDED_BY(test_crit_); |
4361 int sender_rtp_ GUARDED_BY(test_crit_); | 4437 int sender_rtp_ GUARDED_BY(test_crit_); |
| 4438 int sender_padding_ GUARDED_BY(test_crit_); |
4362 int sender_rtcp_ GUARDED_BY(test_crit_); | 4439 int sender_rtcp_ GUARDED_BY(test_crit_); |
4363 int receiver_rtcp_ GUARDED_BY(test_crit_); | 4440 int receiver_rtcp_ GUARDED_BY(test_crit_); |
4364 int down_frames_ GUARDED_BY(test_crit_); | 4441 int down_frames_ GUARDED_BY(test_crit_); |
4365 } test; | 4442 } test; |
4366 | 4443 |
4367 RunBaseTest(&test); | 4444 RunBaseTest(&test); |
4368 } | 4445 } |
4369 | 4446 |
4370 TEST_F(EndToEndTest, CallReportsRttForSender) { | 4447 TEST_F(EndToEndTest, CallReportsRttForSender) { |
4371 static const int kSendDelayMs = 30; | 4448 static const int kSendDelayMs = 30; |
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4757 std::unique_ptr<VideoEncoder> encoder_; | 4834 std::unique_ptr<VideoEncoder> encoder_; |
4758 std::unique_ptr<VideoDecoder> decoder_; | 4835 std::unique_ptr<VideoDecoder> decoder_; |
4759 rtc::CriticalSection crit_; | 4836 rtc::CriticalSection crit_; |
4760 int recorded_frames_ GUARDED_BY(crit_); | 4837 int recorded_frames_ GUARDED_BY(crit_); |
4761 } test(this); | 4838 } test(this); |
4762 | 4839 |
4763 RunBaseTest(&test); | 4840 RunBaseTest(&test); |
4764 } | 4841 } |
4765 | 4842 |
4766 } // namespace webrtc | 4843 } // namespace webrtc |
OLD | NEW |