OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 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 | 10 |
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
336 ASSERT_EQ(1u, transport_.sent_packets_.size()); | 336 ASSERT_EQ(1u, transport_.sent_packets_.size()); |
337 // Verify padding packet timestamp. | 337 // Verify padding packet timestamp. |
338 EXPECT_EQ(kTimestamp, transport_.last_sent_packet().Timestamp()); | 338 EXPECT_EQ(kTimestamp, transport_.last_sent_packet().Timestamp()); |
339 } | 339 } |
340 | 340 |
341 TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) { | 341 TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) { |
342 rtp_sender_.reset(new RTPSender( | 342 rtp_sender_.reset(new RTPSender( |
343 false, &fake_clock_, &transport_, nullptr, nullptr, &seq_num_allocator_, | 343 false, &fake_clock_, &transport_, nullptr, nullptr, &seq_num_allocator_, |
344 &feedback_observer_, nullptr, nullptr, nullptr, &mock_rtc_event_log_, | 344 &feedback_observer_, nullptr, nullptr, nullptr, &mock_rtc_event_log_, |
345 &send_packet_observer_, &retransmission_rate_limiter_, nullptr)); | 345 &send_packet_observer_, &retransmission_rate_limiter_, nullptr)); |
| 346 rtp_sender_->SetSSRC(kSsrc); |
346 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 347 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
347 kRtpExtensionTransportSequenceNumber, | 348 kRtpExtensionTransportSequenceNumber, |
348 kTransportSequenceNumberExtensionId)); | 349 kTransportSequenceNumberExtensionId)); |
349 | 350 |
350 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 351 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
351 .WillOnce(testing::Return(kTransportSequenceNumber)); | 352 .WillOnce(testing::Return(kTransportSequenceNumber)); |
352 EXPECT_CALL(send_packet_observer_, | 353 EXPECT_CALL(send_packet_observer_, |
353 OnSendPacket(kTransportSequenceNumber, _, _)) | 354 OnSendPacket(kTransportSequenceNumber, _, _)) |
354 .Times(1); | 355 .Times(1); |
355 EXPECT_CALL(feedback_observer_, | 356 EXPECT_CALL(feedback_observer_, |
(...skipping 596 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
952 | 953 |
953 uint32_t num_calls_; | 954 uint32_t num_calls_; |
954 uint32_t ssrc_; | 955 uint32_t ssrc_; |
955 FrameCounts frame_counts_; | 956 FrameCounts frame_counts_; |
956 } callback; | 957 } callback; |
957 | 958 |
958 rtp_sender_.reset( | 959 rtp_sender_.reset( |
959 new RTPSender(false, &fake_clock_, &transport_, &mock_paced_sender_, | 960 new RTPSender(false, &fake_clock_, &transport_, &mock_paced_sender_, |
960 nullptr, nullptr, nullptr, nullptr, &callback, nullptr, | 961 nullptr, nullptr, nullptr, nullptr, &callback, nullptr, |
961 nullptr, nullptr, &retransmission_rate_limiter_, nullptr)); | 962 nullptr, nullptr, &retransmission_rate_limiter_, nullptr)); |
962 | 963 rtp_sender_->SetSSRC(kSsrc); |
963 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; | 964 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; |
964 const uint8_t payload_type = 127; | 965 const uint8_t payload_type = 127; |
965 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, | 966 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, |
966 0, 1500)); | 967 0, 1500)); |
967 uint8_t payload[] = {47, 11, 32, 93, 89}; | 968 uint8_t payload[] = {47, 11, 32, 93, 89}; |
968 rtp_sender_->SetStorePacketsStatus(true, 1); | 969 rtp_sender_->SetStorePacketsStatus(true, 1); |
969 uint32_t ssrc = rtp_sender_->SSRC(); | 970 uint32_t ssrc = rtp_sender_->SSRC(); |
970 | 971 |
971 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) | 972 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) |
972 .Times(::testing::AtLeast(2)); | 973 .Times(::testing::AtLeast(2)); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1014 | 1015 |
1015 uint32_t num_calls_; | 1016 uint32_t num_calls_; |
1016 uint32_t ssrc_; | 1017 uint32_t ssrc_; |
1017 uint32_t total_bitrate_; | 1018 uint32_t total_bitrate_; |
1018 uint32_t retransmit_bitrate_; | 1019 uint32_t retransmit_bitrate_; |
1019 } callback; | 1020 } callback; |
1020 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, | 1021 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, |
1021 nullptr, nullptr, nullptr, &callback, nullptr, | 1022 nullptr, nullptr, nullptr, &callback, nullptr, |
1022 nullptr, nullptr, nullptr, | 1023 nullptr, nullptr, nullptr, |
1023 &retransmission_rate_limiter_, nullptr)); | 1024 &retransmission_rate_limiter_, nullptr)); |
| 1025 rtp_sender_->SetSSRC(kSsrc); |
1024 | 1026 |
1025 // Simulate kNumPackets sent with kPacketInterval ms intervals, with the | 1027 // Simulate kNumPackets sent with kPacketInterval ms intervals, with the |
1026 // number of packets selected so that we fill (but don't overflow) the one | 1028 // number of packets selected so that we fill (but don't overflow) the one |
1027 // second averaging window. | 1029 // second averaging window. |
1028 const uint32_t kWindowSizeMs = 1000; | 1030 const uint32_t kWindowSizeMs = 1000; |
1029 const uint32_t kPacketInterval = 20; | 1031 const uint32_t kPacketInterval = 20; |
1030 const uint32_t kNumPackets = | 1032 const uint32_t kNumPackets = |
1031 (kWindowSizeMs - kPacketInterval) / kPacketInterval; | 1033 (kWindowSizeMs - kPacketInterval) / kPacketInterval; |
1032 // Overhead = 12 bytes RTP header + 1 byte generic header. | 1034 // Overhead = 12 bytes RTP header + 1 byte generic header. |
1033 const uint32_t kPacketOverhead = 13; | 1035 const uint32_t kPacketOverhead = 13; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1072 class RtpSenderAudioTest : public RtpSenderTest { | 1074 class RtpSenderAudioTest : public RtpSenderTest { |
1073 protected: | 1075 protected: |
1074 RtpSenderAudioTest() {} | 1076 RtpSenderAudioTest() {} |
1075 | 1077 |
1076 void SetUp() override { | 1078 void SetUp() override { |
1077 payload_ = kAudioPayload; | 1079 payload_ = kAudioPayload; |
1078 rtp_sender_.reset(new RTPSender(true, &fake_clock_, &transport_, nullptr, | 1080 rtp_sender_.reset(new RTPSender(true, &fake_clock_, &transport_, nullptr, |
1079 nullptr, nullptr, nullptr, nullptr, nullptr, | 1081 nullptr, nullptr, nullptr, nullptr, nullptr, |
1080 nullptr, nullptr, nullptr, | 1082 nullptr, nullptr, nullptr, |
1081 &retransmission_rate_limiter_, nullptr)); | 1083 &retransmission_rate_limiter_, nullptr)); |
| 1084 rtp_sender_->SetSSRC(kSsrc); |
1082 rtp_sender_->SetSequenceNumber(kSeqNum); | 1085 rtp_sender_->SetSequenceNumber(kSeqNum); |
1083 } | 1086 } |
1084 }; | 1087 }; |
1085 | 1088 |
1086 TEST_F(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) { | 1089 TEST_F(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) { |
1087 class TestCallback : public StreamDataCountersCallback { | 1090 class TestCallback : public StreamDataCountersCallback { |
1088 public: | 1091 public: |
1089 TestCallback() : StreamDataCountersCallback(), ssrc_(0), counters_() {} | 1092 TestCallback() : StreamDataCountersCallback(), ssrc_(0), counters_() {} |
1090 virtual ~TestCallback() {} | 1093 virtual ~TestCallback() {} |
1091 | 1094 |
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1432 MOCK_METHOD1(OnOverheadChanged, void(size_t overhead_bytes_per_packet)); | 1435 MOCK_METHOD1(OnOverheadChanged, void(size_t overhead_bytes_per_packet)); |
1433 }; | 1436 }; |
1434 } // namespace | 1437 } // namespace |
1435 | 1438 |
1436 TEST_F(RtpSenderTest, OnOverheadChanged) { | 1439 TEST_F(RtpSenderTest, OnOverheadChanged) { |
1437 MockOverheadObserver mock_overhead_observer; | 1440 MockOverheadObserver mock_overhead_observer; |
1438 rtp_sender_.reset( | 1441 rtp_sender_.reset( |
1439 new RTPSender(false, &fake_clock_, &transport_, nullptr, nullptr, nullptr, | 1442 new RTPSender(false, &fake_clock_, &transport_, nullptr, nullptr, nullptr, |
1440 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | 1443 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, |
1441 &retransmission_rate_limiter_, &mock_overhead_observer)); | 1444 &retransmission_rate_limiter_, &mock_overhead_observer)); |
| 1445 rtp_sender_->SetSSRC(kSsrc); |
1442 | 1446 |
1443 // RTP overhead is 12B. | 1447 // RTP overhead is 12B. |
1444 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(12)).Times(1); | 1448 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(12)).Times(1); |
1445 SendGenericPayload(); | 1449 SendGenericPayload(); |
1446 | 1450 |
1447 rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, | 1451 rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, |
1448 kTransmissionTimeOffsetExtensionId); | 1452 kTransmissionTimeOffsetExtensionId); |
1449 | 1453 |
1450 // TransmissionTimeOffset extension has a size of 8B. | 1454 // TransmissionTimeOffset extension has a size of 8B. |
1451 // 12B + 8B = 20B | 1455 // 12B + 8B = 20B |
1452 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(20)).Times(1); | 1456 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(20)).Times(1); |
1453 SendGenericPayload(); | 1457 SendGenericPayload(); |
1454 } | 1458 } |
1455 | 1459 |
1456 TEST_F(RtpSenderTest, DoesNotUpdateOverheadOnEqualSize) { | 1460 TEST_F(RtpSenderTest, DoesNotUpdateOverheadOnEqualSize) { |
1457 MockOverheadObserver mock_overhead_observer; | 1461 MockOverheadObserver mock_overhead_observer; |
1458 rtp_sender_.reset( | 1462 rtp_sender_.reset( |
1459 new RTPSender(false, &fake_clock_, &transport_, nullptr, nullptr, nullptr, | 1463 new RTPSender(false, &fake_clock_, &transport_, nullptr, nullptr, nullptr, |
1460 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | 1464 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, |
1461 &retransmission_rate_limiter_, &mock_overhead_observer)); | 1465 &retransmission_rate_limiter_, &mock_overhead_observer)); |
| 1466 rtp_sender_->SetSSRC(kSsrc); |
1462 | 1467 |
1463 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(_)).Times(1); | 1468 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(_)).Times(1); |
1464 SendGenericPayload(); | 1469 SendGenericPayload(); |
1465 SendGenericPayload(); | 1470 SendGenericPayload(); |
1466 } | 1471 } |
1467 | 1472 |
1468 TEST_F(RtpSenderTest, AddOverheadToTransportFeedbackObserver) { | 1473 TEST_F(RtpSenderTest, AddOverheadToTransportFeedbackObserver) { |
1469 constexpr int kRtpOverheadBytesPerPacket = 12 + 8; | 1474 constexpr int kRtpOverheadBytesPerPacket = 12 + 8; |
1470 test::ScopedFieldTrials override_field_trials( | 1475 test::ScopedFieldTrials override_field_trials( |
1471 "WebRTC-SendSideBwe-WithOverhead/Enabled/"); | 1476 "WebRTC-SendSideBwe-WithOverhead/Enabled/"); |
1472 testing::NiceMock<MockOverheadObserver> mock_overhead_observer; | 1477 testing::NiceMock<MockOverheadObserver> mock_overhead_observer; |
1473 rtp_sender_.reset(new RTPSender( | 1478 rtp_sender_.reset(new RTPSender( |
1474 false, &fake_clock_, &transport_, nullptr, nullptr, &seq_num_allocator_, | 1479 false, &fake_clock_, &transport_, nullptr, nullptr, &seq_num_allocator_, |
1475 &feedback_observer_, nullptr, nullptr, nullptr, &mock_rtc_event_log_, | 1480 &feedback_observer_, nullptr, nullptr, nullptr, &mock_rtc_event_log_, |
1476 nullptr, &retransmission_rate_limiter_, &mock_overhead_observer)); | 1481 nullptr, &retransmission_rate_limiter_, &mock_overhead_observer)); |
| 1482 rtp_sender_->SetSSRC(kSsrc); |
1477 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 1483 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
1478 kRtpExtensionTransportSequenceNumber, | 1484 kRtpExtensionTransportSequenceNumber, |
1479 kTransportSequenceNumberExtensionId)); | 1485 kTransportSequenceNumberExtensionId)); |
1480 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 1486 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
1481 .WillOnce(testing::Return(kTransportSequenceNumber)); | 1487 .WillOnce(testing::Return(kTransportSequenceNumber)); |
1482 EXPECT_CALL(feedback_observer_, | 1488 EXPECT_CALL(feedback_observer_, |
1483 AddPacket(kTransportSequenceNumber, | 1489 AddPacket(kTransportSequenceNumber, |
1484 sizeof(kPayloadData) + kGenericHeaderLength + | 1490 sizeof(kPayloadData) + kGenericHeaderLength + |
1485 kRtpOverheadBytesPerPacket, | 1491 kRtpOverheadBytesPerPacket, |
1486 PacketInfo::kNotAProbe)) | 1492 PacketInfo::kNotAProbe)) |
(...skipping 23 matching lines...) Expand all Loading... |
1510 kPaddingSize, PacketInfo::kNotAProbe)); | 1516 kPaddingSize, PacketInfo::kNotAProbe)); |
1511 | 1517 |
1512 // Requested padding size is too small, will send a larger one. | 1518 // Requested padding size is too small, will send a larger one. |
1513 const size_t kMinPaddingSize = 50; | 1519 const size_t kMinPaddingSize = 50; |
1514 EXPECT_CALL(transport, SendRtp(_, kMinPaddingSize + kRtpHeaderSize, _)) | 1520 EXPECT_CALL(transport, SendRtp(_, kMinPaddingSize + kRtpHeaderSize, _)) |
1515 .WillOnce(testing::Return(true)); | 1521 .WillOnce(testing::Return(true)); |
1516 EXPECT_EQ(kMinPaddingSize, rtp_sender_->TimeToSendPadding( | 1522 EXPECT_EQ(kMinPaddingSize, rtp_sender_->TimeToSendPadding( |
1517 kMinPaddingSize - 5, PacketInfo::kNotAProbe)); | 1523 kMinPaddingSize - 5, PacketInfo::kNotAProbe)); |
1518 } | 1524 } |
1519 } // namespace webrtc | 1525 } // namespace webrtc |
OLD | NEW |