| 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 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 kTransportSequenceNumberExtensionId)); | 348 kTransportSequenceNumberExtensionId)); |
| 349 | 349 |
| 350 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 350 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
| 351 .WillOnce(testing::Return(kTransportSequenceNumber)); | 351 .WillOnce(testing::Return(kTransportSequenceNumber)); |
| 352 EXPECT_CALL(send_packet_observer_, | 352 EXPECT_CALL(send_packet_observer_, |
| 353 OnSendPacket(kTransportSequenceNumber, _, _)) | 353 OnSendPacket(kTransportSequenceNumber, _, _)) |
| 354 .Times(1); | 354 .Times(1); |
| 355 EXPECT_CALL(feedback_observer_, | 355 EXPECT_CALL(feedback_observer_, |
| 356 AddPacket(kTransportSequenceNumber, | 356 AddPacket(kTransportSequenceNumber, |
| 357 sizeof(kPayloadData) + kGenericHeaderLength, | 357 sizeof(kPayloadData) + kGenericHeaderLength, |
| 358 PacketInfo::kNotAProbe)) | 358 PacedPacketInfo::kNotAProbe)) |
| 359 .Times(1); | 359 .Times(1); |
| 360 | 360 |
| 361 SendGenericPayload(); | 361 SendGenericPayload(); |
| 362 | 362 |
| 363 const auto& packet = transport_.last_sent_packet(); | 363 const auto& packet = transport_.last_sent_packet(); |
| 364 uint16_t transport_seq_no; | 364 uint16_t transport_seq_no; |
| 365 ASSERT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); | 365 ASSERT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); |
| 366 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); | 366 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); |
| 367 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); | 367 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); |
| 368 } | 368 } |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 443 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), | 443 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), |
| 444 kAllowRetransmission, | 444 kAllowRetransmission, |
| 445 RtpPacketSender::kNormalPriority)); | 445 RtpPacketSender::kNormalPriority)); |
| 446 | 446 |
| 447 EXPECT_EQ(0, transport_.packets_sent()); | 447 EXPECT_EQ(0, transport_.packets_sent()); |
| 448 | 448 |
| 449 const int kStoredTimeInMs = 100; | 449 const int kStoredTimeInMs = 100; |
| 450 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); | 450 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); |
| 451 | 451 |
| 452 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, capture_time_ms, false, | 452 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, capture_time_ms, false, |
| 453 PacketInfo::kNotAProbe); | 453 PacedPacketInfo::kNotAProbe); |
| 454 | 454 |
| 455 // Process send bucket. Packet should now be sent. | 455 // Process send bucket. Packet should now be sent. |
| 456 EXPECT_EQ(1, transport_.packets_sent()); | 456 EXPECT_EQ(1, transport_.packets_sent()); |
| 457 EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); | 457 EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); |
| 458 | 458 |
| 459 webrtc::RTPHeader rtp_header; | 459 webrtc::RTPHeader rtp_header; |
| 460 transport_.last_sent_packet().GetHeader(&rtp_header); | 460 transport_.last_sent_packet().GetHeader(&rtp_header); |
| 461 | 461 |
| 462 // Verify transmission time offset. | 462 // Verify transmission time offset. |
| 463 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); | 463 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 494 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, | 494 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, |
| 495 kSsrc, kSeqNum, _, _, _)); | 495 kSsrc, kSeqNum, _, _, _)); |
| 496 | 496 |
| 497 const int kStoredTimeInMs = 100; | 497 const int kStoredTimeInMs = 100; |
| 498 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); | 498 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); |
| 499 | 499 |
| 500 EXPECT_EQ(static_cast<int>(packet_size), rtp_sender_->ReSendPacket(kSeqNum)); | 500 EXPECT_EQ(static_cast<int>(packet_size), rtp_sender_->ReSendPacket(kSeqNum)); |
| 501 EXPECT_EQ(0, transport_.packets_sent()); | 501 EXPECT_EQ(0, transport_.packets_sent()); |
| 502 | 502 |
| 503 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, capture_time_ms, false, | 503 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, capture_time_ms, false, |
| 504 PacketInfo::kNotAProbe); | 504 PacedPacketInfo::kNotAProbe); |
| 505 | 505 |
| 506 // Process send bucket. Packet should now be sent. | 506 // Process send bucket. Packet should now be sent. |
| 507 EXPECT_EQ(1, transport_.packets_sent()); | 507 EXPECT_EQ(1, transport_.packets_sent()); |
| 508 EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); | 508 EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); |
| 509 | 509 |
| 510 webrtc::RTPHeader rtp_header; | 510 webrtc::RTPHeader rtp_header; |
| 511 transport_.last_sent_packet().GetHeader(&rtp_header); | 511 transport_.last_sent_packet().GetHeader(&rtp_header); |
| 512 | 512 |
| 513 // Verify transmission time offset. | 513 // Verify transmission time offset. |
| 514 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); | 514 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 553 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), | 553 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), |
| 554 kAllowRetransmission, | 554 kAllowRetransmission, |
| 555 RtpPacketSender::kNormalPriority)); | 555 RtpPacketSender::kNormalPriority)); |
| 556 | 556 |
| 557 int total_packets_sent = 0; | 557 int total_packets_sent = 0; |
| 558 EXPECT_EQ(total_packets_sent, transport_.packets_sent()); | 558 EXPECT_EQ(total_packets_sent, transport_.packets_sent()); |
| 559 | 559 |
| 560 const int kStoredTimeInMs = 100; | 560 const int kStoredTimeInMs = 100; |
| 561 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); | 561 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); |
| 562 rtp_sender_->TimeToSendPacket(kSsrc, seq_num++, capture_time_ms, false, | 562 rtp_sender_->TimeToSendPacket(kSsrc, seq_num++, capture_time_ms, false, |
| 563 PacketInfo::kNotAProbe); | 563 PacedPacketInfo::kNotAProbe); |
| 564 // Packet should now be sent. This test doesn't verify the regular video | 564 // Packet should now be sent. This test doesn't verify the regular video |
| 565 // packet, since it is tested in another test. | 565 // packet, since it is tested in another test. |
| 566 EXPECT_EQ(++total_packets_sent, transport_.packets_sent()); | 566 EXPECT_EQ(++total_packets_sent, transport_.packets_sent()); |
| 567 timestamp += 90 * kStoredTimeInMs; | 567 timestamp += 90 * kStoredTimeInMs; |
| 568 | 568 |
| 569 // Send padding 4 times, waiting 50 ms between each. | 569 // Send padding 4 times, waiting 50 ms between each. |
| 570 for (int i = 0; i < 4; ++i) { | 570 for (int i = 0; i < 4; ++i) { |
| 571 const int kPaddingPeriodMs = 50; | 571 const int kPaddingPeriodMs = 50; |
| 572 const size_t kPaddingBytes = 100; | 572 const size_t kPaddingBytes = 100; |
| 573 const size_t kMaxPaddingLength = 224; // Value taken from rtp_sender.cc. | 573 const size_t kMaxPaddingLength = 224; // Value taken from rtp_sender.cc. |
| 574 // Padding will be forced to full packets. | 574 // Padding will be forced to full packets. |
| 575 EXPECT_EQ(kMaxPaddingLength, rtp_sender_->TimeToSendPadding( | 575 EXPECT_EQ(kMaxPaddingLength, |
| 576 kPaddingBytes, PacketInfo::kNotAProbe)); | 576 rtp_sender_->TimeToSendPadding(kPaddingBytes, |
| 577 PacedPacketInfo::kNotAProbe)); |
| 577 | 578 |
| 578 // Process send bucket. Padding should now be sent. | 579 // Process send bucket. Padding should now be sent. |
| 579 EXPECT_EQ(++total_packets_sent, transport_.packets_sent()); | 580 EXPECT_EQ(++total_packets_sent, transport_.packets_sent()); |
| 580 EXPECT_EQ(kMaxPaddingLength + rtp_header_len, | 581 EXPECT_EQ(kMaxPaddingLength + rtp_header_len, |
| 581 transport_.last_sent_packet().size()); | 582 transport_.last_sent_packet().size()); |
| 582 | 583 |
| 583 transport_.last_sent_packet().GetHeader(&rtp_header); | 584 transport_.last_sent_packet().GetHeader(&rtp_header); |
| 584 EXPECT_EQ(kMaxPaddingLength, rtp_header.paddingLength); | 585 EXPECT_EQ(kMaxPaddingLength, rtp_header.paddingLength); |
| 585 | 586 |
| 586 // Verify sequence number and timestamp. The timestamp should be the same | 587 // Verify sequence number and timestamp. The timestamp should be the same |
| (...skipping 17 matching lines...) Expand all Loading... |
| 604 | 605 |
| 605 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, | 606 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, |
| 606 kSsrc, seq_num, _, _, _)); | 607 kSsrc, seq_num, _, _, _)); |
| 607 | 608 |
| 608 // Packet should be stored in a send bucket. | 609 // Packet should be stored in a send bucket. |
| 609 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), | 610 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), |
| 610 kAllowRetransmission, | 611 kAllowRetransmission, |
| 611 RtpPacketSender::kNormalPriority)); | 612 RtpPacketSender::kNormalPriority)); |
| 612 | 613 |
| 613 rtp_sender_->TimeToSendPacket(kSsrc, seq_num, capture_time_ms, false, | 614 rtp_sender_->TimeToSendPacket(kSsrc, seq_num, capture_time_ms, false, |
| 614 PacketInfo::kNotAProbe); | 615 PacedPacketInfo::kNotAProbe); |
| 615 // Process send bucket. | 616 // Process send bucket. |
| 616 EXPECT_EQ(++total_packets_sent, transport_.packets_sent()); | 617 EXPECT_EQ(++total_packets_sent, transport_.packets_sent()); |
| 617 EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); | 618 EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); |
| 618 transport_.last_sent_packet().GetHeader(&rtp_header); | 619 transport_.last_sent_packet().GetHeader(&rtp_header); |
| 619 | 620 |
| 620 // Verify sequence number and timestamp. | 621 // Verify sequence number and timestamp. |
| 621 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); | 622 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); |
| 622 EXPECT_EQ(timestamp, rtp_header.timestamp); | 623 EXPECT_EQ(timestamp, rtp_header.timestamp); |
| 623 // Verify transmission time offset. This packet is sent without delay. | 624 // Verify transmission time offset. This packet is sent without delay. |
| 624 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); | 625 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 638 .Times(1); | 639 .Times(1); |
| 639 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 640 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
| 640 .WillOnce(testing::Return(kTransportSequenceNumber)); | 641 .WillOnce(testing::Return(kTransportSequenceNumber)); |
| 641 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)) | 642 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)) |
| 642 .Times(1); | 643 .Times(1); |
| 643 | 644 |
| 644 SendGenericPayload(); // Packet passed to pacer. | 645 SendGenericPayload(); // Packet passed to pacer. |
| 645 const bool kIsRetransmit = false; | 646 const bool kIsRetransmit = false; |
| 646 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, | 647 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, |
| 647 fake_clock_.TimeInMilliseconds(), kIsRetransmit, | 648 fake_clock_.TimeInMilliseconds(), kIsRetransmit, |
| 648 PacketInfo::kNotAProbe); | 649 PacedPacketInfo::kNotAProbe); |
| 649 EXPECT_EQ(1, transport_.packets_sent()); | 650 EXPECT_EQ(1, transport_.packets_sent()); |
| 650 } | 651 } |
| 651 | 652 |
| 652 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedForRetransmits) { | 653 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedForRetransmits) { |
| 653 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 654 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
| 654 kRtpExtensionTransportSequenceNumber, | 655 kRtpExtensionTransportSequenceNumber, |
| 655 kTransportSequenceNumberExtensionId)); | 656 kTransportSequenceNumberExtensionId)); |
| 656 rtp_sender_->SetStorePacketsStatus(true, 10); | 657 rtp_sender_->SetStorePacketsStatus(true, 10); |
| 657 | 658 |
| 658 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); | 659 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); |
| 659 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 660 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
| 660 .WillOnce(testing::Return(kTransportSequenceNumber)); | 661 .WillOnce(testing::Return(kTransportSequenceNumber)); |
| 661 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)) | 662 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)) |
| 662 .Times(1); | 663 .Times(1); |
| 663 | 664 |
| 664 SendGenericPayload(); // Packet passed to pacer. | 665 SendGenericPayload(); // Packet passed to pacer. |
| 665 const bool kIsRetransmit = true; | 666 const bool kIsRetransmit = true; |
| 666 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, | 667 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, |
| 667 fake_clock_.TimeInMilliseconds(), kIsRetransmit, | 668 fake_clock_.TimeInMilliseconds(), kIsRetransmit, |
| 668 PacketInfo::kNotAProbe); | 669 PacedPacketInfo::kNotAProbe); |
| 669 EXPECT_EQ(1, transport_.packets_sent()); | 670 EXPECT_EQ(1, transport_.packets_sent()); |
| 670 } | 671 } |
| 671 | 672 |
| 672 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) { | 673 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) { |
| 673 rtp_sender_.reset(new RTPSender( | 674 rtp_sender_.reset(new RTPSender( |
| 674 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr, | 675 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr, |
| 675 nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr, | 676 nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr, |
| 676 nullptr, nullptr, &send_packet_observer_, &retransmission_rate_limiter_, | 677 nullptr, nullptr, &send_packet_observer_, &retransmission_rate_limiter_, |
| 677 nullptr)); | 678 nullptr)); |
| 678 rtp_sender_->SetSequenceNumber(kSeqNum); | 679 rtp_sender_->SetSequenceNumber(kSeqNum); |
| 679 rtp_sender_->SetSSRC(kSsrc); | 680 rtp_sender_->SetSSRC(kSsrc); |
| 680 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 681 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
| 681 kRtpExtensionTransportSequenceNumber, | 682 kRtpExtensionTransportSequenceNumber, |
| 682 kTransportSequenceNumberExtensionId)); | 683 kTransportSequenceNumberExtensionId)); |
| 683 rtp_sender_->SetSequenceNumber(kSeqNum); | 684 rtp_sender_->SetSequenceNumber(kSeqNum); |
| 684 rtp_sender_->SetStorePacketsStatus(true, 10); | 685 rtp_sender_->SetStorePacketsStatus(true, 10); |
| 685 | 686 |
| 686 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); | 687 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); |
| 687 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)) | 688 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)) |
| 688 .Times(1); | 689 .Times(1); |
| 689 | 690 |
| 690 SendGenericPayload(); // Packet passed to pacer. | 691 SendGenericPayload(); // Packet passed to pacer. |
| 691 const bool kIsRetransmit = false; | 692 const bool kIsRetransmit = false; |
| 692 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, | 693 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, |
| 693 fake_clock_.TimeInMilliseconds(), kIsRetransmit, | 694 fake_clock_.TimeInMilliseconds(), kIsRetransmit, |
| 694 PacketInfo::kNotAProbe); | 695 PacedPacketInfo::kNotAProbe); |
| 695 EXPECT_EQ(1, transport_.packets_sent()); | 696 EXPECT_EQ(1, transport_.packets_sent()); |
| 696 } | 697 } |
| 697 | 698 |
| 698 TEST_F(RtpSenderTest, SendRedundantPayloads) { | 699 TEST_F(RtpSenderTest, SendRedundantPayloads) { |
| 699 MockTransport transport; | 700 MockTransport transport; |
| 700 rtp_sender_.reset(new RTPSender( | 701 rtp_sender_.reset(new RTPSender( |
| 701 false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, nullptr, | 702 false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, nullptr, |
| 702 nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, nullptr, | 703 nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, nullptr, |
| 703 &retransmission_rate_limiter_, nullptr)); | 704 &retransmission_rate_limiter_, nullptr)); |
| 704 rtp_sender_->SetSequenceNumber(kSeqNum); | 705 rtp_sender_->SetSequenceNumber(kSeqNum); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 727 EXPECT_CALL(mock_rtc_event_log_, | 728 EXPECT_CALL(mock_rtc_event_log_, |
| 728 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) | 729 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) |
| 729 .Times(kNumPayloadSizes); | 730 .Times(kNumPayloadSizes); |
| 730 | 731 |
| 731 // Send 10 packets of increasing size. | 732 // Send 10 packets of increasing size. |
| 732 for (size_t i = 0; i < kNumPayloadSizes; ++i) { | 733 for (size_t i = 0; i < kNumPayloadSizes; ++i) { |
| 733 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 734 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
| 734 EXPECT_CALL(transport, SendRtp(_, _, _)).WillOnce(testing::Return(true)); | 735 EXPECT_CALL(transport, SendRtp(_, _, _)).WillOnce(testing::Return(true)); |
| 735 SendPacket(capture_time_ms, kPayloadSizes[i]); | 736 SendPacket(capture_time_ms, kPayloadSizes[i]); |
| 736 rtp_sender_->TimeToSendPacket(kSsrc, seq_num++, capture_time_ms, false, | 737 rtp_sender_->TimeToSendPacket(kSsrc, seq_num++, capture_time_ms, false, |
| 737 PacketInfo::kNotAProbe); | 738 PacedPacketInfo::kNotAProbe); |
| 738 fake_clock_.AdvanceTimeMilliseconds(33); | 739 fake_clock_.AdvanceTimeMilliseconds(33); |
| 739 } | 740 } |
| 740 | 741 |
| 741 EXPECT_CALL(mock_rtc_event_log_, | 742 EXPECT_CALL(mock_rtc_event_log_, |
| 742 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) | 743 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) |
| 743 .Times(::testing::AtLeast(4)); | 744 .Times(::testing::AtLeast(4)); |
| 744 | 745 |
| 745 // The amount of padding to send it too small to send a payload packet. | 746 // The amount of padding to send it too small to send a payload packet. |
| 746 EXPECT_CALL(transport, SendRtp(_, kMaxPaddingSize + rtp_header_len, _)) | 747 EXPECT_CALL(transport, SendRtp(_, kMaxPaddingSize + rtp_header_len, _)) |
| 747 .WillOnce(testing::Return(true)); | 748 .WillOnce(testing::Return(true)); |
| 748 EXPECT_EQ(kMaxPaddingSize, | 749 EXPECT_EQ(kMaxPaddingSize, |
| 749 rtp_sender_->TimeToSendPadding(49, PacketInfo::kNotAProbe)); | 750 rtp_sender_->TimeToSendPadding(49, PacedPacketInfo::kNotAProbe)); |
| 750 | 751 |
| 751 EXPECT_CALL(transport, | 752 EXPECT_CALL(transport, |
| 752 SendRtp(_, kPayloadSizes[0] + rtp_header_len + kRtxHeaderSize, _)) | 753 SendRtp(_, kPayloadSizes[0] + rtp_header_len + kRtxHeaderSize, _)) |
| 753 .WillOnce(testing::Return(true)); | 754 .WillOnce(testing::Return(true)); |
| 754 EXPECT_EQ(kPayloadSizes[0], | 755 EXPECT_EQ(kPayloadSizes[0], |
| 755 rtp_sender_->TimeToSendPadding(500, PacketInfo::kNotAProbe)); | 756 rtp_sender_->TimeToSendPadding(500, PacedPacketInfo::kNotAProbe)); |
| 756 | 757 |
| 757 EXPECT_CALL(transport, SendRtp(_, kPayloadSizes[kNumPayloadSizes - 1] + | 758 EXPECT_CALL(transport, SendRtp(_, kPayloadSizes[kNumPayloadSizes - 1] + |
| 758 rtp_header_len + kRtxHeaderSize, | 759 rtp_header_len + kRtxHeaderSize, |
| 759 _)) | 760 _)) |
| 760 .WillOnce(testing::Return(true)); | 761 .WillOnce(testing::Return(true)); |
| 761 EXPECT_CALL(transport, SendRtp(_, kMaxPaddingSize + rtp_header_len, _)) | 762 EXPECT_CALL(transport, SendRtp(_, kMaxPaddingSize + rtp_header_len, _)) |
| 762 .WillOnce(testing::Return(true)); | 763 .WillOnce(testing::Return(true)); |
| 763 EXPECT_EQ(kPayloadSizes[kNumPayloadSizes - 1] + kMaxPaddingSize, | 764 EXPECT_EQ(kPayloadSizes[kNumPayloadSizes - 1] + kMaxPaddingSize, |
| 764 rtp_sender_->TimeToSendPadding(999, PacketInfo::kNotAProbe)); | 765 rtp_sender_->TimeToSendPadding(999, PacedPacketInfo::kNotAProbe)); |
| 765 } | 766 } |
| 766 | 767 |
| 767 TEST_F(RtpSenderTestWithoutPacer, SendGenericVideo) { | 768 TEST_F(RtpSenderTestWithoutPacer, SendGenericVideo) { |
| 768 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; | 769 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; |
| 769 const uint8_t payload_type = 127; | 770 const uint8_t payload_type = 127; |
| 770 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, | 771 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, |
| 771 0, 1500)); | 772 0, 1500)); |
| 772 uint8_t payload[] = {47, 11, 32, 93, 89}; | 773 uint8_t payload[] = {47, 11, 32, 93, 89}; |
| 773 | 774 |
| 774 // Send keyframe | 775 // Send keyframe |
| (...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1148 expected.transmitted.payload_bytes = 12; | 1149 expected.transmitted.payload_bytes = 12; |
| 1149 expected.transmitted.header_bytes = 24; | 1150 expected.transmitted.header_bytes = 24; |
| 1150 expected.transmitted.packets = 2; | 1151 expected.transmitted.packets = 2; |
| 1151 expected.retransmitted.payload_bytes = 6; | 1152 expected.retransmitted.payload_bytes = 6; |
| 1152 expected.retransmitted.header_bytes = 12; | 1153 expected.retransmitted.header_bytes = 12; |
| 1153 expected.retransmitted.padding_bytes = 0; | 1154 expected.retransmitted.padding_bytes = 0; |
| 1154 expected.retransmitted.packets = 1; | 1155 expected.retransmitted.packets = 1; |
| 1155 callback.Matches(ssrc, expected); | 1156 callback.Matches(ssrc, expected); |
| 1156 | 1157 |
| 1157 // Send padding. | 1158 // Send padding. |
| 1158 rtp_sender_->TimeToSendPadding(kMaxPaddingSize, PacketInfo::kNotAProbe); | 1159 rtp_sender_->TimeToSendPadding(kMaxPaddingSize, PacedPacketInfo::kNotAProbe); |
| 1159 expected.transmitted.payload_bytes = 12; | 1160 expected.transmitted.payload_bytes = 12; |
| 1160 expected.transmitted.header_bytes = 36; | 1161 expected.transmitted.header_bytes = 36; |
| 1161 expected.transmitted.padding_bytes = kMaxPaddingSize; | 1162 expected.transmitted.padding_bytes = kMaxPaddingSize; |
| 1162 expected.transmitted.packets = 3; | 1163 expected.transmitted.packets = 3; |
| 1163 callback.Matches(ssrc, expected); | 1164 callback.Matches(ssrc, expected); |
| 1164 | 1165 |
| 1165 // Send ULPFEC. | 1166 // Send ULPFEC. |
| 1166 rtp_sender_->SetUlpfecConfig(kRedPayloadType, kUlpfecPayloadType); | 1167 rtp_sender_->SetUlpfecConfig(kRedPayloadType, kUlpfecPayloadType); |
| 1167 FecProtectionParams fec_params; | 1168 FecProtectionParams fec_params; |
| 1168 fec_params.fec_mask_type = kFecMaskRandom; | 1169 fec_params.fec_mask_type = kFecMaskRandom; |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1276 | 1277 |
| 1277 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000, | 1278 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000, |
| 1278 0, 1500)); | 1279 0, 1500)); |
| 1279 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1280 uint8_t payload[] = {47, 11, 32, 93, 89}; |
| 1280 | 1281 |
| 1281 ASSERT_TRUE(rtp_sender_->SendOutgoingData( | 1282 ASSERT_TRUE(rtp_sender_->SendOutgoingData( |
| 1282 kVideoFrameKey, kPayloadType, 1234, 4321, payload, | 1283 kVideoFrameKey, kPayloadType, 1234, 4321, payload, |
| 1283 sizeof(payload), nullptr, nullptr, nullptr)); | 1284 sizeof(payload), nullptr, nullptr, nullptr)); |
| 1284 | 1285 |
| 1285 // Will send 2 full-size padding packets. | 1286 // Will send 2 full-size padding packets. |
| 1286 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe); | 1287 rtp_sender_->TimeToSendPadding(1, PacedPacketInfo::kNotAProbe); |
| 1287 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe); | 1288 rtp_sender_->TimeToSendPadding(1, PacedPacketInfo::kNotAProbe); |
| 1288 | 1289 |
| 1289 StreamDataCounters rtp_stats; | 1290 StreamDataCounters rtp_stats; |
| 1290 StreamDataCounters rtx_stats; | 1291 StreamDataCounters rtx_stats; |
| 1291 rtp_sender_->GetDataCounters(&rtp_stats, &rtx_stats); | 1292 rtp_sender_->GetDataCounters(&rtp_stats, &rtx_stats); |
| 1292 | 1293 |
| 1293 // Payload + 1-byte generic header. | 1294 // Payload + 1-byte generic header. |
| 1294 EXPECT_GT(rtp_stats.first_packet_time_ms, -1); | 1295 EXPECT_GT(rtp_stats.first_packet_time_ms, -1); |
| 1295 EXPECT_EQ(rtp_stats.transmitted.payload_bytes, sizeof(payload) + 1); | 1296 EXPECT_EQ(rtp_stats.transmitted.payload_bytes, sizeof(payload) + 1); |
| 1296 EXPECT_EQ(rtp_stats.transmitted.header_bytes, 12u); | 1297 EXPECT_EQ(rtp_stats.transmitted.header_bytes, 12u); |
| 1297 EXPECT_EQ(rtp_stats.transmitted.padding_bytes, 0u); | 1298 EXPECT_EQ(rtp_stats.transmitted.padding_bytes, 0u); |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1476 nullptr, &retransmission_rate_limiter_, &mock_overhead_observer)); | 1477 nullptr, &retransmission_rate_limiter_, &mock_overhead_observer)); |
| 1477 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 1478 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
| 1478 kRtpExtensionTransportSequenceNumber, | 1479 kRtpExtensionTransportSequenceNumber, |
| 1479 kTransportSequenceNumberExtensionId)); | 1480 kTransportSequenceNumberExtensionId)); |
| 1480 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 1481 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
| 1481 .WillOnce(testing::Return(kTransportSequenceNumber)); | 1482 .WillOnce(testing::Return(kTransportSequenceNumber)); |
| 1482 EXPECT_CALL(feedback_observer_, | 1483 EXPECT_CALL(feedback_observer_, |
| 1483 AddPacket(kTransportSequenceNumber, | 1484 AddPacket(kTransportSequenceNumber, |
| 1484 sizeof(kPayloadData) + kGenericHeaderLength + | 1485 sizeof(kPayloadData) + kGenericHeaderLength + |
| 1485 kRtpOverheadBytesPerPacket, | 1486 kRtpOverheadBytesPerPacket, |
| 1486 PacketInfo::kNotAProbe)) | 1487 PacedPacketInfo::kNotAProbe)) |
| 1487 .Times(1); | 1488 .Times(1); |
| 1488 EXPECT_CALL(mock_overhead_observer, | 1489 EXPECT_CALL(mock_overhead_observer, |
| 1489 OnOverheadChanged(kRtpOverheadBytesPerPacket)) | 1490 OnOverheadChanged(kRtpOverheadBytesPerPacket)) |
| 1490 .Times(1); | 1491 .Times(1); |
| 1491 SendGenericPayload(); | 1492 SendGenericPayload(); |
| 1492 } | 1493 } |
| 1493 | 1494 |
| 1494 TEST_F(RtpSenderTest, SendAudioPadding) { | 1495 TEST_F(RtpSenderTest, SendAudioPadding) { |
| 1495 MockTransport transport; | 1496 MockTransport transport; |
| 1496 const bool kEnableAudio = true; | 1497 const bool kEnableAudio = true; |
| 1497 rtp_sender_.reset(new RTPSender( | 1498 rtp_sender_.reset(new RTPSender( |
| 1498 kEnableAudio, &fake_clock_, &transport, &mock_paced_sender_, nullptr, | 1499 kEnableAudio, &fake_clock_, &transport, &mock_paced_sender_, nullptr, |
| 1499 nullptr, nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, | 1500 nullptr, nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, |
| 1500 nullptr, &retransmission_rate_limiter_, nullptr)); | 1501 nullptr, &retransmission_rate_limiter_, nullptr)); |
| 1501 rtp_sender_->SetSendPayloadType(kPayload); | 1502 rtp_sender_->SetSendPayloadType(kPayload); |
| 1502 rtp_sender_->SetSequenceNumber(kSeqNum); | 1503 rtp_sender_->SetSequenceNumber(kSeqNum); |
| 1503 rtp_sender_->SetTimestampOffset(0); | 1504 rtp_sender_->SetTimestampOffset(0); |
| 1504 rtp_sender_->SetSSRC(kSsrc); | 1505 rtp_sender_->SetSSRC(kSsrc); |
| 1505 | 1506 |
| 1506 const size_t kPaddingSize = 59; | 1507 const size_t kPaddingSize = 59; |
| 1507 EXPECT_CALL(transport, SendRtp(_, kPaddingSize + kRtpHeaderSize, _)) | 1508 EXPECT_CALL(transport, SendRtp(_, kPaddingSize + kRtpHeaderSize, _)) |
| 1508 .WillOnce(testing::Return(true)); | 1509 .WillOnce(testing::Return(true)); |
| 1509 EXPECT_EQ(kPaddingSize, rtp_sender_->TimeToSendPadding( | 1510 EXPECT_EQ(kPaddingSize, |
| 1510 kPaddingSize, PacketInfo::kNotAProbe)); | 1511 rtp_sender_->TimeToSendPadding(kPaddingSize, |
| 1512 PacedPacketInfo::kNotAProbe)); |
| 1511 | 1513 |
| 1512 // Requested padding size is too small, will send a larger one. | 1514 // Requested padding size is too small, will send a larger one. |
| 1513 const size_t kMinPaddingSize = 50; | 1515 const size_t kMinPaddingSize = 50; |
| 1514 EXPECT_CALL(transport, SendRtp(_, kMinPaddingSize + kRtpHeaderSize, _)) | 1516 EXPECT_CALL(transport, SendRtp(_, kMinPaddingSize + kRtpHeaderSize, _)) |
| 1515 .WillOnce(testing::Return(true)); | 1517 .WillOnce(testing::Return(true)); |
| 1516 EXPECT_EQ(kMinPaddingSize, rtp_sender_->TimeToSendPadding( | 1518 EXPECT_EQ(kMinPaddingSize, |
| 1517 kMinPaddingSize - 5, PacketInfo::kNotAProbe)); | 1519 rtp_sender_->TimeToSendPadding(kMinPaddingSize - 5, |
| 1520 PacedPacketInfo::kNotAProbe)); |
| 1518 } | 1521 } |
| 1519 } // namespace webrtc | 1522 } // namespace webrtc |
| OLD | NEW |