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 477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
488 rtp_sender_.reset( | 488 rtp_sender_.reset( |
489 new RTPSender(false, &fake_clock_, &transport_, &mock_paced_sender_, | 489 new RTPSender(false, &fake_clock_, &transport_, &mock_paced_sender_, |
490 nullptr, &seq_num_allocator_, &feedback_observer_, nullptr, | 490 nullptr, &seq_num_allocator_, &feedback_observer_, nullptr, |
491 nullptr, nullptr, &mock_rtc_event_log_, | 491 nullptr, nullptr, &mock_rtc_event_log_, |
492 &send_packet_observer_, &retransmission_rate_limiter_)); | 492 &send_packet_observer_, &retransmission_rate_limiter_)); |
493 rtp_sender_->SetStorePacketsStatus(true, 10); | 493 rtp_sender_->SetStorePacketsStatus(true, 10); |
494 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 494 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
495 kRtpExtensionTransportSequenceNumber, | 495 kRtpExtensionTransportSequenceNumber, |
496 kTransportSequenceNumberExtensionId)); | 496 kTransportSequenceNumberExtensionId)); |
497 | 497 |
| 498 uint32_t ssrc = 0; |
498 uint16_t seq_num = 0; | 499 uint16_t seq_num = 0; |
499 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) | 500 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) |
500 .Times(1).WillRepeatedly(testing::SaveArg<2>(&seq_num)); | 501 .Times(1) |
| 502 .WillOnce(testing::Invoke([&ssrc, &seq_num]( |
| 503 RtpPacketSender::Priority arg0, uint32_t arg1, uint16_t arg2, |
| 504 int64_t arg3, size_t arg4, bool arg5) { |
| 505 ssrc = arg1; |
| 506 seq_num = arg2; |
| 507 })); |
501 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 508 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
502 .WillOnce(testing::Return(kTransportSequenceNumber)); | 509 .WillOnce(testing::Return(kTransportSequenceNumber)); |
503 EXPECT_CALL(send_packet_observer_, | 510 EXPECT_CALL(send_packet_observer_, |
504 OnSendPacket(kTransportSequenceNumber, _, _)) | 511 OnSendPacket(kTransportSequenceNumber, _, _)) |
505 .Times(1); | 512 .Times(1); |
506 const int kProbeClusterId = 1; | 513 const int kProbeClusterId = 1; |
507 EXPECT_CALL( | 514 EXPECT_CALL( |
508 feedback_observer_, | 515 feedback_observer_, |
509 AddPacket(kTransportSequenceNumber, | 516 AddPacket(kTransportSequenceNumber, |
510 sizeof(kPayloadData) + kGenericHeaderLength, kProbeClusterId)) | 517 sizeof(kPayloadData) + kGenericHeaderLength, kProbeClusterId)) |
511 .Times(1); | 518 .Times(1); |
512 | 519 |
513 SendGenericPayload(); | 520 SendGenericPayload(); |
514 rtp_sender_->TimeToSendPacket(seq_num, fake_clock_.TimeInMilliseconds(), | 521 rtp_sender_->TimeToSendPacket(ssrc, seq_num, fake_clock_.TimeInMilliseconds(), |
515 false, kProbeClusterId); | 522 false, kProbeClusterId); |
516 | 523 |
517 const auto& packet = transport_.last_sent_packet(); | 524 const auto& packet = transport_.last_sent_packet(); |
518 uint16_t transport_seq_no; | 525 uint16_t transport_seq_no; |
519 EXPECT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); | 526 EXPECT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); |
520 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); | 527 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); |
521 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); | 528 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); |
522 } | 529 } |
523 | 530 |
524 TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) { | 531 TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) { |
| 532 uint32_t ssrc; |
525 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, | 533 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, |
526 _, kSeqNum, _, _, _)); | 534 _, kSeqNum, _, _, _)) |
| 535 .WillOnce(testing::SaveArg<1>(&ssrc)); |
527 EXPECT_CALL(mock_rtc_event_log_, | 536 EXPECT_CALL(mock_rtc_event_log_, |
528 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); | 537 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); |
529 | 538 |
530 rtp_sender_->SetStorePacketsStatus(true, 10); | 539 rtp_sender_->SetStorePacketsStatus(true, 10); |
531 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 540 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
532 kRtpExtensionTransmissionTimeOffset, | 541 kRtpExtensionTransmissionTimeOffset, |
533 kTransmissionTimeOffsetExtensionId)); | 542 kTransmissionTimeOffsetExtensionId)); |
534 EXPECT_EQ( | 543 EXPECT_EQ( |
535 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 544 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
536 kAbsoluteSendTimeExtensionId)); | 545 kAbsoluteSendTimeExtensionId)); |
537 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 546 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
538 auto packet = | 547 auto packet = |
539 BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, capture_time_ms); | 548 BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, capture_time_ms); |
540 size_t packet_size = packet->size(); | 549 size_t packet_size = packet->size(); |
541 | 550 |
542 // Packet should be stored in a send bucket. | 551 // Packet should be stored in a send bucket. |
543 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), | 552 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), |
544 kAllowRetransmission, | 553 kAllowRetransmission, |
545 RtpPacketSender::kNormalPriority)); | 554 RtpPacketSender::kNormalPriority)); |
546 | 555 |
547 EXPECT_EQ(0, transport_.packets_sent()); | 556 EXPECT_EQ(0, transport_.packets_sent()); |
548 | 557 |
549 const int kStoredTimeInMs = 100; | 558 const int kStoredTimeInMs = 100; |
550 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); | 559 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); |
551 | 560 |
552 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false, | 561 rtp_sender_->TimeToSendPacket(ssrc, kSeqNum, capture_time_ms, false, |
553 PacketInfo::kNotAProbe); | 562 PacketInfo::kNotAProbe); |
554 | 563 |
555 // Process send bucket. Packet should now be sent. | 564 // Process send bucket. Packet should now be sent. |
556 EXPECT_EQ(1, transport_.packets_sent()); | 565 EXPECT_EQ(1, transport_.packets_sent()); |
557 EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); | 566 EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); |
558 | 567 |
559 webrtc::RTPHeader rtp_header; | 568 webrtc::RTPHeader rtp_header; |
560 transport_.last_sent_packet().GetHeader(&rtp_header); | 569 transport_.last_sent_packet().GetHeader(&rtp_header); |
561 | 570 |
562 // Verify transmission time offset. | 571 // Verify transmission time offset. |
563 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); | 572 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); |
564 uint64_t expected_send_time = | 573 uint64_t expected_send_time = |
565 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); | 574 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); |
566 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); | 575 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); |
567 } | 576 } |
568 | 577 |
569 TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) { | 578 TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) { |
| 579 uint32_t ssrc; |
570 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, | 580 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, |
571 _, kSeqNum, _, _, _)); | 581 _, kSeqNum, _, _, _)) |
| 582 .WillOnce(testing::SaveArg<1>(&ssrc)); |
572 EXPECT_CALL(mock_rtc_event_log_, | 583 EXPECT_CALL(mock_rtc_event_log_, |
573 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); | 584 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); |
574 | 585 |
575 rtp_sender_->SetStorePacketsStatus(true, 10); | 586 rtp_sender_->SetStorePacketsStatus(true, 10); |
576 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 587 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
577 kRtpExtensionTransmissionTimeOffset, | 588 kRtpExtensionTransmissionTimeOffset, |
578 kTransmissionTimeOffsetExtensionId)); | 589 kTransmissionTimeOffsetExtensionId)); |
579 EXPECT_EQ( | 590 EXPECT_EQ( |
580 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 591 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
581 kAbsoluteSendTimeExtensionId)); | 592 kAbsoluteSendTimeExtensionId)); |
(...skipping 11 matching lines...) Expand all Loading... |
593 | 604 |
594 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, | 605 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, |
595 _, kSeqNum, _, _, _)); | 606 _, kSeqNum, _, _, _)); |
596 | 607 |
597 const int kStoredTimeInMs = 100; | 608 const int kStoredTimeInMs = 100; |
598 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); | 609 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); |
599 | 610 |
600 EXPECT_EQ(static_cast<int>(packet_size), rtp_sender_->ReSendPacket(kSeqNum)); | 611 EXPECT_EQ(static_cast<int>(packet_size), rtp_sender_->ReSendPacket(kSeqNum)); |
601 EXPECT_EQ(0, transport_.packets_sent()); | 612 EXPECT_EQ(0, transport_.packets_sent()); |
602 | 613 |
603 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false, | 614 rtp_sender_->TimeToSendPacket(ssrc, kSeqNum, capture_time_ms, false, |
604 PacketInfo::kNotAProbe); | 615 PacketInfo::kNotAProbe); |
605 | 616 |
606 // Process send bucket. Packet should now be sent. | 617 // Process send bucket. Packet should now be sent. |
607 EXPECT_EQ(1, transport_.packets_sent()); | 618 EXPECT_EQ(1, transport_.packets_sent()); |
608 EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); | 619 EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); |
609 | 620 |
610 webrtc::RTPHeader rtp_header; | 621 webrtc::RTPHeader rtp_header; |
611 transport_.last_sent_packet().GetHeader(&rtp_header); | 622 transport_.last_sent_packet().GetHeader(&rtp_header); |
612 | 623 |
613 // Verify transmission time offset. | 624 // Verify transmission time offset. |
614 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); | 625 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); |
615 uint64_t expected_send_time = | 626 uint64_t expected_send_time = |
616 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); | 627 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); |
617 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); | 628 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); |
618 } | 629 } |
619 | 630 |
620 // This test sends 1 regular video packet, then 4 padding packets, and then | 631 // This test sends 1 regular video packet, then 4 padding packets, and then |
621 // 1 more regular packet. | 632 // 1 more regular packet. |
622 TEST_F(RtpSenderTest, SendPadding) { | 633 TEST_F(RtpSenderTest, SendPadding) { |
| 634 uint32_t ssrc; |
623 // Make all (non-padding) packets go to send queue. | 635 // Make all (non-padding) packets go to send queue. |
624 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, | 636 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, |
625 _, kSeqNum, _, _, _)); | 637 _, kSeqNum, _, _, _)) |
| 638 .WillOnce(testing::SaveArg<1>(&ssrc)); |
626 EXPECT_CALL(mock_rtc_event_log_, | 639 EXPECT_CALL(mock_rtc_event_log_, |
627 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) | 640 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) |
628 .Times(1 + 4 + 1); | 641 .Times(1 + 4 + 1); |
629 | 642 |
630 uint16_t seq_num = kSeqNum; | 643 uint16_t seq_num = kSeqNum; |
631 uint32_t timestamp = kTimestamp; | 644 uint32_t timestamp = kTimestamp; |
632 rtp_sender_->SetStorePacketsStatus(true, 10); | 645 rtp_sender_->SetStorePacketsStatus(true, 10); |
633 size_t rtp_header_len = kRtpHeaderSize; | 646 size_t rtp_header_len = kRtpHeaderSize; |
634 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 647 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
635 kRtpExtensionTransmissionTimeOffset, | 648 kRtpExtensionTransmissionTimeOffset, |
(...skipping 16 matching lines...) Expand all Loading... |
652 // Packet should be stored in a send bucket. | 665 // Packet should be stored in a send bucket. |
653 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), | 666 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), |
654 kAllowRetransmission, | 667 kAllowRetransmission, |
655 RtpPacketSender::kNormalPriority)); | 668 RtpPacketSender::kNormalPriority)); |
656 | 669 |
657 int total_packets_sent = 0; | 670 int total_packets_sent = 0; |
658 EXPECT_EQ(total_packets_sent, transport_.packets_sent()); | 671 EXPECT_EQ(total_packets_sent, transport_.packets_sent()); |
659 | 672 |
660 const int kStoredTimeInMs = 100; | 673 const int kStoredTimeInMs = 100; |
661 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); | 674 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); |
662 rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false, | 675 rtp_sender_->TimeToSendPacket(ssrc, seq_num++, capture_time_ms, false, |
663 PacketInfo::kNotAProbe); | 676 PacketInfo::kNotAProbe); |
664 // Packet should now be sent. This test doesn't verify the regular video | 677 // Packet should now be sent. This test doesn't verify the regular video |
665 // packet, since it is tested in another test. | 678 // packet, since it is tested in another test. |
666 EXPECT_EQ(++total_packets_sent, transport_.packets_sent()); | 679 EXPECT_EQ(++total_packets_sent, transport_.packets_sent()); |
667 timestamp += 90 * kStoredTimeInMs; | 680 timestamp += 90 * kStoredTimeInMs; |
668 | 681 |
669 // Send padding 4 times, waiting 50 ms between each. | 682 // Send padding 4 times, waiting 50 ms between each. |
670 for (int i = 0; i < 4; ++i) { | 683 for (int i = 0; i < 4; ++i) { |
671 const int kPaddingPeriodMs = 50; | 684 const int kPaddingPeriodMs = 50; |
672 const size_t kPaddingBytes = 100; | 685 const size_t kPaddingBytes = 100; |
(...skipping 30 matching lines...) Expand all Loading... |
703 packet_size = packet->size(); | 716 packet_size = packet->size(); |
704 | 717 |
705 EXPECT_CALL(mock_paced_sender_, | 718 EXPECT_CALL(mock_paced_sender_, |
706 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)); | 719 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)); |
707 | 720 |
708 // Packet should be stored in a send bucket. | 721 // Packet should be stored in a send bucket. |
709 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), | 722 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), |
710 kAllowRetransmission, | 723 kAllowRetransmission, |
711 RtpPacketSender::kNormalPriority)); | 724 RtpPacketSender::kNormalPriority)); |
712 | 725 |
713 rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false, | 726 rtp_sender_->TimeToSendPacket(ssrc, seq_num, capture_time_ms, false, |
714 PacketInfo::kNotAProbe); | 727 PacketInfo::kNotAProbe); |
715 // Process send bucket. | 728 // Process send bucket. |
716 EXPECT_EQ(++total_packets_sent, transport_.packets_sent()); | 729 EXPECT_EQ(++total_packets_sent, transport_.packets_sent()); |
717 EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); | 730 EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); |
718 transport_.last_sent_packet().GetHeader(&rtp_header); | 731 transport_.last_sent_packet().GetHeader(&rtp_header); |
719 | 732 |
720 // Verify sequence number and timestamp. | 733 // Verify sequence number and timestamp. |
721 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); | 734 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); |
722 EXPECT_EQ(timestamp, rtp_header.timestamp); | 735 EXPECT_EQ(timestamp, rtp_header.timestamp); |
723 // Verify transmission time offset. This packet is sent without delay. | 736 // Verify transmission time offset. This packet is sent without delay. |
724 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); | 737 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); |
725 uint64_t expected_send_time = | 738 uint64_t expected_send_time = |
726 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); | 739 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); |
727 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); | 740 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); |
728 } | 741 } |
729 | 742 |
730 TEST_F(RtpSenderTest, OnSendPacketUpdated) { | 743 TEST_F(RtpSenderTest, OnSendPacketUpdated) { |
731 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 744 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
732 kRtpExtensionTransportSequenceNumber, | 745 kRtpExtensionTransportSequenceNumber, |
733 kTransportSequenceNumberExtensionId)); | 746 kTransportSequenceNumberExtensionId)); |
734 rtp_sender_->SetStorePacketsStatus(true, 10); | 747 rtp_sender_->SetStorePacketsStatus(true, 10); |
735 | 748 |
736 EXPECT_CALL(send_packet_observer_, | 749 EXPECT_CALL(send_packet_observer_, |
737 OnSendPacket(kTransportSequenceNumber, _, _)) | 750 OnSendPacket(kTransportSequenceNumber, _, _)) |
738 .Times(1); | 751 .Times(1); |
739 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 752 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
740 .WillOnce(testing::Return(kTransportSequenceNumber)); | 753 .WillOnce(testing::Return(kTransportSequenceNumber)); |
741 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1); | 754 uint32_t ssrc; |
| 755 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) |
| 756 .Times(1) |
| 757 .WillOnce(testing::SaveArg<1>(&ssrc)); |
742 | 758 |
743 SendGenericPayload(); // Packet passed to pacer. | 759 SendGenericPayload(); // Packet passed to pacer. |
744 const bool kIsRetransmit = false; | 760 const bool kIsRetransmit = false; |
745 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), | 761 rtp_sender_->TimeToSendPacket(ssrc, kSeqNum, fake_clock_.TimeInMilliseconds(), |
746 kIsRetransmit, PacketInfo::kNotAProbe); | 762 kIsRetransmit, PacketInfo::kNotAProbe); |
747 EXPECT_EQ(1, transport_.packets_sent()); | 763 EXPECT_EQ(1, transport_.packets_sent()); |
748 } | 764 } |
749 | 765 |
750 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedForRetransmits) { | 766 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedForRetransmits) { |
751 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 767 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
752 kRtpExtensionTransportSequenceNumber, | 768 kRtpExtensionTransportSequenceNumber, |
753 kTransportSequenceNumberExtensionId)); | 769 kTransportSequenceNumberExtensionId)); |
754 rtp_sender_->SetStorePacketsStatus(true, 10); | 770 rtp_sender_->SetStorePacketsStatus(true, 10); |
755 | 771 |
756 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); | 772 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); |
757 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 773 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
758 .WillOnce(testing::Return(kTransportSequenceNumber)); | 774 .WillOnce(testing::Return(kTransportSequenceNumber)); |
759 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1); | 775 uint32_t ssrc; |
| 776 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) |
| 777 .Times(1) |
| 778 .WillOnce(testing::SaveArg<1>(&ssrc)); |
760 | 779 |
761 SendGenericPayload(); // Packet passed to pacer. | 780 SendGenericPayload(); // Packet passed to pacer. |
762 const bool kIsRetransmit = true; | 781 const bool kIsRetransmit = true; |
763 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), | 782 rtp_sender_->TimeToSendPacket(ssrc, kSeqNum, fake_clock_.TimeInMilliseconds(), |
764 kIsRetransmit, PacketInfo::kNotAProbe); | 783 kIsRetransmit, PacketInfo::kNotAProbe); |
765 EXPECT_EQ(1, transport_.packets_sent()); | 784 EXPECT_EQ(1, transport_.packets_sent()); |
766 } | 785 } |
767 | 786 |
768 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) { | 787 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) { |
769 rtp_sender_.reset(new RTPSender( | 788 rtp_sender_.reset(new RTPSender( |
770 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr, | 789 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr, |
771 nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr, | 790 nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr, |
772 nullptr, nullptr, &send_packet_observer_, &retransmission_rate_limiter_)); | 791 nullptr, nullptr, &send_packet_observer_, &retransmission_rate_limiter_)); |
773 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 792 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
774 kRtpExtensionTransportSequenceNumber, | 793 kRtpExtensionTransportSequenceNumber, |
775 kTransportSequenceNumberExtensionId)); | 794 kTransportSequenceNumberExtensionId)); |
776 rtp_sender_->SetSequenceNumber(kSeqNum); | 795 rtp_sender_->SetSequenceNumber(kSeqNum); |
777 rtp_sender_->SetStorePacketsStatus(true, 10); | 796 rtp_sender_->SetStorePacketsStatus(true, 10); |
778 | 797 |
779 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); | 798 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); |
780 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1); | 799 uint32_t ssrc; |
| 800 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) |
| 801 .Times(1) |
| 802 .WillOnce(testing::SaveArg<1>(&ssrc)); |
781 | 803 |
782 SendGenericPayload(); // Packet passed to pacer. | 804 SendGenericPayload(); // Packet passed to pacer. |
783 const bool kIsRetransmit = false; | 805 const bool kIsRetransmit = false; |
784 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), | 806 rtp_sender_->TimeToSendPacket(ssrc, kSeqNum, fake_clock_.TimeInMilliseconds(), |
785 kIsRetransmit, PacketInfo::kNotAProbe); | 807 kIsRetransmit, PacketInfo::kNotAProbe); |
786 EXPECT_EQ(1, transport_.packets_sent()); | 808 EXPECT_EQ(1, transport_.packets_sent()); |
787 } | 809 } |
788 | 810 |
789 TEST_F(RtpSenderTest, SendRedundantPayloads) { | 811 TEST_F(RtpSenderTest, SendRedundantPayloads) { |
790 MockTransport transport; | 812 MockTransport transport; |
791 rtp_sender_.reset(new RTPSender( | 813 rtp_sender_.reset(new RTPSender( |
792 false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, nullptr, | 814 false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, nullptr, |
793 nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, nullptr, | 815 nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, nullptr, |
794 &retransmission_rate_limiter_)); | 816 &retransmission_rate_limiter_)); |
(...skipping 10 matching lines...) Expand all Loading... |
805 rtp_header_len += 4; // 4 bytes extension. | 827 rtp_header_len += 4; // 4 bytes extension. |
806 rtp_header_len += 4; // 4 extra bytes common to all extension headers. | 828 rtp_header_len += 4; // 4 extra bytes common to all extension headers. |
807 | 829 |
808 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); | 830 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); |
809 rtp_sender_->SetRtxSsrc(1234); | 831 rtp_sender_->SetRtxSsrc(1234); |
810 | 832 |
811 const size_t kNumPayloadSizes = 10; | 833 const size_t kNumPayloadSizes = 10; |
812 const size_t kPayloadSizes[kNumPayloadSizes] = {500, 550, 600, 650, 700, | 834 const size_t kPayloadSizes[kNumPayloadSizes] = {500, 550, 600, 650, 700, |
813 750, 800, 850, 900, 950}; | 835 750, 800, 850, 900, 950}; |
814 // Expect all packets go through the pacer. | 836 // Expect all packets go through the pacer. |
| 837 uint32_t ssrc; |
815 EXPECT_CALL(mock_paced_sender_, | 838 EXPECT_CALL(mock_paced_sender_, |
816 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)) | 839 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)) |
817 .Times(kNumPayloadSizes); | 840 .Times(kNumPayloadSizes) |
| 841 .WillOnce(testing::SaveArg<1>(&ssrc)); |
818 EXPECT_CALL(mock_rtc_event_log_, | 842 EXPECT_CALL(mock_rtc_event_log_, |
819 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) | 843 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) |
820 .Times(kNumPayloadSizes); | 844 .Times(kNumPayloadSizes); |
821 | 845 |
822 // Send 10 packets of increasing size. | 846 // Send 10 packets of increasing size. |
823 for (size_t i = 0; i < kNumPayloadSizes; ++i) { | 847 for (size_t i = 0; i < kNumPayloadSizes; ++i) { |
824 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 848 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
825 EXPECT_CALL(transport, SendRtp(_, _, _)).WillOnce(testing::Return(true)); | 849 EXPECT_CALL(transport, SendRtp(_, _, _)).WillOnce(testing::Return(true)); |
826 SendPacket(capture_time_ms, kPayloadSizes[i]); | 850 SendPacket(capture_time_ms, kPayloadSizes[i]); |
827 rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false, | 851 rtp_sender_->TimeToSendPacket(ssrc, seq_num++, capture_time_ms, false, |
828 PacketInfo::kNotAProbe); | 852 PacketInfo::kNotAProbe); |
829 fake_clock_.AdvanceTimeMilliseconds(33); | 853 fake_clock_.AdvanceTimeMilliseconds(33); |
830 } | 854 } |
831 | 855 |
832 EXPECT_CALL(mock_rtc_event_log_, | 856 EXPECT_CALL(mock_rtc_event_log_, |
833 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) | 857 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) |
834 .Times(::testing::AtLeast(4)); | 858 .Times(::testing::AtLeast(4)); |
835 | 859 |
836 // The amount of padding to send it too small to send a payload packet. | 860 // The amount of padding to send it too small to send a payload packet. |
837 EXPECT_CALL(transport, SendRtp(_, kMaxPaddingSize + rtp_header_len, _)) | 861 EXPECT_CALL(transport, SendRtp(_, kMaxPaddingSize + rtp_header_len, _)) |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
919 rtp_sender_->SetSendPayloadType(kMediaPayloadType); | 943 rtp_sender_->SetSendPayloadType(kMediaPayloadType); |
920 rtp_sender_->SetStorePacketsStatus(true, 10); | 944 rtp_sender_->SetStorePacketsStatus(true, 10); |
921 | 945 |
922 // Parameters selected to generate a single FEC packet per media packet. | 946 // Parameters selected to generate a single FEC packet per media packet. |
923 FecProtectionParams params; | 947 FecProtectionParams params; |
924 params.fec_rate = 15; | 948 params.fec_rate = 15; |
925 params.max_fec_frames = 1; | 949 params.max_fec_frames = 1; |
926 params.fec_mask_type = kFecMaskRandom; | 950 params.fec_mask_type = kFecMaskRandom; |
927 rtp_sender_->SetFecParameters(params, params); | 951 rtp_sender_->SetFecParameters(params, params); |
928 | 952 |
929 uint16_t media_seq_num; | 953 EXPECT_CALL(mock_paced_sender_, |
| 954 InsertPacket(RtpPacketSender::kLowPriority, kMediaSsrc, kSeqNum, |
| 955 _, _, false)); |
| 956 uint16_t flexfec_seq_num; |
930 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kLowPriority, | 957 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kLowPriority, |
931 kMediaSsrc, _, _, _, false)) | 958 kFlexfecSsrc, _, _, _, false)) |
932 .WillOnce(testing::SaveArg<2>(&media_seq_num)); | 959 .WillOnce(testing::SaveArg<2>(&flexfec_seq_num)); |
933 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kLowPriority, | |
934 kFlexfecSsrc, _, _, _, false)); | |
935 SendGenericPayload(); | 960 SendGenericPayload(); |
936 // TODO(brandtr): Make these tests stricter when the FlexFEC packets are no | |
937 // longer lost between PacedSender and RTPSender. | |
938 EXPECT_CALL(mock_rtc_event_log_, | 961 EXPECT_CALL(mock_rtc_event_log_, |
939 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) | 962 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) |
940 .Times(testing::AtLeast(1)); | 963 .Times(2); |
941 EXPECT_TRUE(rtp_sender_->TimeToSendPacket( | 964 EXPECT_TRUE(rtp_sender_->TimeToSendPacket( |
942 media_seq_num, fake_clock_.TimeInMilliseconds(), false, 0)); | 965 kMediaSsrc, kSeqNum, fake_clock_.TimeInMilliseconds(), false, 0)); |
943 EXPECT_LE(1, transport_.packets_sent()); | 966 EXPECT_TRUE(rtp_sender_->TimeToSendPacket(kFlexfecSsrc, flexfec_seq_num, |
| 967 fake_clock_.TimeInMilliseconds(), |
| 968 false, 0)); |
| 969 EXPECT_EQ(2, transport_.packets_sent()); |
944 const RtpPacketReceived& media_packet = transport_.sent_packets_[0]; | 970 const RtpPacketReceived& media_packet = transport_.sent_packets_[0]; |
945 EXPECT_EQ(kMediaPayloadType, media_packet.PayloadType()); | 971 EXPECT_EQ(kMediaPayloadType, media_packet.PayloadType()); |
946 EXPECT_EQ(media_seq_num, media_packet.SequenceNumber()); | 972 EXPECT_EQ(kSeqNum, media_packet.SequenceNumber()); |
947 EXPECT_EQ(kMediaSsrc, media_packet.Ssrc()); | 973 EXPECT_EQ(kMediaSsrc, media_packet.Ssrc()); |
| 974 const RtpPacketReceived& flexfec_packet = transport_.sent_packets_[1]; |
| 975 EXPECT_EQ(kFlexfecPayloadType, flexfec_packet.PayloadType()); |
| 976 EXPECT_EQ(flexfec_seq_num, flexfec_packet.SequenceNumber()); |
| 977 EXPECT_EQ(kFlexfecSsrc, flexfec_packet.Ssrc()); |
948 } | 978 } |
949 | 979 |
950 TEST_F(RtpSenderTestWithoutPacer, SendFlexfecPackets) { | 980 TEST_F(RtpSenderTestWithoutPacer, SendFlexfecPackets) { |
951 constexpr int kMediaPayloadType = 127; | 981 constexpr int kMediaPayloadType = 127; |
952 constexpr int kFlexfecPayloadType = 118; | 982 constexpr int kFlexfecPayloadType = 118; |
953 constexpr uint32_t kMediaSsrc = 1234; | 983 constexpr uint32_t kMediaSsrc = 1234; |
954 constexpr uint32_t kFlexfecSsrc = 5678; | 984 constexpr uint32_t kFlexfecSsrc = 5678; |
955 const std::vector<RtpExtension> kNoRtpExtensions; | 985 const std::vector<RtpExtension> kNoRtpExtensions; |
956 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 986 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
957 kNoRtpExtensions, &fake_clock_); | 987 kNoRtpExtensions, &fake_clock_); |
(...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1472 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 0)); | 1502 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 0)); |
1473 EXPECT_EQ(kVideoRotation_90, | 1503 EXPECT_EQ(kVideoRotation_90, |
1474 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 1)); | 1504 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 1)); |
1475 EXPECT_EQ(kVideoRotation_180, | 1505 EXPECT_EQ(kVideoRotation_180, |
1476 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 2)); | 1506 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 2)); |
1477 EXPECT_EQ(kVideoRotation_270, | 1507 EXPECT_EQ(kVideoRotation_270, |
1478 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 3)); | 1508 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 3)); |
1479 } | 1509 } |
1480 | 1510 |
1481 } // namespace webrtc | 1511 } // namespace webrtc |
OLD | NEW |