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 |
11 /* | 11 /* |
12 * This file includes unit tests for the RTPSender. | 12 * This file includes unit tests for the RTPSender. |
13 */ | 13 */ |
14 | 14 |
| 15 #include "testing/gmock/include/gmock/gmock.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
16 | 17 |
17 #include "webrtc/base/buffer.h" | 18 #include "webrtc/base/buffer.h" |
18 #include "webrtc/base/scoped_ptr.h" | 19 #include "webrtc/base/scoped_ptr.h" |
19 #include "webrtc/modules/pacing/include/mock/mock_paced_sender.h" | |
20 #include "webrtc/modules/rtp_rtcp/interface/rtp_cvo.h" | 20 #include "webrtc/modules/rtp_rtcp/interface/rtp_cvo.h" |
21 #include "webrtc/modules/rtp_rtcp/interface/rtp_header_parser.h" | 21 #include "webrtc/modules/rtp_rtcp/interface/rtp_header_parser.h" |
22 #include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h" | 22 #include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h" |
23 #include "webrtc/modules/rtp_rtcp/source/rtp_format_video_generic.h" | 23 #include "webrtc/modules/rtp_rtcp/source/rtp_format_video_generic.h" |
24 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extension.h" | 24 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extension.h" |
25 #include "webrtc/modules/rtp_rtcp/source/rtp_sender.h" | 25 #include "webrtc/modules/rtp_rtcp/source/rtp_sender.h" |
26 #include "webrtc/modules/rtp_rtcp/source/rtp_sender_video.h" | 26 #include "webrtc/modules/rtp_rtcp/source/rtp_sender_video.h" |
27 #include "webrtc/system_wrappers/interface/stl_util.h" | 27 #include "webrtc/system_wrappers/interface/stl_util.h" |
28 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" | 28 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" |
29 #include "webrtc/test/mock_transport.h" | 29 #include "webrtc/test/mock_transport.h" |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 } | 93 } |
94 int packets_sent_; | 94 int packets_sent_; |
95 size_t last_sent_packet_len_; | 95 size_t last_sent_packet_len_; |
96 size_t total_bytes_sent_; | 96 size_t total_bytes_sent_; |
97 uint8_t* last_sent_packet_; | 97 uint8_t* last_sent_packet_; |
98 std::vector<rtc::Buffer*> sent_packets_; | 98 std::vector<rtc::Buffer*> sent_packets_; |
99 }; | 99 }; |
100 | 100 |
101 } // namespace | 101 } // namespace |
102 | 102 |
| 103 class MockRtpPacketSender : public RtpPacketSender { |
| 104 public: |
| 105 MockRtpPacketSender() {} |
| 106 virtual ~MockRtpPacketSender() {} |
| 107 |
| 108 MOCK_METHOD6(SendPacket, |
| 109 bool(Priority priority, |
| 110 uint32_t ssrc, |
| 111 uint16_t sequence_number, |
| 112 int64_t capture_time_ms, |
| 113 size_t bytes, |
| 114 bool retransmission)); |
| 115 }; |
| 116 |
103 class RtpSenderTest : public ::testing::Test { | 117 class RtpSenderTest : public ::testing::Test { |
104 protected: | 118 protected: |
105 RtpSenderTest() | 119 RtpSenderTest() |
106 : fake_clock_(kStartTime), | 120 : fake_clock_(kStartTime), |
107 mock_paced_sender_(), | 121 mock_paced_sender_(), |
108 rtp_sender_(), | 122 rtp_sender_(), |
109 payload_(kPayload), | 123 payload_(kPayload), |
110 transport_(), | 124 transport_(), |
111 kMarkerBit(true) { | 125 kMarkerBit(true) { |
112 EXPECT_CALL(mock_paced_sender_, | 126 EXPECT_CALL(mock_paced_sender_, |
113 SendPacket(_, _, _, _, _, _)).WillRepeatedly(testing::Return(true)); | 127 SendPacket(_, _, _, _, _, _)).WillRepeatedly(testing::Return(true)); |
114 } | 128 } |
115 | 129 |
116 void SetUp() override { | 130 void SetUp() override { |
117 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, | 131 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, |
118 &mock_paced_sender_, nullptr, nullptr, | 132 &mock_paced_sender_, nullptr, nullptr, |
119 nullptr, nullptr, nullptr)); | 133 nullptr, nullptr, nullptr)); |
120 rtp_sender_->SetSequenceNumber(kSeqNum); | 134 rtp_sender_->SetSequenceNumber(kSeqNum); |
121 } | 135 } |
122 | 136 |
123 SimulatedClock fake_clock_; | 137 SimulatedClock fake_clock_; |
124 MockPacedSender mock_paced_sender_; | 138 MockRtpPacketSender mock_paced_sender_; |
125 rtc::scoped_ptr<RTPSender> rtp_sender_; | 139 rtc::scoped_ptr<RTPSender> rtp_sender_; |
126 int payload_; | 140 int payload_; |
127 LoopbackTransportTest transport_; | 141 LoopbackTransportTest transport_; |
128 const bool kMarkerBit; | 142 const bool kMarkerBit; |
129 uint8_t packet_[kMaxPacketLength]; | 143 uint8_t packet_[kMaxPacketLength]; |
130 | 144 |
131 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header) { | 145 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header) { |
132 VerifyRTPHeaderCommon(rtp_header, kMarkerBit); | 146 VerifyRTPHeaderCommon(rtp_header, kMarkerBit); |
133 } | 147 } |
134 | 148 |
(...skipping 10 matching lines...) Expand all Loading... |
145 void SendPacket(int64_t capture_time_ms, int payload_length) { | 159 void SendPacket(int64_t capture_time_ms, int payload_length) { |
146 uint32_t timestamp = capture_time_ms * 90; | 160 uint32_t timestamp = capture_time_ms * 90; |
147 int32_t rtp_length = rtp_sender_->BuildRTPheader(packet_, | 161 int32_t rtp_length = rtp_sender_->BuildRTPheader(packet_, |
148 kPayload, | 162 kPayload, |
149 kMarkerBit, | 163 kMarkerBit, |
150 timestamp, | 164 timestamp, |
151 capture_time_ms); | 165 capture_time_ms); |
152 ASSERT_GE(rtp_length, 0); | 166 ASSERT_GE(rtp_length, 0); |
153 | 167 |
154 // Packet should be stored in a send bucket. | 168 // Packet should be stored in a send bucket. |
155 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, | 169 EXPECT_EQ(0, rtp_sender_->SendToNetwork( |
156 payload_length, | 170 packet_, payload_length, rtp_length, capture_time_ms, |
157 rtp_length, | 171 kAllowRetransmission, RtpPacketSender::kNormalPriority)); |
158 capture_time_ms, | |
159 kAllowRetransmission, | |
160 PacedSender::kNormalPriority)); | |
161 } | 172 } |
162 }; | 173 }; |
163 | 174 |
164 class RtpSenderVideoTest : public RtpSenderTest { | 175 class RtpSenderVideoTest : public RtpSenderTest { |
165 protected: | 176 protected: |
166 virtual void SetUp() override { | 177 virtual void SetUp() override { |
167 RtpSenderTest::SetUp(); | 178 RtpSenderTest::SetUp(); |
168 rtp_sender_video_.reset( | 179 rtp_sender_video_.reset( |
169 new RTPSenderVideo(&fake_clock_, rtp_sender_.get())); | 180 new RTPSenderVideo(&fake_clock_, rtp_sender_.get())); |
170 } | 181 } |
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
586 | 597 |
587 EXPECT_EQ(0, rtp_header2.extension.transmissionTimeOffset); | 598 EXPECT_EQ(0, rtp_header2.extension.transmissionTimeOffset); |
588 EXPECT_EQ(0u, rtp_header2.extension.absoluteSendTime); | 599 EXPECT_EQ(0u, rtp_header2.extension.absoluteSendTime); |
589 EXPECT_FALSE(rtp_header2.extension.voiceActivity); | 600 EXPECT_FALSE(rtp_header2.extension.voiceActivity); |
590 EXPECT_EQ(0u, rtp_header2.extension.audioLevel); | 601 EXPECT_EQ(0u, rtp_header2.extension.audioLevel); |
591 EXPECT_EQ(0u, rtp_header2.extension.transportSequenceNumber); | 602 EXPECT_EQ(0u, rtp_header2.extension.transportSequenceNumber); |
592 } | 603 } |
593 | 604 |
594 TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) { | 605 TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) { |
595 EXPECT_CALL(mock_paced_sender_, | 606 EXPECT_CALL(mock_paced_sender_, |
596 SendPacket(PacedSender::kNormalPriority, _, kSeqNum, _, _, _)). | 607 SendPacket(RtpPacketSender::kNormalPriority, _, kSeqNum, _, _, _)) |
597 WillOnce(testing::Return(false)); | 608 .WillOnce(testing::Return(false)); |
598 | 609 |
599 rtp_sender_->SetStorePacketsStatus(true, 10); | 610 rtp_sender_->SetStorePacketsStatus(true, 10); |
600 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 611 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
601 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); | 612 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); |
602 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 613 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
603 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); | 614 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); |
604 rtp_sender_->SetTargetBitrate(300000); | 615 rtp_sender_->SetTargetBitrate(300000); |
605 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 616 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
606 int rtp_length_int = rtp_sender_->BuildRTPheader( | 617 int rtp_length_int = rtp_sender_->BuildRTPheader( |
607 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); | 618 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); |
608 ASSERT_NE(-1, rtp_length_int); | 619 ASSERT_NE(-1, rtp_length_int); |
609 size_t rtp_length = static_cast<size_t>(rtp_length_int); | 620 size_t rtp_length = static_cast<size_t>(rtp_length_int); |
610 | 621 |
611 // Packet should be stored in a send bucket. | 622 // Packet should be stored in a send bucket. |
612 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, | 623 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, |
613 0, | 624 capture_time_ms, kAllowRetransmission, |
614 rtp_length, | 625 RtpPacketSender::kNormalPriority)); |
615 capture_time_ms, | |
616 kAllowRetransmission, | |
617 PacedSender::kNormalPriority)); | |
618 | 626 |
619 EXPECT_EQ(0, transport_.packets_sent_); | 627 EXPECT_EQ(0, transport_.packets_sent_); |
620 | 628 |
621 const int kStoredTimeInMs = 100; | 629 const int kStoredTimeInMs = 100; |
622 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); | 630 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); |
623 | 631 |
624 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false); | 632 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false); |
625 | 633 |
626 // Process send bucket. Packet should now be sent. | 634 // Process send bucket. Packet should now be sent. |
627 EXPECT_EQ(1, transport_.packets_sent_); | 635 EXPECT_EQ(1, transport_.packets_sent_); |
(...skipping 11 matching lines...) Expand all Loading... |
639 | 647 |
640 // Verify transmission time offset. | 648 // Verify transmission time offset. |
641 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); | 649 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); |
642 uint64_t expected_send_time = | 650 uint64_t expected_send_time = |
643 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); | 651 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); |
644 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); | 652 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); |
645 } | 653 } |
646 | 654 |
647 TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) { | 655 TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) { |
648 EXPECT_CALL(mock_paced_sender_, | 656 EXPECT_CALL(mock_paced_sender_, |
649 SendPacket(PacedSender::kNormalPriority, _, kSeqNum, _, _, _)). | 657 SendPacket(RtpPacketSender::kNormalPriority, _, kSeqNum, _, _, _)) |
650 WillOnce(testing::Return(false)); | 658 .WillOnce(testing::Return(false)); |
651 | 659 |
652 rtp_sender_->SetStorePacketsStatus(true, 10); | 660 rtp_sender_->SetStorePacketsStatus(true, 10); |
653 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 661 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
654 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); | 662 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); |
655 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 663 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
656 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); | 664 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); |
657 rtp_sender_->SetTargetBitrate(300000); | 665 rtp_sender_->SetTargetBitrate(300000); |
658 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 666 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
659 int rtp_length_int = rtp_sender_->BuildRTPheader( | 667 int rtp_length_int = rtp_sender_->BuildRTPheader( |
660 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); | 668 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); |
661 ASSERT_NE(-1, rtp_length_int); | 669 ASSERT_NE(-1, rtp_length_int); |
662 size_t rtp_length = static_cast<size_t>(rtp_length_int); | 670 size_t rtp_length = static_cast<size_t>(rtp_length_int); |
663 | 671 |
664 // Packet should be stored in a send bucket. | 672 // Packet should be stored in a send bucket. |
665 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, | 673 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, |
666 0, | 674 capture_time_ms, kAllowRetransmission, |
667 rtp_length, | 675 RtpPacketSender::kNormalPriority)); |
668 capture_time_ms, | |
669 kAllowRetransmission, | |
670 PacedSender::kNormalPriority)); | |
671 | 676 |
672 EXPECT_EQ(0, transport_.packets_sent_); | 677 EXPECT_EQ(0, transport_.packets_sent_); |
673 | 678 |
674 EXPECT_CALL(mock_paced_sender_, | 679 EXPECT_CALL(mock_paced_sender_, |
675 SendPacket(PacedSender::kHighPriority, _, kSeqNum, _, _, _)). | 680 SendPacket(RtpPacketSender::kHighPriority, _, kSeqNum, _, _, _)) |
676 WillOnce(testing::Return(false)); | 681 .WillOnce(testing::Return(false)); |
677 | 682 |
678 const int kStoredTimeInMs = 100; | 683 const int kStoredTimeInMs = 100; |
679 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); | 684 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); |
680 | 685 |
681 EXPECT_EQ(rtp_length_int, rtp_sender_->ReSendPacket(kSeqNum)); | 686 EXPECT_EQ(rtp_length_int, rtp_sender_->ReSendPacket(kSeqNum)); |
682 EXPECT_EQ(0, transport_.packets_sent_); | 687 EXPECT_EQ(0, transport_.packets_sent_); |
683 | 688 |
684 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false); | 689 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false); |
685 | 690 |
686 // Process send bucket. Packet should now be sent. | 691 // Process send bucket. Packet should now be sent. |
(...skipping 16 matching lines...) Expand all Loading... |
703 uint64_t expected_send_time = | 708 uint64_t expected_send_time = |
704 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); | 709 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); |
705 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); | 710 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); |
706 } | 711 } |
707 | 712 |
708 // This test sends 1 regular video packet, then 4 padding packets, and then | 713 // This test sends 1 regular video packet, then 4 padding packets, and then |
709 // 1 more regular packet. | 714 // 1 more regular packet. |
710 TEST_F(RtpSenderTest, SendPadding) { | 715 TEST_F(RtpSenderTest, SendPadding) { |
711 // Make all (non-padding) packets go to send queue. | 716 // Make all (non-padding) packets go to send queue. |
712 EXPECT_CALL(mock_paced_sender_, | 717 EXPECT_CALL(mock_paced_sender_, |
713 SendPacket(PacedSender::kNormalPriority, _, _, _, _, _)). | 718 SendPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)) |
714 WillRepeatedly(testing::Return(false)); | 719 .WillRepeatedly(testing::Return(false)); |
715 | 720 |
716 uint16_t seq_num = kSeqNum; | 721 uint16_t seq_num = kSeqNum; |
717 uint32_t timestamp = kTimestamp; | 722 uint32_t timestamp = kTimestamp; |
718 rtp_sender_->SetStorePacketsStatus(true, 10); | 723 rtp_sender_->SetStorePacketsStatus(true, 10); |
719 size_t rtp_header_len = kRtpHeaderSize; | 724 size_t rtp_header_len = kRtpHeaderSize; |
720 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 725 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
721 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); | 726 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); |
722 rtp_header_len += 4; // 4 bytes extension. | 727 rtp_header_len += 4; // 4 bytes extension. |
723 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 728 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
724 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); | 729 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); |
(...skipping 12 matching lines...) Expand all Loading... |
737 | 742 |
738 rtp_sender_->SetTargetBitrate(300000); | 743 rtp_sender_->SetTargetBitrate(300000); |
739 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 744 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
740 int rtp_length_int = rtp_sender_->BuildRTPheader( | 745 int rtp_length_int = rtp_sender_->BuildRTPheader( |
741 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); | 746 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); |
742 const uint32_t media_packet_timestamp = timestamp; | 747 const uint32_t media_packet_timestamp = timestamp; |
743 ASSERT_NE(-1, rtp_length_int); | 748 ASSERT_NE(-1, rtp_length_int); |
744 size_t rtp_length = static_cast<size_t>(rtp_length_int); | 749 size_t rtp_length = static_cast<size_t>(rtp_length_int); |
745 | 750 |
746 // Packet should be stored in a send bucket. | 751 // Packet should be stored in a send bucket. |
747 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, | 752 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, |
748 0, | 753 capture_time_ms, kAllowRetransmission, |
749 rtp_length, | 754 RtpPacketSender::kNormalPriority)); |
750 capture_time_ms, | |
751 kAllowRetransmission, | |
752 PacedSender::kNormalPriority)); | |
753 | 755 |
754 int total_packets_sent = 0; | 756 int total_packets_sent = 0; |
755 EXPECT_EQ(total_packets_sent, transport_.packets_sent_); | 757 EXPECT_EQ(total_packets_sent, transport_.packets_sent_); |
756 | 758 |
757 const int kStoredTimeInMs = 100; | 759 const int kStoredTimeInMs = 100; |
758 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); | 760 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); |
759 rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false); | 761 rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false); |
760 // Packet should now be sent. This test doesn't verify the regular video | 762 // Packet should now be sent. This test doesn't verify the regular video |
761 // packet, since it is tested in another test. | 763 // packet, since it is tested in another test. |
762 EXPECT_EQ(++total_packets_sent, transport_.packets_sent_); | 764 EXPECT_EQ(++total_packets_sent, transport_.packets_sent_); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
795 } | 797 } |
796 | 798 |
797 // Send a regular video packet again. | 799 // Send a regular video packet again. |
798 capture_time_ms = fake_clock_.TimeInMilliseconds(); | 800 capture_time_ms = fake_clock_.TimeInMilliseconds(); |
799 rtp_length_int = rtp_sender_->BuildRTPheader( | 801 rtp_length_int = rtp_sender_->BuildRTPheader( |
800 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); | 802 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); |
801 ASSERT_NE(-1, rtp_length_int); | 803 ASSERT_NE(-1, rtp_length_int); |
802 rtp_length = static_cast<size_t>(rtp_length_int); | 804 rtp_length = static_cast<size_t>(rtp_length_int); |
803 | 805 |
804 // Packet should be stored in a send bucket. | 806 // Packet should be stored in a send bucket. |
805 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, | 807 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, |
806 0, | 808 capture_time_ms, kAllowRetransmission, |
807 rtp_length, | 809 RtpPacketSender::kNormalPriority)); |
808 capture_time_ms, | |
809 kAllowRetransmission, | |
810 PacedSender::kNormalPriority)); | |
811 | 810 |
812 rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false); | 811 rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false); |
813 // Process send bucket. | 812 // Process send bucket. |
814 EXPECT_EQ(++total_packets_sent, transport_.packets_sent_); | 813 EXPECT_EQ(++total_packets_sent, transport_.packets_sent_); |
815 EXPECT_EQ(rtp_length, transport_.last_sent_packet_len_); | 814 EXPECT_EQ(rtp_length, transport_.last_sent_packet_len_); |
816 // Parse sent packet. | 815 // Parse sent packet. |
817 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, rtp_length, | 816 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, rtp_length, |
818 &rtp_header)); | 817 &rtp_header)); |
819 | 818 |
820 // Verify sequence number and timestamp. | 819 // Verify sequence number and timestamp. |
821 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); | 820 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); |
822 EXPECT_EQ(timestamp, rtp_header.timestamp); | 821 EXPECT_EQ(timestamp, rtp_header.timestamp); |
823 // Verify transmission time offset. This packet is sent without delay. | 822 // Verify transmission time offset. This packet is sent without delay. |
824 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); | 823 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); |
825 uint64_t expected_send_time = | 824 uint64_t expected_send_time = |
826 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); | 825 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); |
827 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); | 826 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); |
828 } | 827 } |
829 | 828 |
830 TEST_F(RtpSenderTest, SendRedundantPayloads) { | 829 TEST_F(RtpSenderTest, SendRedundantPayloads) { |
831 MockTransport transport; | 830 MockTransport transport; |
832 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport, nullptr, | 831 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport, nullptr, |
833 &mock_paced_sender_, nullptr, nullptr, | 832 &mock_paced_sender_, nullptr, nullptr, |
834 nullptr, nullptr, nullptr)); | 833 nullptr, nullptr, nullptr)); |
835 rtp_sender_->SetSequenceNumber(kSeqNum); | 834 rtp_sender_->SetSequenceNumber(kSeqNum); |
836 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload); | 835 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload); |
837 // Make all packets go through the pacer. | 836 // Make all packets go through the pacer. |
838 EXPECT_CALL(mock_paced_sender_, | 837 EXPECT_CALL(mock_paced_sender_, |
839 SendPacket(PacedSender::kNormalPriority, _, _, _, _, _)). | 838 SendPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)) |
840 WillRepeatedly(testing::Return(false)); | 839 .WillRepeatedly(testing::Return(false)); |
841 | 840 |
842 uint16_t seq_num = kSeqNum; | 841 uint16_t seq_num = kSeqNum; |
843 rtp_sender_->SetStorePacketsStatus(true, 10); | 842 rtp_sender_->SetStorePacketsStatus(true, 10); |
844 int32_t rtp_header_len = kRtpHeaderSize; | 843 int32_t rtp_header_len = kRtpHeaderSize; |
845 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 844 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
846 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); | 845 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); |
847 rtp_header_len += 4; // 4 bytes extension. | 846 rtp_header_len += 4; // 4 bytes extension. |
848 rtp_header_len += 4; // 4 extra bytes common to all extension headers. | 847 rtp_header_len += 4; // 4 extra bytes common to all extension headers. |
849 | 848 |
850 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); | 849 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); |
(...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1374 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), | 1373 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), |
1375 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); | 1374 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); |
1376 | 1375 |
1377 // Verify that this packet does have CVO byte. | 1376 // Verify that this packet does have CVO byte. |
1378 VerifyCVOPacket( | 1377 VerifyCVOPacket( |
1379 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), | 1378 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), |
1380 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, | 1379 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, |
1381 hdr.rotation); | 1380 hdr.rotation); |
1382 } | 1381 } |
1383 } // namespace webrtc | 1382 } // namespace webrtc |
OLD | NEW |