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 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
125 }; | 125 }; |
126 | 126 |
127 class MockTransportFeedbackObserver : public TransportFeedbackObserver { | 127 class MockTransportFeedbackObserver : public TransportFeedbackObserver { |
128 public: | 128 public: |
129 MOCK_METHOD4(AddPacket, | 129 MOCK_METHOD4(AddPacket, |
130 void(uint32_t, uint16_t, size_t, const PacedPacketInfo&)); | 130 void(uint32_t, uint16_t, size_t, const PacedPacketInfo&)); |
131 MOCK_METHOD1(OnTransportFeedback, void(const rtcp::TransportFeedback&)); | 131 MOCK_METHOD1(OnTransportFeedback, void(const rtcp::TransportFeedback&)); |
132 MOCK_CONST_METHOD0(GetTransportFeedbackVector, std::vector<PacketFeedback>()); | 132 MOCK_CONST_METHOD0(GetTransportFeedbackVector, std::vector<PacketFeedback>()); |
133 }; | 133 }; |
134 | 134 |
135 class RtpSenderTest : public ::testing::Test { | 135 class MockOverheadObserver : public OverheadObserver { |
136 public: | |
137 MOCK_METHOD1(OnOverheadChanged, void(size_t overhead_bytes_per_packet)); | |
138 }; | |
139 | |
140 class RtpSenderTest : public ::testing::TestWithParam<bool> { | |
136 protected: | 141 protected: |
137 RtpSenderTest() | 142 RtpSenderTest() |
138 : fake_clock_(kStartTime), | 143 : fake_clock_(kStartTime), |
139 mock_rtc_event_log_(), | 144 mock_rtc_event_log_(), |
140 mock_paced_sender_(), | 145 mock_paced_sender_(), |
141 retransmission_rate_limiter_(&fake_clock_, 1000), | 146 retransmission_rate_limiter_(&fake_clock_, 1000), |
142 rtp_sender_(), | 147 rtp_sender_(), |
143 payload_(kPayload), | 148 payload_(kPayload), |
144 transport_(), | 149 transport_(), |
145 kMarkerBit(true) {} | 150 kMarkerBit(true), |
151 field_trials_(GetParam() ? "WebRTC-SendSideBwe-WithOverhead/Enabled/" | |
152 : "") {} | |
146 | 153 |
147 void SetUp() override { SetUpRtpSender(true); } | 154 void SetUp() override { SetUpRtpSender(true); } |
148 | 155 |
149 void SetUpRtpSender(bool pacer) { | 156 void SetUpRtpSender(bool pacer) { |
150 rtp_sender_.reset(new RTPSender( | 157 rtp_sender_.reset(new RTPSender( |
151 false, &fake_clock_, &transport_, pacer ? &mock_paced_sender_ : nullptr, | 158 false, &fake_clock_, &transport_, pacer ? &mock_paced_sender_ : nullptr, |
152 nullptr, &seq_num_allocator_, nullptr, nullptr, nullptr, nullptr, | 159 nullptr, &seq_num_allocator_, nullptr, nullptr, nullptr, nullptr, |
153 &mock_rtc_event_log_, &send_packet_observer_, | 160 &mock_rtc_event_log_, &send_packet_observer_, |
154 &retransmission_rate_limiter_, nullptr)); | 161 &retransmission_rate_limiter_, nullptr)); |
155 rtp_sender_->SetSendPayloadType(kPayload); | 162 rtp_sender_->SetSendPayloadType(kPayload); |
156 rtp_sender_->SetSequenceNumber(kSeqNum); | 163 rtp_sender_->SetSequenceNumber(kSeqNum); |
157 rtp_sender_->SetTimestampOffset(0); | 164 rtp_sender_->SetTimestampOffset(0); |
158 rtp_sender_->SetSSRC(kSsrc); | 165 rtp_sender_->SetSSRC(kSsrc); |
159 } | 166 } |
160 | 167 |
161 SimulatedClock fake_clock_; | 168 SimulatedClock fake_clock_; |
162 testing::NiceMock<MockRtcEventLog> mock_rtc_event_log_; | 169 testing::NiceMock<MockRtcEventLog> mock_rtc_event_log_; |
163 MockRtpPacketSender mock_paced_sender_; | 170 MockRtpPacketSender mock_paced_sender_; |
164 testing::StrictMock<MockTransportSequenceNumberAllocator> seq_num_allocator_; | 171 testing::StrictMock<MockTransportSequenceNumberAllocator> seq_num_allocator_; |
165 testing::StrictMock<MockSendPacketObserver> send_packet_observer_; | 172 testing::StrictMock<MockSendPacketObserver> send_packet_observer_; |
166 testing::StrictMock<MockTransportFeedbackObserver> feedback_observer_; | 173 testing::StrictMock<MockTransportFeedbackObserver> feedback_observer_; |
167 RateLimiter retransmission_rate_limiter_; | 174 RateLimiter retransmission_rate_limiter_; |
168 std::unique_ptr<RTPSender> rtp_sender_; | 175 std::unique_ptr<RTPSender> rtp_sender_; |
169 int payload_; | 176 int payload_; |
170 LoopbackTransportTest transport_; | 177 LoopbackTransportTest transport_; |
171 const bool kMarkerBit; | 178 const bool kMarkerBit; |
179 test::ScopedFieldTrials field_trials_; | |
172 | 180 |
173 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header) { | 181 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header) { |
174 VerifyRTPHeaderCommon(rtp_header, kMarkerBit, 0); | 182 VerifyRTPHeaderCommon(rtp_header, kMarkerBit, 0); |
175 } | 183 } |
176 | 184 |
177 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header, bool marker_bit) { | 185 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header, bool marker_bit) { |
178 VerifyRTPHeaderCommon(rtp_header, marker_bit, 0); | 186 VerifyRTPHeaderCommon(rtp_header, marker_bit, 0); |
179 } | 187 } |
180 | 188 |
181 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header, | 189 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header, |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
240 protected: | 248 protected: |
241 void SetUp() override { | 249 void SetUp() override { |
242 // TODO(pbos): Set up to use pacer. | 250 // TODO(pbos): Set up to use pacer. |
243 SetUpRtpSender(false); | 251 SetUpRtpSender(false); |
244 rtp_sender_video_.reset( | 252 rtp_sender_video_.reset( |
245 new RTPSenderVideo(&fake_clock_, rtp_sender_.get(), nullptr)); | 253 new RTPSenderVideo(&fake_clock_, rtp_sender_.get(), nullptr)); |
246 } | 254 } |
247 std::unique_ptr<RTPSenderVideo> rtp_sender_video_; | 255 std::unique_ptr<RTPSenderVideo> rtp_sender_video_; |
248 }; | 256 }; |
249 | 257 |
250 TEST_F(RtpSenderTestWithoutPacer, AllocatePacketSetCsrc) { | 258 TEST_P(RtpSenderTestWithoutPacer, AllocatePacketSetCsrc) { |
251 // Configure rtp_sender with csrc. | 259 // Configure rtp_sender with csrc. |
252 std::vector<uint32_t> csrcs; | 260 std::vector<uint32_t> csrcs; |
253 csrcs.push_back(0x23456789); | 261 csrcs.push_back(0x23456789); |
254 rtp_sender_->SetCsrcs(csrcs); | 262 rtp_sender_->SetCsrcs(csrcs); |
255 | 263 |
256 auto packet = rtp_sender_->AllocatePacket(); | 264 auto packet = rtp_sender_->AllocatePacket(); |
257 | 265 |
258 ASSERT_TRUE(packet); | 266 ASSERT_TRUE(packet); |
259 EXPECT_EQ(rtp_sender_->SSRC(), packet->Ssrc()); | 267 EXPECT_EQ(rtp_sender_->SSRC(), packet->Ssrc()); |
260 EXPECT_EQ(csrcs, packet->Csrcs()); | 268 EXPECT_EQ(csrcs, packet->Csrcs()); |
261 } | 269 } |
262 | 270 |
263 TEST_F(RtpSenderTestWithoutPacer, AllocatePacketReserveExtensions) { | 271 TEST_P(RtpSenderTestWithoutPacer, AllocatePacketReserveExtensions) { |
264 // Configure rtp_sender with extensions. | 272 // Configure rtp_sender with extensions. |
265 ASSERT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 273 ASSERT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
266 kRtpExtensionTransmissionTimeOffset, | 274 kRtpExtensionTransmissionTimeOffset, |
267 kTransmissionTimeOffsetExtensionId)); | 275 kTransmissionTimeOffsetExtensionId)); |
268 ASSERT_EQ( | 276 ASSERT_EQ( |
269 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 277 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
270 kAbsoluteSendTimeExtensionId)); | 278 kAbsoluteSendTimeExtensionId)); |
271 ASSERT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, | 279 ASSERT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, |
272 kAudioLevelExtensionId)); | 280 kAudioLevelExtensionId)); |
273 ASSERT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 281 ASSERT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
274 kRtpExtensionTransportSequenceNumber, | 282 kRtpExtensionTransportSequenceNumber, |
275 kTransportSequenceNumberExtensionId)); | 283 kTransportSequenceNumberExtensionId)); |
276 ASSERT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 284 ASSERT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
277 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); | 285 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); |
278 | 286 |
279 auto packet = rtp_sender_->AllocatePacket(); | 287 auto packet = rtp_sender_->AllocatePacket(); |
280 | 288 |
281 ASSERT_TRUE(packet); | 289 ASSERT_TRUE(packet); |
282 // Preallocate BWE extensions RtpSender set itself. | 290 // Preallocate BWE extensions RtpSender set itself. |
283 EXPECT_TRUE(packet->HasExtension<TransmissionOffset>()); | 291 EXPECT_TRUE(packet->HasExtension<TransmissionOffset>()); |
284 EXPECT_TRUE(packet->HasExtension<AbsoluteSendTime>()); | 292 EXPECT_TRUE(packet->HasExtension<AbsoluteSendTime>()); |
285 EXPECT_TRUE(packet->HasExtension<TransportSequenceNumber>()); | 293 EXPECT_TRUE(packet->HasExtension<TransportSequenceNumber>()); |
286 // Do not allocate media specific extensions. | 294 // Do not allocate media specific extensions. |
287 EXPECT_FALSE(packet->HasExtension<AudioLevel>()); | 295 EXPECT_FALSE(packet->HasExtension<AudioLevel>()); |
288 EXPECT_FALSE(packet->HasExtension<VideoOrientation>()); | 296 EXPECT_FALSE(packet->HasExtension<VideoOrientation>()); |
289 } | 297 } |
290 | 298 |
291 TEST_F(RtpSenderTestWithoutPacer, AssignSequenceNumberAdvanceSequenceNumber) { | 299 TEST_P(RtpSenderTestWithoutPacer, AssignSequenceNumberAdvanceSequenceNumber) { |
292 auto packet = rtp_sender_->AllocatePacket(); | 300 auto packet = rtp_sender_->AllocatePacket(); |
293 ASSERT_TRUE(packet); | 301 ASSERT_TRUE(packet); |
294 const uint16_t sequence_number = rtp_sender_->SequenceNumber(); | 302 const uint16_t sequence_number = rtp_sender_->SequenceNumber(); |
295 | 303 |
296 EXPECT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get())); | 304 EXPECT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get())); |
297 | 305 |
298 EXPECT_EQ(sequence_number, packet->SequenceNumber()); | 306 EXPECT_EQ(sequence_number, packet->SequenceNumber()); |
299 EXPECT_EQ(sequence_number + 1, rtp_sender_->SequenceNumber()); | 307 EXPECT_EQ(sequence_number + 1, rtp_sender_->SequenceNumber()); |
300 } | 308 } |
301 | 309 |
302 TEST_F(RtpSenderTestWithoutPacer, AssignSequenceNumberFailsOnNotSending) { | 310 TEST_P(RtpSenderTestWithoutPacer, AssignSequenceNumberFailsOnNotSending) { |
303 auto packet = rtp_sender_->AllocatePacket(); | 311 auto packet = rtp_sender_->AllocatePacket(); |
304 ASSERT_TRUE(packet); | 312 ASSERT_TRUE(packet); |
305 | 313 |
306 rtp_sender_->SetSendingMediaStatus(false); | 314 rtp_sender_->SetSendingMediaStatus(false); |
307 EXPECT_FALSE(rtp_sender_->AssignSequenceNumber(packet.get())); | 315 EXPECT_FALSE(rtp_sender_->AssignSequenceNumber(packet.get())); |
308 } | 316 } |
309 | 317 |
310 TEST_F(RtpSenderTestWithoutPacer, AssignSequenceNumberMayAllowPadding) { | 318 TEST_P(RtpSenderTestWithoutPacer, AssignSequenceNumberMayAllowPadding) { |
311 constexpr size_t kPaddingSize = 100; | 319 constexpr size_t kPaddingSize = 100; |
312 auto packet = rtp_sender_->AllocatePacket(); | 320 auto packet = rtp_sender_->AllocatePacket(); |
313 ASSERT_TRUE(packet); | 321 ASSERT_TRUE(packet); |
314 | 322 |
315 ASSERT_FALSE(rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo())); | 323 ASSERT_FALSE(rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo())); |
316 packet->SetMarker(false); | 324 packet->SetMarker(false); |
317 ASSERT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get())); | 325 ASSERT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get())); |
318 // Packet without marker bit doesn't allow padding. | 326 // Packet without marker bit doesn't allow padding. |
319 EXPECT_FALSE(rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo())); | 327 EXPECT_FALSE(rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo())); |
320 | 328 |
321 packet->SetMarker(true); | 329 packet->SetMarker(true); |
322 ASSERT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get())); | 330 ASSERT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get())); |
323 // Packet with marker bit allows send padding. | 331 // Packet with marker bit allows send padding. |
324 EXPECT_TRUE(rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo())); | 332 EXPECT_TRUE(rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo())); |
325 } | 333 } |
326 | 334 |
327 TEST_F(RtpSenderTestWithoutPacer, AssignSequenceNumberSetPaddingTimestamps) { | 335 TEST_P(RtpSenderTestWithoutPacer, AssignSequenceNumberSetPaddingTimestamps) { |
328 constexpr size_t kPaddingSize = 100; | 336 constexpr size_t kPaddingSize = 100; |
329 auto packet = rtp_sender_->AllocatePacket(); | 337 auto packet = rtp_sender_->AllocatePacket(); |
330 ASSERT_TRUE(packet); | 338 ASSERT_TRUE(packet); |
331 packet->SetMarker(true); | 339 packet->SetMarker(true); |
332 packet->SetTimestamp(kTimestamp); | 340 packet->SetTimestamp(kTimestamp); |
333 | 341 |
334 ASSERT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get())); | 342 ASSERT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get())); |
335 ASSERT_TRUE(rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo())); | 343 ASSERT_TRUE(rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo())); |
336 | 344 |
337 ASSERT_EQ(1u, transport_.sent_packets_.size()); | 345 ASSERT_EQ(1u, transport_.sent_packets_.size()); |
338 // Verify padding packet timestamp. | 346 // Verify padding packet timestamp. |
339 EXPECT_EQ(kTimestamp, transport_.last_sent_packet().Timestamp()); | 347 EXPECT_EQ(kTimestamp, transport_.last_sent_packet().Timestamp()); |
340 } | 348 } |
341 | 349 |
342 TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) { | 350 TEST_P(RtpSenderTestWithoutPacer, |
351 TransportFeedbackObserverGetsCorrectByteCount) { | |
minyue-webrtc
2017/03/29 12:00:39
Add a reason whey moving this up:
I removed the c
| |
352 constexpr int kRtpOverheadBytesPerPacket = 12 + 8; | |
353 testing::NiceMock<MockOverheadObserver> mock_overhead_observer; | |
343 rtp_sender_.reset(new RTPSender( | 354 rtp_sender_.reset(new RTPSender( |
344 false, &fake_clock_, &transport_, nullptr, nullptr, &seq_num_allocator_, | 355 false, &fake_clock_, &transport_, nullptr, nullptr, &seq_num_allocator_, |
345 &feedback_observer_, nullptr, nullptr, nullptr, &mock_rtc_event_log_, | 356 &feedback_observer_, nullptr, nullptr, nullptr, &mock_rtc_event_log_, |
357 nullptr, &retransmission_rate_limiter_, &mock_overhead_observer)); | |
358 rtp_sender_->SetSSRC(kSsrc); | |
359 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | |
360 kRtpExtensionTransportSequenceNumber, | |
361 kTransportSequenceNumberExtensionId)); | |
362 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | |
363 .WillOnce(testing::Return(kTransportSequenceNumber)); | |
364 | |
365 const size_t expected_bytes = | |
366 GetParam() ? sizeof(kPayloadData) + kGenericHeaderLength + | |
367 kRtpOverheadBytesPerPacket | |
368 : sizeof(kPayloadData) + kGenericHeaderLength; | |
369 | |
370 EXPECT_CALL(feedback_observer_, | |
371 AddPacket(rtp_sender_->SSRC(), kTransportSequenceNumber, | |
372 expected_bytes, PacedPacketInfo())) | |
373 .Times(1); | |
374 EXPECT_CALL(mock_overhead_observer, | |
375 OnOverheadChanged(kRtpOverheadBytesPerPacket)) | |
376 .Times(1); | |
377 SendGenericPayload(); | |
378 } | |
379 | |
380 TEST_P(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) { | |
381 rtp_sender_.reset(new RTPSender( | |
382 false, &fake_clock_, &transport_, nullptr, nullptr, &seq_num_allocator_, | |
383 &feedback_observer_, nullptr, nullptr, nullptr, &mock_rtc_event_log_, | |
346 &send_packet_observer_, &retransmission_rate_limiter_, nullptr)); | 384 &send_packet_observer_, &retransmission_rate_limiter_, nullptr)); |
347 rtp_sender_->SetSSRC(kSsrc); | 385 rtp_sender_->SetSSRC(kSsrc); |
348 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 386 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
349 kRtpExtensionTransportSequenceNumber, | 387 kRtpExtensionTransportSequenceNumber, |
350 kTransportSequenceNumberExtensionId)); | 388 kTransportSequenceNumberExtensionId)); |
351 | 389 |
352 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 390 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
353 .WillOnce(testing::Return(kTransportSequenceNumber)); | 391 .WillOnce(testing::Return(kTransportSequenceNumber)); |
354 EXPECT_CALL(send_packet_observer_, | 392 EXPECT_CALL(send_packet_observer_, |
355 OnSendPacket(kTransportSequenceNumber, _, _)) | 393 OnSendPacket(kTransportSequenceNumber, _, _)) |
356 .Times(1); | 394 .Times(1); |
357 EXPECT_CALL( | 395 |
358 feedback_observer_, | 396 EXPECT_CALL(feedback_observer_, |
359 AddPacket(rtp_sender_->SSRC(), kTransportSequenceNumber, | 397 AddPacket(rtp_sender_->SSRC(), kTransportSequenceNumber, _, |
360 sizeof(kPayloadData) + kGenericHeaderLength, PacedPacketInfo())) | 398 PacedPacketInfo())) |
361 .Times(1); | 399 .Times(1); |
362 | 400 |
363 SendGenericPayload(); | 401 SendGenericPayload(); |
364 | 402 |
365 const auto& packet = transport_.last_sent_packet(); | 403 const auto& packet = transport_.last_sent_packet(); |
366 uint16_t transport_seq_no; | 404 uint16_t transport_seq_no; |
367 ASSERT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); | 405 ASSERT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); |
368 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); | 406 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); |
369 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); | 407 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); |
370 } | 408 } |
371 | 409 |
372 TEST_F(RtpSenderTestWithoutPacer, NoAllocationIfNotRegistered) { | 410 TEST_P(RtpSenderTestWithoutPacer, NoAllocationIfNotRegistered) { |
373 SendGenericPayload(); | 411 SendGenericPayload(); |
374 } | 412 } |
375 | 413 |
376 TEST_F(RtpSenderTestWithoutPacer, OnSendPacketUpdated) { | 414 TEST_P(RtpSenderTestWithoutPacer, OnSendPacketUpdated) { |
377 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 415 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
378 kRtpExtensionTransportSequenceNumber, | 416 kRtpExtensionTransportSequenceNumber, |
379 kTransportSequenceNumberExtensionId)); | 417 kTransportSequenceNumberExtensionId)); |
380 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 418 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
381 .WillOnce(testing::Return(kTransportSequenceNumber)); | 419 .WillOnce(testing::Return(kTransportSequenceNumber)); |
382 EXPECT_CALL(send_packet_observer_, | 420 EXPECT_CALL(send_packet_observer_, |
383 OnSendPacket(kTransportSequenceNumber, _, _)) | 421 OnSendPacket(kTransportSequenceNumber, _, _)) |
384 .Times(1); | 422 .Times(1); |
385 | 423 |
386 SendGenericPayload(); | 424 SendGenericPayload(); |
387 } | 425 } |
388 | 426 |
389 TEST_F(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) { | 427 TEST_P(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) { |
390 rtp_sender_.reset(new RTPSender( | 428 rtp_sender_.reset(new RTPSender( |
391 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr, | 429 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr, |
392 &seq_num_allocator_, &feedback_observer_, nullptr, nullptr, nullptr, | 430 &seq_num_allocator_, &feedback_observer_, nullptr, nullptr, nullptr, |
393 &mock_rtc_event_log_, &send_packet_observer_, | 431 &mock_rtc_event_log_, &send_packet_observer_, |
394 &retransmission_rate_limiter_, nullptr)); | 432 &retransmission_rate_limiter_, nullptr)); |
395 rtp_sender_->SetSequenceNumber(kSeqNum); | 433 rtp_sender_->SetSequenceNumber(kSeqNum); |
396 rtp_sender_->SetSSRC(kSsrc); | 434 rtp_sender_->SetSSRC(kSsrc); |
397 rtp_sender_->SetStorePacketsStatus(true, 10); | 435 rtp_sender_->SetStorePacketsStatus(true, 10); |
398 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 436 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
399 kRtpExtensionTransportSequenceNumber, | 437 kRtpExtensionTransportSequenceNumber, |
400 kTransportSequenceNumberExtensionId)); | 438 kTransportSequenceNumberExtensionId)); |
401 | 439 |
402 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)); | 440 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)); |
403 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 441 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
404 .WillOnce(testing::Return(kTransportSequenceNumber)); | 442 .WillOnce(testing::Return(kTransportSequenceNumber)); |
405 EXPECT_CALL(send_packet_observer_, | 443 EXPECT_CALL(send_packet_observer_, |
406 OnSendPacket(kTransportSequenceNumber, _, _)) | 444 OnSendPacket(kTransportSequenceNumber, _, _)) |
407 .Times(1); | 445 .Times(1); |
408 EXPECT_CALL( | 446 EXPECT_CALL(feedback_observer_, |
409 feedback_observer_, | 447 AddPacket(rtp_sender_->SSRC(), kTransportSequenceNumber, _, |
410 AddPacket(rtp_sender_->SSRC(), kTransportSequenceNumber, | 448 PacedPacketInfo())) |
411 sizeof(kPayloadData) + kGenericHeaderLength, PacedPacketInfo())) | |
412 .Times(1); | 449 .Times(1); |
413 | 450 |
414 SendGenericPayload(); | 451 SendGenericPayload(); |
415 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, | 452 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, |
416 fake_clock_.TimeInMilliseconds(), false, | 453 fake_clock_.TimeInMilliseconds(), false, |
417 PacedPacketInfo()); | 454 PacedPacketInfo()); |
418 | 455 |
419 const auto& packet = transport_.last_sent_packet(); | 456 const auto& packet = transport_.last_sent_packet(); |
420 uint16_t transport_seq_no; | 457 uint16_t transport_seq_no; |
421 EXPECT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); | 458 EXPECT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); |
422 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); | 459 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); |
423 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); | 460 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); |
424 } | 461 } |
425 | 462 |
426 TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) { | 463 TEST_P(RtpSenderTest, TrafficSmoothingWithExtensions) { |
427 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, | 464 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, |
428 kSsrc, kSeqNum, _, _, _)); | 465 kSsrc, kSeqNum, _, _, _)); |
429 EXPECT_CALL(mock_rtc_event_log_, | 466 EXPECT_CALL(mock_rtc_event_log_, |
430 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _, _)); | 467 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _, _)); |
431 | 468 |
432 rtp_sender_->SetStorePacketsStatus(true, 10); | 469 rtp_sender_->SetStorePacketsStatus(true, 10); |
433 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 470 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
434 kRtpExtensionTransmissionTimeOffset, | 471 kRtpExtensionTransmissionTimeOffset, |
435 kTransmissionTimeOffsetExtensionId)); | 472 kTransmissionTimeOffsetExtensionId)); |
436 EXPECT_EQ( | 473 EXPECT_EQ( |
(...skipping 24 matching lines...) Expand all Loading... | |
461 webrtc::RTPHeader rtp_header; | 498 webrtc::RTPHeader rtp_header; |
462 transport_.last_sent_packet().GetHeader(&rtp_header); | 499 transport_.last_sent_packet().GetHeader(&rtp_header); |
463 | 500 |
464 // Verify transmission time offset. | 501 // Verify transmission time offset. |
465 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); | 502 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); |
466 uint64_t expected_send_time = | 503 uint64_t expected_send_time = |
467 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); | 504 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); |
468 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); | 505 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); |
469 } | 506 } |
470 | 507 |
471 TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) { | 508 TEST_P(RtpSenderTest, TrafficSmoothingRetransmits) { |
472 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, | 509 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, |
473 kSsrc, kSeqNum, _, _, _)); | 510 kSsrc, kSeqNum, _, _, _)); |
474 EXPECT_CALL(mock_rtc_event_log_, | 511 EXPECT_CALL(mock_rtc_event_log_, |
475 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _, _)); | 512 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _, _)); |
476 | 513 |
477 rtp_sender_->SetStorePacketsStatus(true, 10); | 514 rtp_sender_->SetStorePacketsStatus(true, 10); |
478 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 515 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
479 kRtpExtensionTransmissionTimeOffset, | 516 kRtpExtensionTransmissionTimeOffset, |
480 kTransmissionTimeOffsetExtensionId)); | 517 kTransmissionTimeOffsetExtensionId)); |
481 EXPECT_EQ( | 518 EXPECT_EQ( |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
514 | 551 |
515 // Verify transmission time offset. | 552 // Verify transmission time offset. |
516 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); | 553 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); |
517 uint64_t expected_send_time = | 554 uint64_t expected_send_time = |
518 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); | 555 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); |
519 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); | 556 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); |
520 } | 557 } |
521 | 558 |
522 // This test sends 1 regular video packet, then 4 padding packets, and then | 559 // This test sends 1 regular video packet, then 4 padding packets, and then |
523 // 1 more regular packet. | 560 // 1 more regular packet. |
524 TEST_F(RtpSenderTest, SendPadding) { | 561 TEST_P(RtpSenderTest, SendPadding) { |
525 // Make all (non-padding) packets go to send queue. | 562 // Make all (non-padding) packets go to send queue. |
526 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, | 563 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, |
527 kSsrc, kSeqNum, _, _, _)); | 564 kSsrc, kSeqNum, _, _, _)); |
528 EXPECT_CALL(mock_rtc_event_log_, | 565 EXPECT_CALL(mock_rtc_event_log_, |
529 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _, _)) | 566 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _, _)) |
530 .Times(1 + 4 + 1); | 567 .Times(1 + 4 + 1); |
531 | 568 |
532 uint16_t seq_num = kSeqNum; | 569 uint16_t seq_num = kSeqNum; |
533 uint32_t timestamp = kTimestamp; | 570 uint32_t timestamp = kTimestamp; |
534 rtp_sender_->SetStorePacketsStatus(true, 10); | 571 rtp_sender_->SetStorePacketsStatus(true, 10); |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
622 // Verify sequence number and timestamp. | 659 // Verify sequence number and timestamp. |
623 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); | 660 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); |
624 EXPECT_EQ(timestamp, rtp_header.timestamp); | 661 EXPECT_EQ(timestamp, rtp_header.timestamp); |
625 // Verify transmission time offset. This packet is sent without delay. | 662 // Verify transmission time offset. This packet is sent without delay. |
626 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); | 663 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); |
627 uint64_t expected_send_time = | 664 uint64_t expected_send_time = |
628 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); | 665 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); |
629 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); | 666 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); |
630 } | 667 } |
631 | 668 |
632 TEST_F(RtpSenderTest, OnSendPacketUpdated) { | 669 TEST_P(RtpSenderTest, OnSendPacketUpdated) { |
633 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 670 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
634 kRtpExtensionTransportSequenceNumber, | 671 kRtpExtensionTransportSequenceNumber, |
635 kTransportSequenceNumberExtensionId)); | 672 kTransportSequenceNumberExtensionId)); |
636 rtp_sender_->SetStorePacketsStatus(true, 10); | 673 rtp_sender_->SetStorePacketsStatus(true, 10); |
637 | 674 |
638 EXPECT_CALL(send_packet_observer_, | 675 EXPECT_CALL(send_packet_observer_, |
639 OnSendPacket(kTransportSequenceNumber, _, _)) | 676 OnSendPacket(kTransportSequenceNumber, _, _)) |
640 .Times(1); | 677 .Times(1); |
641 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 678 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
642 .WillOnce(testing::Return(kTransportSequenceNumber)); | 679 .WillOnce(testing::Return(kTransportSequenceNumber)); |
643 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)) | 680 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)) |
644 .Times(1); | 681 .Times(1); |
645 | 682 |
646 SendGenericPayload(); // Packet passed to pacer. | 683 SendGenericPayload(); // Packet passed to pacer. |
647 const bool kIsRetransmit = false; | 684 const bool kIsRetransmit = false; |
648 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, | 685 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, |
649 fake_clock_.TimeInMilliseconds(), kIsRetransmit, | 686 fake_clock_.TimeInMilliseconds(), kIsRetransmit, |
650 PacedPacketInfo()); | 687 PacedPacketInfo()); |
651 EXPECT_EQ(1, transport_.packets_sent()); | 688 EXPECT_EQ(1, transport_.packets_sent()); |
652 } | 689 } |
653 | 690 |
654 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedForRetransmits) { | 691 TEST_P(RtpSenderTest, OnSendPacketNotUpdatedForRetransmits) { |
655 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 692 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
656 kRtpExtensionTransportSequenceNumber, | 693 kRtpExtensionTransportSequenceNumber, |
657 kTransportSequenceNumberExtensionId)); | 694 kTransportSequenceNumberExtensionId)); |
658 rtp_sender_->SetStorePacketsStatus(true, 10); | 695 rtp_sender_->SetStorePacketsStatus(true, 10); |
659 | 696 |
660 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); | 697 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); |
661 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 698 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
662 .WillOnce(testing::Return(kTransportSequenceNumber)); | 699 .WillOnce(testing::Return(kTransportSequenceNumber)); |
663 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)) | 700 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)) |
664 .Times(1); | 701 .Times(1); |
665 | 702 |
666 SendGenericPayload(); // Packet passed to pacer. | 703 SendGenericPayload(); // Packet passed to pacer. |
667 const bool kIsRetransmit = true; | 704 const bool kIsRetransmit = true; |
668 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, | 705 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, |
669 fake_clock_.TimeInMilliseconds(), kIsRetransmit, | 706 fake_clock_.TimeInMilliseconds(), kIsRetransmit, |
670 PacedPacketInfo()); | 707 PacedPacketInfo()); |
671 EXPECT_EQ(1, transport_.packets_sent()); | 708 EXPECT_EQ(1, transport_.packets_sent()); |
672 } | 709 } |
673 | 710 |
674 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) { | 711 TEST_P(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) { |
675 rtp_sender_.reset(new RTPSender( | 712 rtp_sender_.reset(new RTPSender( |
676 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr, | 713 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr, |
677 nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr, | 714 nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr, |
678 nullptr, nullptr, &send_packet_observer_, &retransmission_rate_limiter_, | 715 nullptr, nullptr, &send_packet_observer_, &retransmission_rate_limiter_, |
679 nullptr)); | 716 nullptr)); |
680 rtp_sender_->SetSequenceNumber(kSeqNum); | 717 rtp_sender_->SetSequenceNumber(kSeqNum); |
681 rtp_sender_->SetSSRC(kSsrc); | 718 rtp_sender_->SetSSRC(kSsrc); |
682 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 719 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
683 kRtpExtensionTransportSequenceNumber, | 720 kRtpExtensionTransportSequenceNumber, |
684 kTransportSequenceNumberExtensionId)); | 721 kTransportSequenceNumberExtensionId)); |
685 rtp_sender_->SetSequenceNumber(kSeqNum); | 722 rtp_sender_->SetSequenceNumber(kSeqNum); |
686 rtp_sender_->SetStorePacketsStatus(true, 10); | 723 rtp_sender_->SetStorePacketsStatus(true, 10); |
687 | 724 |
688 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); | 725 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); |
689 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)) | 726 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)) |
690 .Times(1); | 727 .Times(1); |
691 | 728 |
692 SendGenericPayload(); // Packet passed to pacer. | 729 SendGenericPayload(); // Packet passed to pacer. |
693 const bool kIsRetransmit = false; | 730 const bool kIsRetransmit = false; |
694 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, | 731 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, |
695 fake_clock_.TimeInMilliseconds(), kIsRetransmit, | 732 fake_clock_.TimeInMilliseconds(), kIsRetransmit, |
696 PacedPacketInfo()); | 733 PacedPacketInfo()); |
697 EXPECT_EQ(1, transport_.packets_sent()); | 734 EXPECT_EQ(1, transport_.packets_sent()); |
698 } | 735 } |
699 | 736 |
700 TEST_F(RtpSenderTest, SendRedundantPayloads) { | 737 TEST_P(RtpSenderTest, SendRedundantPayloads) { |
701 MockTransport transport; | 738 MockTransport transport; |
702 rtp_sender_.reset(new RTPSender( | 739 rtp_sender_.reset(new RTPSender( |
703 false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, nullptr, | 740 false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, nullptr, |
704 nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, nullptr, | 741 nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, nullptr, |
705 &retransmission_rate_limiter_, nullptr)); | 742 &retransmission_rate_limiter_, nullptr)); |
706 rtp_sender_->SetSequenceNumber(kSeqNum); | 743 rtp_sender_->SetSequenceNumber(kSeqNum); |
707 rtp_sender_->SetSSRC(kSsrc); | 744 rtp_sender_->SetSSRC(kSsrc); |
708 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload); | 745 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload); |
709 | 746 |
710 uint16_t seq_num = kSeqNum; | 747 uint16_t seq_num = kSeqNum; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
759 EXPECT_CALL(transport, SendRtp(_, kPayloadSizes[kNumPayloadSizes - 1] + | 796 EXPECT_CALL(transport, SendRtp(_, kPayloadSizes[kNumPayloadSizes - 1] + |
760 rtp_header_len + kRtxHeaderSize, | 797 rtp_header_len + kRtxHeaderSize, |
761 _)) | 798 _)) |
762 .WillOnce(testing::Return(true)); | 799 .WillOnce(testing::Return(true)); |
763 EXPECT_CALL(transport, SendRtp(_, kMaxPaddingSize + rtp_header_len, _)) | 800 EXPECT_CALL(transport, SendRtp(_, kMaxPaddingSize + rtp_header_len, _)) |
764 .WillOnce(testing::Return(true)); | 801 .WillOnce(testing::Return(true)); |
765 EXPECT_EQ(kPayloadSizes[kNumPayloadSizes - 1] + kMaxPaddingSize, | 802 EXPECT_EQ(kPayloadSizes[kNumPayloadSizes - 1] + kMaxPaddingSize, |
766 rtp_sender_->TimeToSendPadding(999, PacedPacketInfo())); | 803 rtp_sender_->TimeToSendPadding(999, PacedPacketInfo())); |
767 } | 804 } |
768 | 805 |
769 TEST_F(RtpSenderTestWithoutPacer, SendGenericVideo) { | 806 TEST_P(RtpSenderTestWithoutPacer, SendGenericVideo) { |
770 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; | 807 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; |
771 const uint8_t payload_type = 127; | 808 const uint8_t payload_type = 127; |
772 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, | 809 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, |
773 0, 1500)); | 810 0, 1500)); |
774 uint8_t payload[] = {47, 11, 32, 93, 89}; | 811 uint8_t payload[] = {47, 11, 32, 93, 89}; |
775 | 812 |
776 // Send keyframe | 813 // Send keyframe |
777 ASSERT_TRUE(rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, | 814 ASSERT_TRUE(rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, |
778 4321, payload, sizeof(payload), | 815 4321, payload, sizeof(payload), |
779 nullptr, nullptr, nullptr)); | 816 nullptr, nullptr, nullptr)); |
(...skipping 13 matching lines...) Expand all Loading... | |
793 kVideoFrameDelta, payload_type, 1234, 4321, payload, sizeof(payload), | 830 kVideoFrameDelta, payload_type, 1234, 4321, payload, sizeof(payload), |
794 nullptr, nullptr, nullptr)); | 831 nullptr, nullptr, nullptr)); |
795 | 832 |
796 sent_payload = transport_.last_sent_packet().payload(); | 833 sent_payload = transport_.last_sent_packet().payload(); |
797 generic_header = sent_payload[0]; | 834 generic_header = sent_payload[0]; |
798 EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); | 835 EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); |
799 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); | 836 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); |
800 EXPECT_THAT(sent_payload.subview(1), ElementsAreArray(payload)); | 837 EXPECT_THAT(sent_payload.subview(1), ElementsAreArray(payload)); |
801 } | 838 } |
802 | 839 |
803 TEST_F(RtpSenderTest, SendFlexfecPackets) { | 840 TEST_P(RtpSenderTest, SendFlexfecPackets) { |
804 constexpr int kMediaPayloadType = 127; | 841 constexpr int kMediaPayloadType = 127; |
805 constexpr int kFlexfecPayloadType = 118; | 842 constexpr int kFlexfecPayloadType = 118; |
806 constexpr uint32_t kMediaSsrc = 1234; | 843 constexpr uint32_t kMediaSsrc = 1234; |
807 constexpr uint32_t kFlexfecSsrc = 5678; | 844 constexpr uint32_t kFlexfecSsrc = 5678; |
808 const std::vector<RtpExtension> kNoRtpExtensions; | 845 const std::vector<RtpExtension> kNoRtpExtensions; |
809 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 846 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
810 kNoRtpExtensions, &fake_clock_); | 847 kNoRtpExtensions, &fake_clock_); |
811 | 848 |
812 // Reset |rtp_sender_| to use FlexFEC. | 849 // Reset |rtp_sender_| to use FlexFEC. |
813 rtp_sender_.reset(new RTPSender( | 850 rtp_sender_.reset(new RTPSender( |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
848 const RtpPacketReceived& media_packet = transport_.sent_packets_[0]; | 885 const RtpPacketReceived& media_packet = transport_.sent_packets_[0]; |
849 EXPECT_EQ(kMediaPayloadType, media_packet.PayloadType()); | 886 EXPECT_EQ(kMediaPayloadType, media_packet.PayloadType()); |
850 EXPECT_EQ(kSeqNum, media_packet.SequenceNumber()); | 887 EXPECT_EQ(kSeqNum, media_packet.SequenceNumber()); |
851 EXPECT_EQ(kMediaSsrc, media_packet.Ssrc()); | 888 EXPECT_EQ(kMediaSsrc, media_packet.Ssrc()); |
852 const RtpPacketReceived& flexfec_packet = transport_.sent_packets_[1]; | 889 const RtpPacketReceived& flexfec_packet = transport_.sent_packets_[1]; |
853 EXPECT_EQ(kFlexfecPayloadType, flexfec_packet.PayloadType()); | 890 EXPECT_EQ(kFlexfecPayloadType, flexfec_packet.PayloadType()); |
854 EXPECT_EQ(flexfec_seq_num, flexfec_packet.SequenceNumber()); | 891 EXPECT_EQ(flexfec_seq_num, flexfec_packet.SequenceNumber()); |
855 EXPECT_EQ(kFlexfecSsrc, flexfec_packet.Ssrc()); | 892 EXPECT_EQ(kFlexfecSsrc, flexfec_packet.Ssrc()); |
856 } | 893 } |
857 | 894 |
858 TEST_F(RtpSenderTestWithoutPacer, SendFlexfecPackets) { | 895 TEST_P(RtpSenderTestWithoutPacer, SendFlexfecPackets) { |
859 constexpr int kMediaPayloadType = 127; | 896 constexpr int kMediaPayloadType = 127; |
860 constexpr int kFlexfecPayloadType = 118; | 897 constexpr int kFlexfecPayloadType = 118; |
861 constexpr uint32_t kMediaSsrc = 1234; | 898 constexpr uint32_t kMediaSsrc = 1234; |
862 constexpr uint32_t kFlexfecSsrc = 5678; | 899 constexpr uint32_t kFlexfecSsrc = 5678; |
863 const std::vector<RtpExtension> kNoRtpExtensions; | 900 const std::vector<RtpExtension> kNoRtpExtensions; |
864 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 901 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
865 kNoRtpExtensions, &fake_clock_); | 902 kNoRtpExtensions, &fake_clock_); |
866 | 903 |
867 // Reset |rtp_sender_| to use FlexFEC. | 904 // Reset |rtp_sender_| to use FlexFEC. |
868 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, | 905 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, |
(...skipping 18 matching lines...) Expand all Loading... | |
887 SendGenericPayload(); | 924 SendGenericPayload(); |
888 ASSERT_EQ(2, transport_.packets_sent()); | 925 ASSERT_EQ(2, transport_.packets_sent()); |
889 const RtpPacketReceived& media_packet = transport_.sent_packets_[0]; | 926 const RtpPacketReceived& media_packet = transport_.sent_packets_[0]; |
890 EXPECT_EQ(kMediaPayloadType, media_packet.PayloadType()); | 927 EXPECT_EQ(kMediaPayloadType, media_packet.PayloadType()); |
891 EXPECT_EQ(kMediaSsrc, media_packet.Ssrc()); | 928 EXPECT_EQ(kMediaSsrc, media_packet.Ssrc()); |
892 const RtpPacketReceived& flexfec_packet = transport_.sent_packets_[1]; | 929 const RtpPacketReceived& flexfec_packet = transport_.sent_packets_[1]; |
893 EXPECT_EQ(kFlexfecPayloadType, flexfec_packet.PayloadType()); | 930 EXPECT_EQ(kFlexfecPayloadType, flexfec_packet.PayloadType()); |
894 EXPECT_EQ(kFlexfecSsrc, flexfec_packet.Ssrc()); | 931 EXPECT_EQ(kFlexfecSsrc, flexfec_packet.Ssrc()); |
895 } | 932 } |
896 | 933 |
897 TEST_F(RtpSenderTest, FecOverheadRate) { | 934 TEST_P(RtpSenderTest, FecOverheadRate) { |
898 constexpr int kMediaPayloadType = 127; | 935 constexpr int kMediaPayloadType = 127; |
899 constexpr int kFlexfecPayloadType = 118; | 936 constexpr int kFlexfecPayloadType = 118; |
900 constexpr uint32_t kMediaSsrc = 1234; | 937 constexpr uint32_t kMediaSsrc = 1234; |
901 constexpr uint32_t kFlexfecSsrc = 5678; | 938 constexpr uint32_t kFlexfecSsrc = 5678; |
902 const std::vector<RtpExtension> kNoRtpExtensions; | 939 const std::vector<RtpExtension> kNoRtpExtensions; |
903 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 940 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
904 kNoRtpExtensions, &fake_clock_); | 941 kNoRtpExtensions, &fake_clock_); |
905 | 942 |
906 // Reset |rtp_sender_| to use FlexFEC. | 943 // Reset |rtp_sender_| to use FlexFEC. |
907 rtp_sender_.reset(new RTPSender( | 944 rtp_sender_.reset(new RTPSender( |
(...skipping 25 matching lines...) Expand all Loading... | |
933 constexpr size_t kFlexfecHeaderLength = 20; | 970 constexpr size_t kFlexfecHeaderLength = 20; |
934 constexpr size_t kGenericCodecHeaderLength = 1; | 971 constexpr size_t kGenericCodecHeaderLength = 1; |
935 constexpr size_t kPayloadLength = sizeof(kPayloadData); | 972 constexpr size_t kPayloadLength = sizeof(kPayloadData); |
936 constexpr size_t kPacketLength = kRtpHeaderLength + kFlexfecHeaderLength + | 973 constexpr size_t kPacketLength = kRtpHeaderLength + kFlexfecHeaderLength + |
937 kGenericCodecHeaderLength + kPayloadLength; | 974 kGenericCodecHeaderLength + kPayloadLength; |
938 EXPECT_NEAR(kNumFecPackets * kPacketLength * 8 / | 975 EXPECT_NEAR(kNumFecPackets * kPacketLength * 8 / |
939 (kNumFecPackets * kTimeBetweenPacketsMs / 1000.0f), | 976 (kNumFecPackets * kTimeBetweenPacketsMs / 1000.0f), |
940 rtp_sender_->FecOverheadRate(), 500); | 977 rtp_sender_->FecOverheadRate(), 500); |
941 } | 978 } |
942 | 979 |
943 TEST_F(RtpSenderTest, FrameCountCallbacks) { | 980 TEST_P(RtpSenderTest, FrameCountCallbacks) { |
944 class TestCallback : public FrameCountObserver { | 981 class TestCallback : public FrameCountObserver { |
945 public: | 982 public: |
946 TestCallback() : FrameCountObserver(), num_calls_(0), ssrc_(0) {} | 983 TestCallback() : FrameCountObserver(), num_calls_(0), ssrc_(0) {} |
947 virtual ~TestCallback() {} | 984 virtual ~TestCallback() {} |
948 | 985 |
949 void FrameCountUpdated(const FrameCounts& frame_counts, | 986 void FrameCountUpdated(const FrameCounts& frame_counts, |
950 uint32_t ssrc) override { | 987 uint32_t ssrc) override { |
951 ++num_calls_; | 988 ++num_calls_; |
952 ssrc_ = ssrc; | 989 ssrc_ = ssrc; |
953 frame_counts_ = frame_counts; | 990 frame_counts_ = frame_counts; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
988 nullptr, nullptr, nullptr)); | 1025 nullptr, nullptr, nullptr)); |
989 | 1026 |
990 EXPECT_EQ(2U, callback.num_calls_); | 1027 EXPECT_EQ(2U, callback.num_calls_); |
991 EXPECT_EQ(ssrc, callback.ssrc_); | 1028 EXPECT_EQ(ssrc, callback.ssrc_); |
992 EXPECT_EQ(1, callback.frame_counts_.key_frames); | 1029 EXPECT_EQ(1, callback.frame_counts_.key_frames); |
993 EXPECT_EQ(1, callback.frame_counts_.delta_frames); | 1030 EXPECT_EQ(1, callback.frame_counts_.delta_frames); |
994 | 1031 |
995 rtp_sender_.reset(); | 1032 rtp_sender_.reset(); |
996 } | 1033 } |
997 | 1034 |
998 TEST_F(RtpSenderTest, BitrateCallbacks) { | 1035 TEST_P(RtpSenderTest, BitrateCallbacks) { |
999 class TestCallback : public BitrateStatisticsObserver { | 1036 class TestCallback : public BitrateStatisticsObserver { |
1000 public: | 1037 public: |
1001 TestCallback() | 1038 TestCallback() |
1002 : BitrateStatisticsObserver(), | 1039 : BitrateStatisticsObserver(), |
1003 num_calls_(0), | 1040 num_calls_(0), |
1004 ssrc_(0), | 1041 ssrc_(0), |
1005 total_bitrate_(0), | 1042 total_bitrate_(0), |
1006 retransmit_bitrate_(0) {} | 1043 retransmit_bitrate_(0) {} |
1007 virtual ~TestCallback() {} | 1044 virtual ~TestCallback() {} |
1008 | 1045 |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1081 payload_ = kAudioPayload; | 1118 payload_ = kAudioPayload; |
1082 rtp_sender_.reset(new RTPSender(true, &fake_clock_, &transport_, nullptr, | 1119 rtp_sender_.reset(new RTPSender(true, &fake_clock_, &transport_, nullptr, |
1083 nullptr, nullptr, nullptr, nullptr, nullptr, | 1120 nullptr, nullptr, nullptr, nullptr, nullptr, |
1084 nullptr, nullptr, nullptr, | 1121 nullptr, nullptr, nullptr, |
1085 &retransmission_rate_limiter_, nullptr)); | 1122 &retransmission_rate_limiter_, nullptr)); |
1086 rtp_sender_->SetSSRC(kSsrc); | 1123 rtp_sender_->SetSSRC(kSsrc); |
1087 rtp_sender_->SetSequenceNumber(kSeqNum); | 1124 rtp_sender_->SetSequenceNumber(kSeqNum); |
1088 } | 1125 } |
1089 }; | 1126 }; |
1090 | 1127 |
1091 TEST_F(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) { | 1128 TEST_P(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) { |
1092 class TestCallback : public StreamDataCountersCallback { | 1129 class TestCallback : public StreamDataCountersCallback { |
1093 public: | 1130 public: |
1094 TestCallback() : StreamDataCountersCallback(), ssrc_(0), counters_() {} | 1131 TestCallback() : StreamDataCountersCallback(), ssrc_(0), counters_() {} |
1095 virtual ~TestCallback() {} | 1132 virtual ~TestCallback() {} |
1096 | 1133 |
1097 void DataCountersUpdated(const StreamDataCounters& counters, | 1134 void DataCountersUpdated(const StreamDataCounters& counters, |
1098 uint32_t ssrc) override { | 1135 uint32_t ssrc) override { |
1099 ssrc_ = ssrc; | 1136 ssrc_ = ssrc; |
1100 counters_ = counters; | 1137 counters_ = counters; |
1101 } | 1138 } |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1179 sizeof(payload), nullptr, nullptr, nullptr)); | 1216 sizeof(payload), nullptr, nullptr, nullptr)); |
1180 expected.transmitted.payload_bytes = 40; | 1217 expected.transmitted.payload_bytes = 40; |
1181 expected.transmitted.header_bytes = 60; | 1218 expected.transmitted.header_bytes = 60; |
1182 expected.transmitted.packets = 5; | 1219 expected.transmitted.packets = 5; |
1183 expected.fec.packets = 1; | 1220 expected.fec.packets = 1; |
1184 callback.Matches(ssrc, expected); | 1221 callback.Matches(ssrc, expected); |
1185 | 1222 |
1186 rtp_sender_->RegisterRtpStatisticsCallback(nullptr); | 1223 rtp_sender_->RegisterRtpStatisticsCallback(nullptr); |
1187 } | 1224 } |
1188 | 1225 |
1189 TEST_F(RtpSenderAudioTest, SendAudio) { | 1226 TEST_P(RtpSenderAudioTest, SendAudio) { |
1190 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; | 1227 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; |
1191 const uint8_t payload_type = 127; | 1228 const uint8_t payload_type = 127; |
1192 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, | 1229 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, |
1193 0, 1500)); | 1230 0, 1500)); |
1194 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1231 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1195 | 1232 |
1196 ASSERT_TRUE(rtp_sender_->SendOutgoingData( | 1233 ASSERT_TRUE(rtp_sender_->SendOutgoingData( |
1197 kAudioFrameCN, payload_type, 1234, 4321, payload, | 1234 kAudioFrameCN, payload_type, 1234, 4321, payload, |
1198 sizeof(payload), nullptr, nullptr, nullptr)); | 1235 sizeof(payload), nullptr, nullptr, nullptr)); |
1199 | 1236 |
1200 auto sent_payload = transport_.last_sent_packet().payload(); | 1237 auto sent_payload = transport_.last_sent_packet().payload(); |
1201 EXPECT_THAT(sent_payload, ElementsAreArray(payload)); | 1238 EXPECT_THAT(sent_payload, ElementsAreArray(payload)); |
1202 } | 1239 } |
1203 | 1240 |
1204 TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) { | 1241 TEST_P(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) { |
1205 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel)); | 1242 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel)); |
1206 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, | 1243 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, |
1207 kAudioLevelExtensionId)); | 1244 kAudioLevelExtensionId)); |
1208 | 1245 |
1209 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; | 1246 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; |
1210 const uint8_t payload_type = 127; | 1247 const uint8_t payload_type = 127; |
1211 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, | 1248 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, |
1212 0, 1500)); | 1249 0, 1500)); |
1213 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1250 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1214 | 1251 |
(...skipping 11 matching lines...) Expand all Loading... | |
1226 EXPECT_EQ(kAudioLevel, audio_level); | 1263 EXPECT_EQ(kAudioLevel, audio_level); |
1227 EXPECT_FALSE(voice_activity); | 1264 EXPECT_FALSE(voice_activity); |
1228 } | 1265 } |
1229 | 1266 |
1230 // As RFC4733, named telephone events are carried as part of the audio stream | 1267 // As RFC4733, named telephone events are carried as part of the audio stream |
1231 // and must use the same sequence number and timestamp base as the regular | 1268 // and must use the same sequence number and timestamp base as the regular |
1232 // audio channel. | 1269 // audio channel. |
1233 // This test checks the marker bit for the first packet and the consequent | 1270 // This test checks the marker bit for the first packet and the consequent |
1234 // packets of the same telephone event. Since it is specifically for DTMF | 1271 // packets of the same telephone event. Since it is specifically for DTMF |
1235 // events, ignoring audio packets and sending kEmptyFrame instead of those. | 1272 // events, ignoring audio packets and sending kEmptyFrame instead of those. |
1236 TEST_F(RtpSenderAudioTest, CheckMarkerBitForTelephoneEvents) { | 1273 TEST_P(RtpSenderAudioTest, CheckMarkerBitForTelephoneEvents) { |
1237 const char* kDtmfPayloadName = "telephone-event"; | 1274 const char* kDtmfPayloadName = "telephone-event"; |
1238 const uint32_t kPayloadFrequency = 8000; | 1275 const uint32_t kPayloadFrequency = 8000; |
1239 const uint8_t kPayloadType = 126; | 1276 const uint8_t kPayloadType = 126; |
1240 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kDtmfPayloadName, kPayloadType, | 1277 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kDtmfPayloadName, kPayloadType, |
1241 kPayloadFrequency, 0, 0)); | 1278 kPayloadFrequency, 0, 0)); |
1242 // For Telephone events, payload is not added to the registered payload list, | 1279 // For Telephone events, payload is not added to the registered payload list, |
1243 // it will register only the payload used for audio stream. | 1280 // it will register only the payload used for audio stream. |
1244 // Registering the payload again for audio stream with different payload name. | 1281 // Registering the payload again for audio stream with different payload name. |
1245 const char* kPayloadName = "payload_name"; | 1282 const char* kPayloadName = "payload_name"; |
1246 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, | 1283 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, |
(...skipping 17 matching lines...) Expand all Loading... | |
1264 // Marker Bit should be set to 1 for first packet. | 1301 // Marker Bit should be set to 1 for first packet. |
1265 EXPECT_TRUE(transport_.last_sent_packet().Marker()); | 1302 EXPECT_TRUE(transport_.last_sent_packet().Marker()); |
1266 | 1303 |
1267 ASSERT_TRUE(rtp_sender_->SendOutgoingData( | 1304 ASSERT_TRUE(rtp_sender_->SendOutgoingData( |
1268 kEmptyFrame, kPayloadType, capture_time_ms + 4000, 0, | 1305 kEmptyFrame, kPayloadType, capture_time_ms + 4000, 0, |
1269 nullptr, 0, nullptr, nullptr, nullptr)); | 1306 nullptr, 0, nullptr, nullptr, nullptr)); |
1270 // Marker Bit should be set to 0 for rest of the packets. | 1307 // Marker Bit should be set to 0 for rest of the packets. |
1271 EXPECT_FALSE(transport_.last_sent_packet().Marker()); | 1308 EXPECT_FALSE(transport_.last_sent_packet().Marker()); |
1272 } | 1309 } |
1273 | 1310 |
1274 TEST_F(RtpSenderTestWithoutPacer, BytesReportedCorrectly) { | 1311 TEST_P(RtpSenderTestWithoutPacer, BytesReportedCorrectly) { |
1275 const char* kPayloadName = "GENERIC"; | 1312 const char* kPayloadName = "GENERIC"; |
1276 const uint8_t kPayloadType = 127; | 1313 const uint8_t kPayloadType = 127; |
1277 rtp_sender_->SetSSRC(1234); | 1314 rtp_sender_->SetSSRC(1234); |
1278 rtp_sender_->SetRtxSsrc(4321); | 1315 rtp_sender_->SetRtxSsrc(4321); |
1279 rtp_sender_->SetRtxPayloadType(kPayloadType - 1, kPayloadType); | 1316 rtp_sender_->SetRtxPayloadType(kPayloadType - 1, kPayloadType); |
1280 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); | 1317 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); |
1281 | 1318 |
1282 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000, | 1319 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000, |
1283 0, 1500)); | 1320 0, 1500)); |
1284 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1321 uint8_t payload[] = {47, 11, 32, 93, 89}; |
(...skipping 26 matching lines...) Expand all Loading... | |
1311 EXPECT_EQ(rtx_stats.transmitted.TotalBytes(), | 1348 EXPECT_EQ(rtx_stats.transmitted.TotalBytes(), |
1312 rtx_stats.transmitted.payload_bytes + | 1349 rtx_stats.transmitted.payload_bytes + |
1313 rtx_stats.transmitted.header_bytes + | 1350 rtx_stats.transmitted.header_bytes + |
1314 rtx_stats.transmitted.padding_bytes); | 1351 rtx_stats.transmitted.padding_bytes); |
1315 | 1352 |
1316 EXPECT_EQ( | 1353 EXPECT_EQ( |
1317 transport_.total_bytes_sent_, | 1354 transport_.total_bytes_sent_, |
1318 rtp_stats.transmitted.TotalBytes() + rtx_stats.transmitted.TotalBytes()); | 1355 rtp_stats.transmitted.TotalBytes() + rtx_stats.transmitted.TotalBytes()); |
1319 } | 1356 } |
1320 | 1357 |
1321 TEST_F(RtpSenderTestWithoutPacer, RespectsNackBitrateLimit) { | 1358 TEST_P(RtpSenderTestWithoutPacer, RespectsNackBitrateLimit) { |
1322 const int32_t kPacketSize = 1400; | 1359 const int32_t kPacketSize = 1400; |
1323 const int32_t kNumPackets = 30; | 1360 const int32_t kNumPackets = 30; |
1324 | 1361 |
1325 retransmission_rate_limiter_.SetMaxRate(kPacketSize * kNumPackets * 8); | 1362 retransmission_rate_limiter_.SetMaxRate(kPacketSize * kNumPackets * 8); |
1326 | 1363 |
1327 rtp_sender_->SetStorePacketsStatus(true, kNumPackets); | 1364 rtp_sender_->SetStorePacketsStatus(true, kNumPackets); |
1328 const uint16_t kStartSequenceNumber = rtp_sender_->SequenceNumber(); | 1365 const uint16_t kStartSequenceNumber = rtp_sender_->SequenceNumber(); |
1329 std::vector<uint16_t> sequence_numbers; | 1366 std::vector<uint16_t> sequence_numbers; |
1330 for (int32_t i = 0; i < kNumPackets; ++i) { | 1367 for (int32_t i = 0; i < kNumPackets; ++i) { |
1331 sequence_numbers.push_back(kStartSequenceNumber + i); | 1368 sequence_numbers.push_back(kStartSequenceNumber + i); |
(...skipping 11 matching lines...) Expand all Loading... | |
1343 EXPECT_EQ(kNumPackets * 2, transport_.packets_sent()); | 1380 EXPECT_EQ(kNumPackets * 2, transport_.packets_sent()); |
1344 | 1381 |
1345 // Must be at least 5ms in between retransmission attempts. | 1382 // Must be at least 5ms in between retransmission attempts. |
1346 fake_clock_.AdvanceTimeMilliseconds(5); | 1383 fake_clock_.AdvanceTimeMilliseconds(5); |
1347 | 1384 |
1348 // Resending should not work, bandwidth exceeded. | 1385 // Resending should not work, bandwidth exceeded. |
1349 rtp_sender_->OnReceivedNack(sequence_numbers, 0); | 1386 rtp_sender_->OnReceivedNack(sequence_numbers, 0); |
1350 EXPECT_EQ(kNumPackets * 2, transport_.packets_sent()); | 1387 EXPECT_EQ(kNumPackets * 2, transport_.packets_sent()); |
1351 } | 1388 } |
1352 | 1389 |
1353 TEST_F(RtpSenderVideoTest, KeyFrameHasCVO) { | 1390 TEST_P(RtpSenderVideoTest, KeyFrameHasCVO) { |
1354 uint8_t kFrame[kMaxPacketLength]; | 1391 uint8_t kFrame[kMaxPacketLength]; |
1355 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 1392 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
1356 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); | 1393 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); |
1357 | 1394 |
1358 RTPVideoHeader hdr = {0}; | 1395 RTPVideoHeader hdr = {0}; |
1359 hdr.rotation = kVideoRotation_0; | 1396 hdr.rotation = kVideoRotation_0; |
1360 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload, | 1397 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload, |
1361 kTimestamp, 0, kFrame, sizeof(kFrame), nullptr, | 1398 kTimestamp, 0, kFrame, sizeof(kFrame), nullptr, |
1362 &hdr); | 1399 &hdr); |
1363 | 1400 |
1364 VideoRotation rotation; | 1401 VideoRotation rotation; |
1365 EXPECT_TRUE( | 1402 EXPECT_TRUE( |
1366 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation)); | 1403 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation)); |
1367 EXPECT_EQ(kVideoRotation_0, rotation); | 1404 EXPECT_EQ(kVideoRotation_0, rotation); |
1368 } | 1405 } |
1369 | 1406 |
1370 TEST_F(RtpSenderVideoTest, DeltaFrameHasCVOWhenChanged) { | 1407 TEST_P(RtpSenderVideoTest, DeltaFrameHasCVOWhenChanged) { |
1371 uint8_t kFrame[kMaxPacketLength]; | 1408 uint8_t kFrame[kMaxPacketLength]; |
1372 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 1409 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
1373 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); | 1410 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); |
1374 | 1411 |
1375 RTPVideoHeader hdr = {0}; | 1412 RTPVideoHeader hdr = {0}; |
1376 hdr.rotation = kVideoRotation_90; | 1413 hdr.rotation = kVideoRotation_90; |
1377 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, | 1414 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, |
1378 kPayload, kTimestamp, 0, kFrame, | 1415 kPayload, kTimestamp, 0, kFrame, |
1379 sizeof(kFrame), nullptr, &hdr)); | 1416 sizeof(kFrame), nullptr, &hdr)); |
1380 | 1417 |
1381 hdr.rotation = kVideoRotation_0; | 1418 hdr.rotation = kVideoRotation_0; |
1382 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameDelta, | 1419 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameDelta, |
1383 kPayload, kTimestamp + 1, 0, kFrame, | 1420 kPayload, kTimestamp + 1, 0, kFrame, |
1384 sizeof(kFrame), nullptr, &hdr)); | 1421 sizeof(kFrame), nullptr, &hdr)); |
1385 | 1422 |
1386 VideoRotation rotation; | 1423 VideoRotation rotation; |
1387 EXPECT_TRUE( | 1424 EXPECT_TRUE( |
1388 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation)); | 1425 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation)); |
1389 EXPECT_EQ(kVideoRotation_0, rotation); | 1426 EXPECT_EQ(kVideoRotation_0, rotation); |
1390 } | 1427 } |
1391 | 1428 |
1392 TEST_F(RtpSenderVideoTest, DeltaFrameHasCVOWhenNonZero) { | 1429 TEST_P(RtpSenderVideoTest, DeltaFrameHasCVOWhenNonZero) { |
1393 uint8_t kFrame[kMaxPacketLength]; | 1430 uint8_t kFrame[kMaxPacketLength]; |
1394 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 1431 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
1395 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); | 1432 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); |
1396 | 1433 |
1397 RTPVideoHeader hdr = {0}; | 1434 RTPVideoHeader hdr = {0}; |
1398 hdr.rotation = kVideoRotation_90; | 1435 hdr.rotation = kVideoRotation_90; |
1399 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, | 1436 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, |
1400 kPayload, kTimestamp, 0, kFrame, | 1437 kPayload, kTimestamp, 0, kFrame, |
1401 sizeof(kFrame), nullptr, &hdr)); | 1438 sizeof(kFrame), nullptr, &hdr)); |
1402 | 1439 |
1403 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameDelta, | 1440 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameDelta, |
1404 kPayload, kTimestamp + 1, 0, kFrame, | 1441 kPayload, kTimestamp + 1, 0, kFrame, |
1405 sizeof(kFrame), nullptr, &hdr)); | 1442 sizeof(kFrame), nullptr, &hdr)); |
1406 | 1443 |
1407 VideoRotation rotation; | 1444 VideoRotation rotation; |
1408 EXPECT_TRUE( | 1445 EXPECT_TRUE( |
1409 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation)); | 1446 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation)); |
1410 EXPECT_EQ(kVideoRotation_90, rotation); | 1447 EXPECT_EQ(kVideoRotation_90, rotation); |
1411 } | 1448 } |
1412 | 1449 |
1413 // Make sure rotation is parsed correctly when the Camera (C) and Flip (F) bits | 1450 // Make sure rotation is parsed correctly when the Camera (C) and Flip (F) bits |
1414 // are set in the CVO byte. | 1451 // are set in the CVO byte. |
1415 TEST_F(RtpSenderVideoTest, SendVideoWithCameraAndFlipCVO) { | 1452 TEST_P(RtpSenderVideoTest, SendVideoWithCameraAndFlipCVO) { |
1416 // Test extracting rotation when Camera (C) and Flip (F) bits are zero. | 1453 // Test extracting rotation when Camera (C) and Flip (F) bits are zero. |
1417 EXPECT_EQ(kVideoRotation_0, ConvertCVOByteToVideoRotation(0)); | 1454 EXPECT_EQ(kVideoRotation_0, ConvertCVOByteToVideoRotation(0)); |
1418 EXPECT_EQ(kVideoRotation_90, ConvertCVOByteToVideoRotation(1)); | 1455 EXPECT_EQ(kVideoRotation_90, ConvertCVOByteToVideoRotation(1)); |
1419 EXPECT_EQ(kVideoRotation_180, ConvertCVOByteToVideoRotation(2)); | 1456 EXPECT_EQ(kVideoRotation_180, ConvertCVOByteToVideoRotation(2)); |
1420 EXPECT_EQ(kVideoRotation_270, ConvertCVOByteToVideoRotation(3)); | 1457 EXPECT_EQ(kVideoRotation_270, ConvertCVOByteToVideoRotation(3)); |
1421 // Test extracting rotation when Camera (C) and Flip (F) bits are set. | 1458 // Test extracting rotation when Camera (C) and Flip (F) bits are set. |
1422 const int flip_bit = 1 << 2; | 1459 const int flip_bit = 1 << 2; |
1423 const int camera_bit = 1 << 3; | 1460 const int camera_bit = 1 << 3; |
1424 EXPECT_EQ(kVideoRotation_0, | 1461 EXPECT_EQ(kVideoRotation_0, |
1425 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 0)); | 1462 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 0)); |
1426 EXPECT_EQ(kVideoRotation_90, | 1463 EXPECT_EQ(kVideoRotation_90, |
1427 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 1)); | 1464 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 1)); |
1428 EXPECT_EQ(kVideoRotation_180, | 1465 EXPECT_EQ(kVideoRotation_180, |
1429 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 2)); | 1466 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 2)); |
1430 EXPECT_EQ(kVideoRotation_270, | 1467 EXPECT_EQ(kVideoRotation_270, |
1431 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 3)); | 1468 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 3)); |
1432 } | 1469 } |
1433 | 1470 |
1434 namespace { | 1471 TEST_P(RtpSenderTest, OnOverheadChanged) { |
1435 class MockOverheadObserver : public OverheadObserver { | |
danilchap
2017/03/29 10:49:11
you already have this Mock defined above.
minyue-webrtc
2017/03/29 12:00:39
I think I just moved it above
danilchap
2017/03/29 12:40:59
oops, sorry, got confused between 'old code' and '
minyue-webrtc
2017/04/03 07:12:52
NP, I sometimes get the exactly same confusion.
| |
1436 public: | |
1437 MOCK_METHOD1(OnOverheadChanged, void(size_t overhead_bytes_per_packet)); | |
1438 }; | |
1439 } // namespace | |
1440 | |
1441 TEST_F(RtpSenderTest, OnOverheadChanged) { | |
1442 MockOverheadObserver mock_overhead_observer; | 1472 MockOverheadObserver mock_overhead_observer; |
1443 rtp_sender_.reset( | 1473 rtp_sender_.reset( |
1444 new RTPSender(false, &fake_clock_, &transport_, nullptr, nullptr, nullptr, | 1474 new RTPSender(false, &fake_clock_, &transport_, nullptr, nullptr, nullptr, |
1445 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | 1475 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, |
1446 &retransmission_rate_limiter_, &mock_overhead_observer)); | 1476 &retransmission_rate_limiter_, &mock_overhead_observer)); |
1447 rtp_sender_->SetSSRC(kSsrc); | 1477 rtp_sender_->SetSSRC(kSsrc); |
1448 | 1478 |
1449 // RTP overhead is 12B. | 1479 // RTP overhead is 12B. |
1450 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(12)).Times(1); | 1480 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(12)).Times(1); |
1451 SendGenericPayload(); | 1481 SendGenericPayload(); |
1452 | 1482 |
1453 rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, | 1483 rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, |
1454 kTransmissionTimeOffsetExtensionId); | 1484 kTransmissionTimeOffsetExtensionId); |
1455 | 1485 |
1456 // TransmissionTimeOffset extension has a size of 8B. | 1486 // TransmissionTimeOffset extension has a size of 8B. |
1457 // 12B + 8B = 20B | 1487 // 12B + 8B = 20B |
1458 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(20)).Times(1); | 1488 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(20)).Times(1); |
1459 SendGenericPayload(); | 1489 SendGenericPayload(); |
1460 } | 1490 } |
1461 | 1491 |
1462 TEST_F(RtpSenderTest, DoesNotUpdateOverheadOnEqualSize) { | 1492 TEST_P(RtpSenderTest, DoesNotUpdateOverheadOnEqualSize) { |
1463 MockOverheadObserver mock_overhead_observer; | 1493 MockOverheadObserver mock_overhead_observer; |
1464 rtp_sender_.reset( | 1494 rtp_sender_.reset( |
1465 new RTPSender(false, &fake_clock_, &transport_, nullptr, nullptr, nullptr, | 1495 new RTPSender(false, &fake_clock_, &transport_, nullptr, nullptr, nullptr, |
1466 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | 1496 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, |
1467 &retransmission_rate_limiter_, &mock_overhead_observer)); | 1497 &retransmission_rate_limiter_, &mock_overhead_observer)); |
1468 rtp_sender_->SetSSRC(kSsrc); | 1498 rtp_sender_->SetSSRC(kSsrc); |
1469 | 1499 |
1470 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(_)).Times(1); | 1500 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(_)).Times(1); |
1471 SendGenericPayload(); | 1501 SendGenericPayload(); |
1472 SendGenericPayload(); | 1502 SendGenericPayload(); |
1473 } | 1503 } |
1474 | 1504 |
1475 TEST_F(RtpSenderTest, AddOverheadToTransportFeedbackObserver) { | 1505 TEST_P(RtpSenderTest, SendAudioPadding) { |
1476 constexpr int kRtpOverheadBytesPerPacket = 12 + 8; | |
1477 test::ScopedFieldTrials override_field_trials( | |
1478 "WebRTC-SendSideBwe-WithOverhead/Enabled/"); | |
1479 testing::NiceMock<MockOverheadObserver> mock_overhead_observer; | |
1480 rtp_sender_.reset(new RTPSender( | |
1481 false, &fake_clock_, &transport_, nullptr, nullptr, &seq_num_allocator_, | |
1482 &feedback_observer_, nullptr, nullptr, nullptr, &mock_rtc_event_log_, | |
1483 nullptr, &retransmission_rate_limiter_, &mock_overhead_observer)); | |
1484 rtp_sender_->SetSSRC(kSsrc); | |
1485 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | |
1486 kRtpExtensionTransportSequenceNumber, | |
1487 kTransportSequenceNumberExtensionId)); | |
1488 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | |
1489 .WillOnce(testing::Return(kTransportSequenceNumber)); | |
1490 EXPECT_CALL(feedback_observer_, | |
1491 AddPacket(rtp_sender_->SSRC(), kTransportSequenceNumber, | |
1492 sizeof(kPayloadData) + kGenericHeaderLength + | |
1493 kRtpOverheadBytesPerPacket, | |
1494 PacedPacketInfo())) | |
1495 .Times(1); | |
1496 EXPECT_CALL(mock_overhead_observer, | |
1497 OnOverheadChanged(kRtpOverheadBytesPerPacket)) | |
1498 .Times(1); | |
1499 SendGenericPayload(); | |
1500 } | |
1501 | |
1502 TEST_F(RtpSenderTest, SendAudioPadding) { | |
1503 MockTransport transport; | 1506 MockTransport transport; |
1504 const bool kEnableAudio = true; | 1507 const bool kEnableAudio = true; |
1505 rtp_sender_.reset(new RTPSender( | 1508 rtp_sender_.reset(new RTPSender( |
1506 kEnableAudio, &fake_clock_, &transport, &mock_paced_sender_, nullptr, | 1509 kEnableAudio, &fake_clock_, &transport, &mock_paced_sender_, nullptr, |
1507 nullptr, nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, | 1510 nullptr, nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, |
1508 nullptr, &retransmission_rate_limiter_, nullptr)); | 1511 nullptr, &retransmission_rate_limiter_, nullptr)); |
1509 rtp_sender_->SetSendPayloadType(kPayload); | 1512 rtp_sender_->SetSendPayloadType(kPayload); |
1510 rtp_sender_->SetSequenceNumber(kSeqNum); | 1513 rtp_sender_->SetSequenceNumber(kSeqNum); |
1511 rtp_sender_->SetTimestampOffset(0); | 1514 rtp_sender_->SetTimestampOffset(0); |
1512 rtp_sender_->SetSSRC(kSsrc); | 1515 rtp_sender_->SetSSRC(kSsrc); |
1513 | 1516 |
1514 const size_t kPaddingSize = 59; | 1517 const size_t kPaddingSize = 59; |
1515 EXPECT_CALL(transport, SendRtp(_, kPaddingSize + kRtpHeaderSize, _)) | 1518 EXPECT_CALL(transport, SendRtp(_, kPaddingSize + kRtpHeaderSize, _)) |
1516 .WillOnce(testing::Return(true)); | 1519 .WillOnce(testing::Return(true)); |
1517 EXPECT_EQ(kPaddingSize, | 1520 EXPECT_EQ(kPaddingSize, |
1518 rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo())); | 1521 rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo())); |
1519 | 1522 |
1520 // Requested padding size is too small, will send a larger one. | 1523 // Requested padding size is too small, will send a larger one. |
1521 const size_t kMinPaddingSize = 50; | 1524 const size_t kMinPaddingSize = 50; |
1522 EXPECT_CALL(transport, SendRtp(_, kMinPaddingSize + kRtpHeaderSize, _)) | 1525 EXPECT_CALL(transport, SendRtp(_, kMinPaddingSize + kRtpHeaderSize, _)) |
1523 .WillOnce(testing::Return(true)); | 1526 .WillOnce(testing::Return(true)); |
1524 EXPECT_EQ( | 1527 EXPECT_EQ( |
1525 kMinPaddingSize, | 1528 kMinPaddingSize, |
1526 rtp_sender_->TimeToSendPadding(kMinPaddingSize - 5, PacedPacketInfo())); | 1529 rtp_sender_->TimeToSendPadding(kMinPaddingSize - 5, PacedPacketInfo())); |
1527 } | 1530 } |
1531 | |
1532 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, | |
1533 RtpSenderTest, | |
1534 ::testing::Bool()); | |
1535 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, | |
1536 RtpSenderTestWithoutPacer, | |
1537 ::testing::Bool()); | |
1538 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, | |
1539 RtpSenderVideoTest, | |
1540 ::testing::Bool()); | |
1541 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, | |
1542 RtpSenderAudioTest, | |
1543 ::testing::Bool()); | |
1528 } // namespace webrtc | 1544 } // namespace webrtc |
OLD | NEW |