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 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 transport_(), | 128 transport_(), |
129 kMarkerBit(true) { | 129 kMarkerBit(true) { |
130 } | 130 } |
131 | 131 |
132 void SetUp() override { SetUpRtpSender(true); } | 132 void SetUp() override { SetUpRtpSender(true); } |
133 | 133 |
134 void SetUpRtpSender(bool pacer) { | 134 void SetUpRtpSender(bool pacer) { |
135 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, | 135 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, |
136 pacer ? &mock_paced_sender_ : nullptr, | 136 pacer ? &mock_paced_sender_ : nullptr, |
137 nullptr, nullptr, nullptr, nullptr, nullptr, | 137 nullptr, nullptr, nullptr, nullptr, nullptr, |
138 &mock_rtc_event_log_)); | 138 &mock_rtc_event_log_, &ssrc_database_)); |
139 rtp_sender_->SetSequenceNumber(kSeqNum); | 139 rtp_sender_->SetSequenceNumber(kSeqNum); |
140 } | 140 } |
141 | 141 |
142 SimulatedClock fake_clock_; | |
143 MockRtcEventLog mock_rtc_event_log_; | |
144 MockRtpPacketSender mock_paced_sender_; | |
145 rtc::scoped_ptr<RTPSender> rtp_sender_; | |
146 int payload_; | |
147 LoopbackTransportTest transport_; | |
148 const bool kMarkerBit; | |
149 uint8_t packet_[kMaxPacketLength]; | |
150 | |
151 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header) { | 142 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header) { |
152 VerifyRTPHeaderCommon(rtp_header, kMarkerBit, 0); | 143 VerifyRTPHeaderCommon(rtp_header, kMarkerBit, 0); |
153 } | 144 } |
154 | 145 |
155 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header, bool marker_bit) { | 146 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header, bool marker_bit) { |
156 VerifyRTPHeaderCommon(rtp_header, marker_bit, 0); | 147 VerifyRTPHeaderCommon(rtp_header, marker_bit, 0); |
157 } | 148 } |
158 | 149 |
159 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header, | 150 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header, |
160 bool marker_bit, | 151 bool marker_bit, |
(...skipping 11 matching lines...) Expand all Loading... |
172 uint32_t timestamp = capture_time_ms * 90; | 163 uint32_t timestamp = capture_time_ms * 90; |
173 int32_t rtp_length = rtp_sender_->BuildRTPheader( | 164 int32_t rtp_length = rtp_sender_->BuildRTPheader( |
174 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); | 165 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); |
175 ASSERT_GE(rtp_length, 0); | 166 ASSERT_GE(rtp_length, 0); |
176 | 167 |
177 // Packet should be stored in a send bucket. | 168 // Packet should be stored in a send bucket. |
178 EXPECT_EQ(0, rtp_sender_->SendToNetwork( | 169 EXPECT_EQ(0, rtp_sender_->SendToNetwork( |
179 packet_, payload_length, rtp_length, capture_time_ms, | 170 packet_, payload_length, rtp_length, capture_time_ms, |
180 kAllowRetransmission, RtpPacketSender::kNormalPriority)); | 171 kAllowRetransmission, RtpPacketSender::kNormalPriority)); |
181 } | 172 } |
| 173 |
| 174 SSRCDatabase ssrc_database_; |
| 175 SimulatedClock fake_clock_; |
| 176 MockRtcEventLog mock_rtc_event_log_; |
| 177 MockRtpPacketSender mock_paced_sender_; |
| 178 rtc::scoped_ptr<RTPSender> rtp_sender_; |
| 179 int payload_; |
| 180 LoopbackTransportTest transport_; |
| 181 const bool kMarkerBit; |
| 182 uint8_t packet_[kMaxPacketLength]; |
182 }; | 183 }; |
183 | 184 |
184 // TODO(pbos): Move tests over from WithoutPacer to RtpSenderTest as this is our | 185 // TODO(pbos): Move tests over from WithoutPacer to RtpSenderTest as this is our |
185 // default code path. | 186 // default code path. |
186 class RtpSenderTestWithoutPacer : public RtpSenderTest { | 187 class RtpSenderTestWithoutPacer : public RtpSenderTest { |
187 public: | 188 public: |
188 void SetUp() override { SetUpRtpSender(false); } | 189 void SetUp() override { SetUpRtpSender(false); } |
189 }; | 190 }; |
190 | 191 |
191 class RtpSenderVideoTest : public RtpSenderTest { | 192 class RtpSenderVideoTest : public RtpSenderTest { |
(...skipping 705 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
897 EXPECT_EQ(timestamp, rtp_header.timestamp); | 898 EXPECT_EQ(timestamp, rtp_header.timestamp); |
898 // Verify transmission time offset. This packet is sent without delay. | 899 // Verify transmission time offset. This packet is sent without delay. |
899 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); | 900 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); |
900 uint64_t expected_send_time = | 901 uint64_t expected_send_time = |
901 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); | 902 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); |
902 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); | 903 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); |
903 } | 904 } |
904 | 905 |
905 TEST_F(RtpSenderTest, SendRedundantPayloads) { | 906 TEST_F(RtpSenderTest, SendRedundantPayloads) { |
906 MockTransport transport; | 907 MockTransport transport; |
907 rtp_sender_.reset(new RTPSender( | 908 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport, nullptr, |
908 false, &fake_clock_, &transport, nullptr, &mock_paced_sender_, nullptr, | 909 &mock_paced_sender_, nullptr, nullptr, |
909 nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_)); | 910 nullptr, nullptr, nullptr, |
| 911 &mock_rtc_event_log_, &ssrc_database_)); |
910 rtp_sender_->SetSequenceNumber(kSeqNum); | 912 rtp_sender_->SetSequenceNumber(kSeqNum); |
911 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload); | 913 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload); |
912 | 914 |
913 uint16_t seq_num = kSeqNum; | 915 uint16_t seq_num = kSeqNum; |
914 rtp_sender_->SetStorePacketsStatus(true, 10); | 916 rtp_sender_->SetStorePacketsStatus(true, 10); |
915 int32_t rtp_header_len = kRtpHeaderSize; | 917 int32_t rtp_header_len = kRtpHeaderSize; |
916 EXPECT_EQ( | 918 EXPECT_EQ( |
917 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 919 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
918 kAbsoluteSendTimeExtensionId)); | 920 kAbsoluteSendTimeExtensionId)); |
919 rtp_header_len += 4; // 4 bytes extension. | 921 rtp_header_len += 4; // 4 bytes extension. |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1040 ++num_calls_; | 1042 ++num_calls_; |
1041 ssrc_ = ssrc; | 1043 ssrc_ = ssrc; |
1042 frame_counts_ = frame_counts; | 1044 frame_counts_ = frame_counts; |
1043 } | 1045 } |
1044 | 1046 |
1045 uint32_t num_calls_; | 1047 uint32_t num_calls_; |
1046 uint32_t ssrc_; | 1048 uint32_t ssrc_; |
1047 FrameCounts frame_counts_; | 1049 FrameCounts frame_counts_; |
1048 } callback; | 1050 } callback; |
1049 | 1051 |
1050 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, | 1052 rtp_sender_.reset(new RTPSender( |
1051 &mock_paced_sender_, nullptr, nullptr, | 1053 false, &fake_clock_, &transport_, nullptr, &mock_paced_sender_, nullptr, |
1052 nullptr, &callback, nullptr, nullptr)); | 1054 nullptr, nullptr, &callback, nullptr, nullptr, &ssrc_database_)); |
1053 | 1055 |
1054 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; | 1056 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; |
1055 const uint8_t payload_type = 127; | 1057 const uint8_t payload_type = 127; |
1056 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, | 1058 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, |
1057 0, 1500)); | 1059 0, 1500)); |
1058 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1060 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1059 rtp_sender_->SetStorePacketsStatus(true, 1); | 1061 rtp_sender_->SetStorePacketsStatus(true, 1); |
1060 uint32_t ssrc = rtp_sender_->SSRC(); | 1062 uint32_t ssrc = rtp_sender_->SSRC(); |
1061 | 1063 |
1062 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) | 1064 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1098 retransmit_stats_ = retransmit_stats; | 1100 retransmit_stats_ = retransmit_stats; |
1099 } | 1101 } |
1100 | 1102 |
1101 uint32_t num_calls_; | 1103 uint32_t num_calls_; |
1102 uint32_t ssrc_; | 1104 uint32_t ssrc_; |
1103 BitrateStatistics total_stats_; | 1105 BitrateStatistics total_stats_; |
1104 BitrateStatistics retransmit_stats_; | 1106 BitrateStatistics retransmit_stats_; |
1105 } callback; | 1107 } callback; |
1106 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, | 1108 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, |
1107 nullptr, nullptr, nullptr, &callback, nullptr, | 1109 nullptr, nullptr, nullptr, &callback, nullptr, |
1108 nullptr, nullptr)); | 1110 nullptr, nullptr, &ssrc_database_)); |
1109 | 1111 |
1110 // Simulate kNumPackets sent with kPacketInterval ms intervals. | 1112 // Simulate kNumPackets sent with kPacketInterval ms intervals. |
1111 const uint32_t kNumPackets = 15; | 1113 const uint32_t kNumPackets = 15; |
1112 const uint32_t kPacketInterval = 20; | 1114 const uint32_t kPacketInterval = 20; |
1113 // Overhead = 12 bytes RTP header + 1 byte generic header. | 1115 // Overhead = 12 bytes RTP header + 1 byte generic header. |
1114 const uint32_t kPacketOverhead = 13; | 1116 const uint32_t kPacketOverhead = 13; |
1115 | 1117 |
1116 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; | 1118 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; |
1117 const uint8_t payload_type = 127; | 1119 const uint8_t payload_type = 127; |
1118 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, | 1120 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1151 } | 1153 } |
1152 | 1154 |
1153 class RtpSenderAudioTest : public RtpSenderTest { | 1155 class RtpSenderAudioTest : public RtpSenderTest { |
1154 protected: | 1156 protected: |
1155 RtpSenderAudioTest() {} | 1157 RtpSenderAudioTest() {} |
1156 | 1158 |
1157 void SetUp() override { | 1159 void SetUp() override { |
1158 payload_ = kAudioPayload; | 1160 payload_ = kAudioPayload; |
1159 rtp_sender_.reset(new RTPSender(true, &fake_clock_, &transport_, nullptr, | 1161 rtp_sender_.reset(new RTPSender(true, &fake_clock_, &transport_, nullptr, |
1160 nullptr, nullptr, nullptr, nullptr, nullptr, | 1162 nullptr, nullptr, nullptr, nullptr, nullptr, |
1161 nullptr, nullptr)); | 1163 nullptr, nullptr, &ssrc_database_)); |
1162 rtp_sender_->SetSequenceNumber(kSeqNum); | 1164 rtp_sender_->SetSequenceNumber(kSeqNum); |
1163 } | 1165 } |
1164 }; | 1166 }; |
1165 | 1167 |
1166 TEST_F(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) { | 1168 TEST_F(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) { |
1167 class TestCallback : public StreamDataCountersCallback { | 1169 class TestCallback : public StreamDataCountersCallback { |
1168 public: | 1170 public: |
1169 TestCallback() : StreamDataCountersCallback(), ssrc_(0), counters_() {} | 1171 TestCallback() : StreamDataCountersCallback(), ssrc_(0), counters_() {} |
1170 virtual ~TestCallback() {} | 1172 virtual ~TestCallback() {} |
1171 | 1173 |
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1477 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), | 1479 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), |
1478 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); | 1480 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); |
1479 | 1481 |
1480 // Verify that this packet does have CVO byte. | 1482 // Verify that this packet does have CVO byte. |
1481 VerifyCVOPacket( | 1483 VerifyCVOPacket( |
1482 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), | 1484 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), |
1483 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, | 1485 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, |
1484 hdr.rotation); | 1486 hdr.rotation); |
1485 } | 1487 } |
1486 } // namespace webrtc | 1488 } // namespace webrtc |
OLD | NEW |