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 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
418 uint16_t transport_seq_no; | 418 uint16_t transport_seq_no; |
419 EXPECT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); | 419 EXPECT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); |
420 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); | 420 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); |
421 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); | 421 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); |
422 } | 422 } |
423 | 423 |
424 TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) { | 424 TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) { |
425 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, | 425 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, |
426 kSsrc, kSeqNum, _, _, _)); | 426 kSsrc, kSeqNum, _, _, _)); |
427 EXPECT_CALL(mock_rtc_event_log_, | 427 EXPECT_CALL(mock_rtc_event_log_, |
428 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); | 428 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _, _)); |
429 | 429 |
430 rtp_sender_->SetStorePacketsStatus(true, 10); | 430 rtp_sender_->SetStorePacketsStatus(true, 10); |
431 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 431 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
432 kRtpExtensionTransmissionTimeOffset, | 432 kRtpExtensionTransmissionTimeOffset, |
433 kTransmissionTimeOffsetExtensionId)); | 433 kTransmissionTimeOffsetExtensionId)); |
434 EXPECT_EQ( | 434 EXPECT_EQ( |
435 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 435 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
436 kAbsoluteSendTimeExtensionId)); | 436 kAbsoluteSendTimeExtensionId)); |
437 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 437 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
438 auto packet = | 438 auto packet = |
(...skipping 24 matching lines...) Expand all Loading... |
463 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); | 463 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); |
464 uint64_t expected_send_time = | 464 uint64_t expected_send_time = |
465 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); | 465 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); |
466 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); | 466 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); |
467 } | 467 } |
468 | 468 |
469 TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) { | 469 TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) { |
470 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, | 470 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, |
471 kSsrc, kSeqNum, _, _, _)); | 471 kSsrc, kSeqNum, _, _, _)); |
472 EXPECT_CALL(mock_rtc_event_log_, | 472 EXPECT_CALL(mock_rtc_event_log_, |
473 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); | 473 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _, _)); |
474 | 474 |
475 rtp_sender_->SetStorePacketsStatus(true, 10); | 475 rtp_sender_->SetStorePacketsStatus(true, 10); |
476 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 476 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
477 kRtpExtensionTransmissionTimeOffset, | 477 kRtpExtensionTransmissionTimeOffset, |
478 kTransmissionTimeOffsetExtensionId)); | 478 kTransmissionTimeOffsetExtensionId)); |
479 EXPECT_EQ( | 479 EXPECT_EQ( |
480 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 480 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
481 kAbsoluteSendTimeExtensionId)); | 481 kAbsoluteSendTimeExtensionId)); |
482 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 482 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
483 auto packet = | 483 auto packet = |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
517 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); | 517 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); |
518 } | 518 } |
519 | 519 |
520 // This test sends 1 regular video packet, then 4 padding packets, and then | 520 // This test sends 1 regular video packet, then 4 padding packets, and then |
521 // 1 more regular packet. | 521 // 1 more regular packet. |
522 TEST_F(RtpSenderTest, SendPadding) { | 522 TEST_F(RtpSenderTest, SendPadding) { |
523 // Make all (non-padding) packets go to send queue. | 523 // Make all (non-padding) packets go to send queue. |
524 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, | 524 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, |
525 kSsrc, kSeqNum, _, _, _)); | 525 kSsrc, kSeqNum, _, _, _)); |
526 EXPECT_CALL(mock_rtc_event_log_, | 526 EXPECT_CALL(mock_rtc_event_log_, |
527 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) | 527 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _, _)) |
528 .Times(1 + 4 + 1); | 528 .Times(1 + 4 + 1); |
529 | 529 |
530 uint16_t seq_num = kSeqNum; | 530 uint16_t seq_num = kSeqNum; |
531 uint32_t timestamp = kTimestamp; | 531 uint32_t timestamp = kTimestamp; |
532 rtp_sender_->SetStorePacketsStatus(true, 10); | 532 rtp_sender_->SetStorePacketsStatus(true, 10); |
533 size_t rtp_header_len = kRtpHeaderSize; | 533 size_t rtp_header_len = kRtpHeaderSize; |
534 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 534 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
535 kRtpExtensionTransmissionTimeOffset, | 535 kRtpExtensionTransmissionTimeOffset, |
536 kTransmissionTimeOffsetExtensionId)); | 536 kTransmissionTimeOffsetExtensionId)); |
537 rtp_header_len += 4; // 4 bytes extension. | 537 rtp_header_len += 4; // 4 bytes extension. |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
718 rtp_sender_->SetRtxSsrc(1234); | 718 rtp_sender_->SetRtxSsrc(1234); |
719 | 719 |
720 const size_t kNumPayloadSizes = 10; | 720 const size_t kNumPayloadSizes = 10; |
721 const size_t kPayloadSizes[kNumPayloadSizes] = {500, 550, 600, 650, 700, | 721 const size_t kPayloadSizes[kNumPayloadSizes] = {500, 550, 600, 650, 700, |
722 750, 800, 850, 900, 950}; | 722 750, 800, 850, 900, 950}; |
723 // Expect all packets go through the pacer. | 723 // Expect all packets go through the pacer. |
724 EXPECT_CALL(mock_paced_sender_, | 724 EXPECT_CALL(mock_paced_sender_, |
725 InsertPacket(RtpPacketSender::kNormalPriority, kSsrc, _, _, _, _)) | 725 InsertPacket(RtpPacketSender::kNormalPriority, kSsrc, _, _, _, _)) |
726 .Times(kNumPayloadSizes); | 726 .Times(kNumPayloadSizes); |
727 EXPECT_CALL(mock_rtc_event_log_, | 727 EXPECT_CALL(mock_rtc_event_log_, |
728 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) | 728 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _, _)) |
729 .Times(kNumPayloadSizes); | 729 .Times(kNumPayloadSizes); |
730 | 730 |
731 // Send 10 packets of increasing size. | 731 // Send 10 packets of increasing size. |
732 for (size_t i = 0; i < kNumPayloadSizes; ++i) { | 732 for (size_t i = 0; i < kNumPayloadSizes; ++i) { |
733 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 733 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
734 EXPECT_CALL(transport, SendRtp(_, _, _)).WillOnce(testing::Return(true)); | 734 EXPECT_CALL(transport, SendRtp(_, _, _)).WillOnce(testing::Return(true)); |
735 SendPacket(capture_time_ms, kPayloadSizes[i]); | 735 SendPacket(capture_time_ms, kPayloadSizes[i]); |
736 rtp_sender_->TimeToSendPacket(kSsrc, seq_num++, capture_time_ms, false, | 736 rtp_sender_->TimeToSendPacket(kSsrc, seq_num++, capture_time_ms, false, |
737 PacketInfo::kNotAProbe); | 737 PacketInfo::kNotAProbe); |
738 fake_clock_.AdvanceTimeMilliseconds(33); | 738 fake_clock_.AdvanceTimeMilliseconds(33); |
739 } | 739 } |
740 | 740 |
741 EXPECT_CALL(mock_rtc_event_log_, | 741 EXPECT_CALL(mock_rtc_event_log_, |
742 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) | 742 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _, _)) |
743 .Times(::testing::AtLeast(4)); | 743 .Times(::testing::AtLeast(4)); |
744 | 744 |
745 // The amount of padding to send it too small to send a payload packet. | 745 // The amount of padding to send it too small to send a payload packet. |
746 EXPECT_CALL(transport, SendRtp(_, kMaxPaddingSize + rtp_header_len, _)) | 746 EXPECT_CALL(transport, SendRtp(_, kMaxPaddingSize + rtp_header_len, _)) |
747 .WillOnce(testing::Return(true)); | 747 .WillOnce(testing::Return(true)); |
748 EXPECT_EQ(kMaxPaddingSize, | 748 EXPECT_EQ(kMaxPaddingSize, |
749 rtp_sender_->TimeToSendPadding(49, PacketInfo::kNotAProbe)); | 749 rtp_sender_->TimeToSendPadding(49, PacketInfo::kNotAProbe)); |
750 | 750 |
751 EXPECT_CALL(transport, | 751 EXPECT_CALL(transport, |
752 SendRtp(_, kPayloadSizes[0] + rtp_header_len + kRtxHeaderSize, _)) | 752 SendRtp(_, kPayloadSizes[0] + rtp_header_len + kRtxHeaderSize, _)) |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
827 | 827 |
828 EXPECT_CALL(mock_paced_sender_, | 828 EXPECT_CALL(mock_paced_sender_, |
829 InsertPacket(RtpPacketSender::kLowPriority, kMediaSsrc, kSeqNum, | 829 InsertPacket(RtpPacketSender::kLowPriority, kMediaSsrc, kSeqNum, |
830 _, _, false)); | 830 _, _, false)); |
831 uint16_t flexfec_seq_num; | 831 uint16_t flexfec_seq_num; |
832 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kLowPriority, | 832 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kLowPriority, |
833 kFlexfecSsrc, _, _, _, false)) | 833 kFlexfecSsrc, _, _, _, false)) |
834 .WillOnce(testing::SaveArg<2>(&flexfec_seq_num)); | 834 .WillOnce(testing::SaveArg<2>(&flexfec_seq_num)); |
835 SendGenericPayload(); | 835 SendGenericPayload(); |
836 EXPECT_CALL(mock_rtc_event_log_, | 836 EXPECT_CALL(mock_rtc_event_log_, |
837 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) | 837 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _, _)) |
838 .Times(2); | 838 .Times(2); |
839 EXPECT_TRUE(rtp_sender_->TimeToSendPacket( | 839 EXPECT_TRUE(rtp_sender_->TimeToSendPacket( |
840 kMediaSsrc, kSeqNum, fake_clock_.TimeInMilliseconds(), false, 0)); | 840 kMediaSsrc, kSeqNum, fake_clock_.TimeInMilliseconds(), false, 0)); |
841 EXPECT_TRUE(rtp_sender_->TimeToSendPacket(kFlexfecSsrc, flexfec_seq_num, | 841 EXPECT_TRUE(rtp_sender_->TimeToSendPacket(kFlexfecSsrc, flexfec_seq_num, |
842 fake_clock_.TimeInMilliseconds(), | 842 fake_clock_.TimeInMilliseconds(), |
843 false, 0)); | 843 false, 0)); |
844 ASSERT_EQ(2, transport_.packets_sent()); | 844 ASSERT_EQ(2, transport_.packets_sent()); |
845 const RtpPacketReceived& media_packet = transport_.sent_packets_[0]; | 845 const RtpPacketReceived& media_packet = transport_.sent_packets_[0]; |
846 EXPECT_EQ(kMediaPayloadType, media_packet.PayloadType()); | 846 EXPECT_EQ(kMediaPayloadType, media_packet.PayloadType()); |
847 EXPECT_EQ(kSeqNum, media_packet.SequenceNumber()); | 847 EXPECT_EQ(kSeqNum, media_packet.SequenceNumber()); |
(...skipping 24 matching lines...) Expand all Loading... |
872 rtp_sender_->SetSendPayloadType(kMediaPayloadType); | 872 rtp_sender_->SetSendPayloadType(kMediaPayloadType); |
873 | 873 |
874 // Parameters selected to generate a single FEC packet per media packet. | 874 // Parameters selected to generate a single FEC packet per media packet. |
875 FecProtectionParams params; | 875 FecProtectionParams params; |
876 params.fec_rate = 15; | 876 params.fec_rate = 15; |
877 params.max_fec_frames = 1; | 877 params.max_fec_frames = 1; |
878 params.fec_mask_type = kFecMaskRandom; | 878 params.fec_mask_type = kFecMaskRandom; |
879 rtp_sender_->SetFecParameters(params, params); | 879 rtp_sender_->SetFecParameters(params, params); |
880 | 880 |
881 EXPECT_CALL(mock_rtc_event_log_, | 881 EXPECT_CALL(mock_rtc_event_log_, |
882 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) | 882 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _, _)) |
883 .Times(2); | 883 .Times(2); |
884 SendGenericPayload(); | 884 SendGenericPayload(); |
885 ASSERT_EQ(2, transport_.packets_sent()); | 885 ASSERT_EQ(2, transport_.packets_sent()); |
886 const RtpPacketReceived& media_packet = transport_.sent_packets_[0]; | 886 const RtpPacketReceived& media_packet = transport_.sent_packets_[0]; |
887 EXPECT_EQ(kMediaPayloadType, media_packet.PayloadType()); | 887 EXPECT_EQ(kMediaPayloadType, media_packet.PayloadType()); |
888 EXPECT_EQ(kMediaSsrc, media_packet.Ssrc()); | 888 EXPECT_EQ(kMediaSsrc, media_packet.Ssrc()); |
889 const RtpPacketReceived& flexfec_packet = transport_.sent_packets_[1]; | 889 const RtpPacketReceived& flexfec_packet = transport_.sent_packets_[1]; |
890 EXPECT_EQ(kFlexfecPayloadType, flexfec_packet.PayloadType()); | 890 EXPECT_EQ(kFlexfecPayloadType, flexfec_packet.PayloadType()); |
891 EXPECT_EQ(kFlexfecSsrc, flexfec_packet.Ssrc()); | 891 EXPECT_EQ(kFlexfecSsrc, flexfec_packet.Ssrc()); |
892 } | 892 } |
(...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1510 kPaddingSize, PacketInfo::kNotAProbe)); | 1510 kPaddingSize, PacketInfo::kNotAProbe)); |
1511 | 1511 |
1512 // Requested padding size is too small, will send a larger one. | 1512 // Requested padding size is too small, will send a larger one. |
1513 const size_t kMinPaddingSize = 50; | 1513 const size_t kMinPaddingSize = 50; |
1514 EXPECT_CALL(transport, SendRtp(_, kMinPaddingSize + kRtpHeaderSize, _)) | 1514 EXPECT_CALL(transport, SendRtp(_, kMinPaddingSize + kRtpHeaderSize, _)) |
1515 .WillOnce(testing::Return(true)); | 1515 .WillOnce(testing::Return(true)); |
1516 EXPECT_EQ(kMinPaddingSize, rtp_sender_->TimeToSendPadding( | 1516 EXPECT_EQ(kMinPaddingSize, rtp_sender_->TimeToSendPadding( |
1517 kMinPaddingSize - 5, PacketInfo::kNotAProbe)); | 1517 kMinPaddingSize - 5, PacketInfo::kNotAProbe)); |
1518 } | 1518 } |
1519 } // namespace webrtc | 1519 } // namespace webrtc |
OLD | NEW |