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 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
140 rtp_sender_(), | 140 rtp_sender_(), |
141 payload_(kPayload), | 141 payload_(kPayload), |
142 transport_(), | 142 transport_(), |
143 kMarkerBit(true) {} | 143 kMarkerBit(true) {} |
144 | 144 |
145 void SetUp() override { SetUpRtpSender(true); } | 145 void SetUp() override { SetUpRtpSender(true); } |
146 | 146 |
147 void SetUpRtpSender(bool pacer) { | 147 void SetUpRtpSender(bool pacer) { |
148 rtp_sender_.reset(new RTPSender( | 148 rtp_sender_.reset(new RTPSender( |
149 false, &fake_clock_, &transport_, pacer ? &mock_paced_sender_ : nullptr, | 149 false, &fake_clock_, &transport_, pacer ? &mock_paced_sender_ : nullptr, |
150 &seq_num_allocator_, nullptr, nullptr, nullptr, nullptr, | 150 nullptr, &seq_num_allocator_, nullptr, nullptr, nullptr, nullptr, |
151 &mock_rtc_event_log_, &send_packet_observer_, | 151 &mock_rtc_event_log_, &send_packet_observer_, |
152 &retransmission_rate_limiter_)); | 152 &retransmission_rate_limiter_)); |
153 rtp_sender_->SetSequenceNumber(kSeqNum); | 153 rtp_sender_->SetSequenceNumber(kSeqNum); |
154 rtp_sender_->SetSendPayloadType(kPayload); | 154 rtp_sender_->SetSendPayloadType(kPayload); |
155 rtp_sender_->SetTimestampOffset(0); | 155 rtp_sender_->SetTimestampOffset(0); |
156 } | 156 } |
157 | 157 |
158 SimulatedClock fake_clock_; | 158 SimulatedClock fake_clock_; |
159 testing::NiceMock<MockRtcEventLog> mock_rtc_event_log_; | 159 testing::NiceMock<MockRtcEventLog> mock_rtc_event_log_; |
160 MockRtpPacketSender mock_paced_sender_; | 160 MockRtpPacketSender mock_paced_sender_; |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
232 public: | 232 public: |
233 void SetUp() override { SetUpRtpSender(false); } | 233 void SetUp() override { SetUpRtpSender(false); } |
234 }; | 234 }; |
235 | 235 |
236 class RtpSenderVideoTest : public RtpSenderTest { | 236 class RtpSenderVideoTest : public RtpSenderTest { |
237 protected: | 237 protected: |
238 void SetUp() override { | 238 void SetUp() override { |
239 // TODO(pbos): Set up to use pacer. | 239 // TODO(pbos): Set up to use pacer. |
240 SetUpRtpSender(false); | 240 SetUpRtpSender(false); |
241 rtp_sender_video_.reset( | 241 rtp_sender_video_.reset( |
242 new RTPSenderVideo(&fake_clock_, rtp_sender_.get())); | 242 new RTPSenderVideo(&fake_clock_, rtp_sender_.get(), nullptr)); |
243 } | 243 } |
244 std::unique_ptr<RTPSenderVideo> rtp_sender_video_; | 244 std::unique_ptr<RTPSenderVideo> rtp_sender_video_; |
245 }; | 245 }; |
246 | 246 |
247 TEST_F(RtpSenderTestWithoutPacer, | 247 TEST_F(RtpSenderTestWithoutPacer, |
248 RegisterRtpTransmissionTimeOffsetHeaderExtension) { | 248 RegisterRtpTransmissionTimeOffsetHeaderExtension) { |
249 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionLength()); | 249 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionLength()); |
250 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 250 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
251 kRtpExtensionTransmissionTimeOffset, | 251 kRtpExtensionTransmissionTimeOffset, |
252 kTransmissionTimeOffsetExtensionId)); | 252 kTransmissionTimeOffsetExtensionId)); |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
433 ASSERT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get())); | 433 ASSERT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get())); |
434 ASSERT_TRUE(rtp_sender_->TimeToSendPadding(kPaddingSize, -1)); | 434 ASSERT_TRUE(rtp_sender_->TimeToSendPadding(kPaddingSize, -1)); |
435 | 435 |
436 ASSERT_EQ(1u, transport_.sent_packets_.size()); | 436 ASSERT_EQ(1u, transport_.sent_packets_.size()); |
437 // Verify padding packet timestamp. | 437 // Verify padding packet timestamp. |
438 EXPECT_EQ(kTimestamp, transport_.last_sent_packet().Timestamp()); | 438 EXPECT_EQ(kTimestamp, transport_.last_sent_packet().Timestamp()); |
439 } | 439 } |
440 | 440 |
441 TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) { | 441 TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) { |
442 rtp_sender_.reset(new RTPSender( | 442 rtp_sender_.reset(new RTPSender( |
443 false, &fake_clock_, &transport_, nullptr, | 443 false, &fake_clock_, &transport_, nullptr, nullptr, &seq_num_allocator_, |
444 &seq_num_allocator_, &feedback_observer_, nullptr, nullptr, nullptr, | 444 &feedback_observer_, nullptr, nullptr, nullptr, &mock_rtc_event_log_, |
445 &mock_rtc_event_log_, &send_packet_observer_, | 445 &send_packet_observer_, &retransmission_rate_limiter_)); |
446 &retransmission_rate_limiter_)); | |
447 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 446 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
448 kRtpExtensionTransportSequenceNumber, | 447 kRtpExtensionTransportSequenceNumber, |
449 kTransportSequenceNumberExtensionId)); | 448 kTransportSequenceNumberExtensionId)); |
450 | 449 |
451 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 450 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
452 .WillOnce(testing::Return(kTransportSequenceNumber)); | 451 .WillOnce(testing::Return(kTransportSequenceNumber)); |
453 EXPECT_CALL(send_packet_observer_, | 452 EXPECT_CALL(send_packet_observer_, |
454 OnSendPacket(kTransportSequenceNumber, _, _)) | 453 OnSendPacket(kTransportSequenceNumber, _, _)) |
455 .Times(1); | 454 .Times(1); |
456 EXPECT_CALL(feedback_observer_, | 455 EXPECT_CALL(feedback_observer_, |
(...skipping 22 matching lines...) Expand all Loading... | |
479 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 478 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
480 .WillOnce(testing::Return(kTransportSequenceNumber)); | 479 .WillOnce(testing::Return(kTransportSequenceNumber)); |
481 EXPECT_CALL(send_packet_observer_, | 480 EXPECT_CALL(send_packet_observer_, |
482 OnSendPacket(kTransportSequenceNumber, _, _)) | 481 OnSendPacket(kTransportSequenceNumber, _, _)) |
483 .Times(1); | 482 .Times(1); |
484 | 483 |
485 SendGenericPayload(); | 484 SendGenericPayload(); |
486 } | 485 } |
487 | 486 |
488 TEST_F(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) { | 487 TEST_F(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) { |
489 rtp_sender_.reset(new RTPSender( | 488 rtp_sender_.reset( |
490 false, &fake_clock_, &transport_, &mock_paced_sender_, | 489 new RTPSender(false, &fake_clock_, &transport_, &mock_paced_sender_, |
491 &seq_num_allocator_, &feedback_observer_, nullptr, nullptr, nullptr, | 490 nullptr, &seq_num_allocator_, &feedback_observer_, nullptr, |
492 &mock_rtc_event_log_, &send_packet_observer_, | 491 nullptr, nullptr, &mock_rtc_event_log_, |
493 &retransmission_rate_limiter_)); | 492 &send_packet_observer_, &retransmission_rate_limiter_)); |
494 rtp_sender_->SetStorePacketsStatus(true, 10); | 493 rtp_sender_->SetStorePacketsStatus(true, 10); |
495 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 494 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
496 kRtpExtensionTransportSequenceNumber, | 495 kRtpExtensionTransportSequenceNumber, |
497 kTransportSequenceNumberExtensionId)); | 496 kTransportSequenceNumberExtensionId)); |
498 | 497 |
499 uint16_t seq_num = 0; | 498 uint16_t seq_num = 0; |
500 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) | 499 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) |
501 .Times(1).WillRepeatedly(testing::SaveArg<2>(&seq_num)); | 500 .Times(1).WillRepeatedly(testing::SaveArg<2>(&seq_num)); |
502 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 501 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
503 .WillOnce(testing::Return(kTransportSequenceNumber)); | 502 .WillOnce(testing::Return(kTransportSequenceNumber)); |
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
761 | 760 |
762 SendGenericPayload(); // Packet passed to pacer. | 761 SendGenericPayload(); // Packet passed to pacer. |
763 const bool kIsRetransmit = true; | 762 const bool kIsRetransmit = true; |
764 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), | 763 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), |
765 kIsRetransmit, PacketInfo::kNotAProbe); | 764 kIsRetransmit, PacketInfo::kNotAProbe); |
766 EXPECT_EQ(1, transport_.packets_sent()); | 765 EXPECT_EQ(1, transport_.packets_sent()); |
767 } | 766 } |
768 | 767 |
769 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) { | 768 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) { |
770 rtp_sender_.reset(new RTPSender( | 769 rtp_sender_.reset(new RTPSender( |
771 false, &fake_clock_, &transport_, &mock_paced_sender_, | 770 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr, |
772 nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr, | 771 nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr, |
773 nullptr, nullptr, &send_packet_observer_, &retransmission_rate_limiter_)); | 772 nullptr, nullptr, &send_packet_observer_, &retransmission_rate_limiter_)); |
774 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 773 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
775 kRtpExtensionTransportSequenceNumber, | 774 kRtpExtensionTransportSequenceNumber, |
776 kTransportSequenceNumberExtensionId)); | 775 kTransportSequenceNumberExtensionId)); |
777 rtp_sender_->SetSequenceNumber(kSeqNum); | 776 rtp_sender_->SetSequenceNumber(kSeqNum); |
778 rtp_sender_->SetStorePacketsStatus(true, 10); | 777 rtp_sender_->SetStorePacketsStatus(true, 10); |
779 | 778 |
780 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); | 779 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); |
781 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1); | 780 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1); |
782 | 781 |
783 SendGenericPayload(); // Packet passed to pacer. | 782 SendGenericPayload(); // Packet passed to pacer. |
784 const bool kIsRetransmit = false; | 783 const bool kIsRetransmit = false; |
785 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), | 784 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), |
786 kIsRetransmit, PacketInfo::kNotAProbe); | 785 kIsRetransmit, PacketInfo::kNotAProbe); |
787 EXPECT_EQ(1, transport_.packets_sent()); | 786 EXPECT_EQ(1, transport_.packets_sent()); |
788 } | 787 } |
789 | 788 |
790 TEST_F(RtpSenderTest, SendRedundantPayloads) { | 789 TEST_F(RtpSenderTest, SendRedundantPayloads) { |
791 MockTransport transport; | 790 MockTransport transport; |
792 rtp_sender_.reset(new RTPSender( | 791 rtp_sender_.reset(new RTPSender( |
793 false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, nullptr, | 792 false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, nullptr, |
794 nullptr, nullptr, nullptr, &mock_rtc_event_log_, nullptr, | 793 nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, nullptr, |
795 &retransmission_rate_limiter_)); | 794 &retransmission_rate_limiter_)); |
796 | 795 |
797 rtp_sender_->SetSequenceNumber(kSeqNum); | 796 rtp_sender_->SetSequenceNumber(kSeqNum); |
798 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload); | 797 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload); |
799 | 798 |
800 uint16_t seq_num = kSeqNum; | 799 uint16_t seq_num = kSeqNum; |
801 rtp_sender_->SetStorePacketsStatus(true, 10); | 800 rtp_sender_->SetStorePacketsStatus(true, 10); |
802 int32_t rtp_header_len = kRtpHeaderSize; | 801 int32_t rtp_header_len = kRtpHeaderSize; |
803 EXPECT_EQ( | 802 EXPECT_EQ( |
804 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 803 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
893 | 892 |
894 EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); | 893 EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); |
895 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); | 894 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); |
896 | 895 |
897 ASSERT_EQ(sizeof(payload) + sizeof(generic_header), | 896 ASSERT_EQ(sizeof(payload) + sizeof(generic_header), |
898 transport_.last_sent_packet().payload_size()); | 897 transport_.last_sent_packet().payload_size()); |
899 | 898 |
900 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); | 899 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); |
901 } | 900 } |
902 | 901 |
902 TEST_F(RtpSenderTest, SendFlexfecPackets) { | |
903 constexpr int kFlexfecPayloadType = 118; | |
904 constexpr uint32_t kMediaSsrc = 1234; | |
905 constexpr uint32_t kFlexfecSsrc = 5678; | |
906 const std::vector<RtpExtension> kNoRtpExtensions; | |
907 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | |
908 kNoRtpExtensions, &fake_clock_); | |
909 | |
910 // Reset |rtp_sender_| to use FlexFEC. | |
911 rtp_sender_.reset( | |
912 new RTPSender(false, &fake_clock_, &transport_, &mock_paced_sender_, | |
913 &flexfec_sender, &seq_num_allocator_, nullptr, nullptr, | |
914 nullptr, nullptr, &mock_rtc_event_log_, | |
915 &send_packet_observer_, &retransmission_rate_limiter_)); | |
916 rtp_sender_->SetSSRC(kMediaSsrc); | |
917 rtp_sender_->SetSequenceNumber(kSeqNum); | |
918 rtp_sender_->SetSendPayloadType(kPayload); | |
919 rtp_sender_->SetStorePacketsStatus(true, 10); | |
920 | |
921 // Parameters selected to generate a single FEC packet per media packet. | |
922 FecProtectionParams params; | |
923 params.fec_rate = 15; | |
924 params.max_fec_frames = 1; | |
925 params.fec_mask_type = kFecMaskRandom; | |
926 rtp_sender_->SetFecParameters(params, params); | |
927 | |
928 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kLowPriority, | |
929 kMediaSsrc, _, _, _, false)); | |
930 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kLowPriority, | |
931 kFlexfecSsrc, _, _, _, false)); | |
932 SendGenericPayload(); | |
933 // TODO(brandtr): Update this code when the FlexFEC packets are no longer | |
danilchap
2016/11/08 14:52:49
does it mean flexfec packets will not be sent with
brandtr
2016/11/09 10:40:05
Yes :( My next CL will address this issue, using t
| |
934 // lost between PacedSender and RTPSender. | |
935 constexpr int kNumPacketsExpected = 1; | |
936 EXPECT_CALL(mock_rtc_event_log_, | |
937 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) | |
938 .Times(kNumPacketsExpected); | |
939 EXPECT_TRUE(rtp_sender_->TimeToSendPacket( | |
940 kSeqNum, fake_clock_.TimeInMilliseconds(), false, 0)); | |
941 EXPECT_EQ(kNumPacketsExpected, transport_.packets_sent()); | |
942 } | |
943 | |
944 TEST_F(RtpSenderTestWithoutPacer, SendFlexfecPackets) { | |
945 constexpr int kFlexfecPayloadType = 118; | |
946 constexpr uint32_t kMediaSsrc = 1234; | |
947 constexpr uint32_t kFlexfecSsrc = 5678; | |
948 const std::vector<RtpExtension> kNoRtpExtensions; | |
949 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | |
950 kNoRtpExtensions, &fake_clock_); | |
951 | |
952 // Reset |rtp_sender_| to use FlexFEC. | |
953 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, | |
954 &flexfec_sender, &seq_num_allocator_, nullptr, | |
955 nullptr, nullptr, nullptr, | |
956 &mock_rtc_event_log_, &send_packet_observer_, | |
957 &retransmission_rate_limiter_)); | |
958 rtp_sender_->SetSSRC(kMediaSsrc); | |
959 rtp_sender_->SetSequenceNumber(kSeqNum); | |
960 rtp_sender_->SetSendPayloadType(kPayload); | |
961 | |
962 // Parameters selected to generate a single FEC packet per media packet. | |
963 FecProtectionParams params; | |
964 params.fec_rate = 15; | |
965 params.max_fec_frames = 1; | |
966 params.fec_mask_type = kFecMaskRandom; | |
967 rtp_sender_->SetFecParameters(params, params); | |
968 | |
969 EXPECT_CALL(mock_rtc_event_log_, | |
970 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) | |
971 .Times(2); | |
972 SendGenericPayload(); | |
973 EXPECT_EQ(2, transport_.packets_sent()); | |
974 } | |
975 | |
903 TEST_F(RtpSenderTest, FrameCountCallbacks) { | 976 TEST_F(RtpSenderTest, FrameCountCallbacks) { |
904 class TestCallback : public FrameCountObserver { | 977 class TestCallback : public FrameCountObserver { |
905 public: | 978 public: |
906 TestCallback() : FrameCountObserver(), num_calls_(0), ssrc_(0) {} | 979 TestCallback() : FrameCountObserver(), num_calls_(0), ssrc_(0) {} |
907 virtual ~TestCallback() {} | 980 virtual ~TestCallback() {} |
908 | 981 |
909 void FrameCountUpdated(const FrameCounts& frame_counts, | 982 void FrameCountUpdated(const FrameCounts& frame_counts, |
910 uint32_t ssrc) override { | 983 uint32_t ssrc) override { |
911 ++num_calls_; | 984 ++num_calls_; |
912 ssrc_ = ssrc; | 985 ssrc_ = ssrc; |
913 frame_counts_ = frame_counts; | 986 frame_counts_ = frame_counts; |
914 } | 987 } |
915 | 988 |
916 uint32_t num_calls_; | 989 uint32_t num_calls_; |
917 uint32_t ssrc_; | 990 uint32_t ssrc_; |
918 FrameCounts frame_counts_; | 991 FrameCounts frame_counts_; |
919 } callback; | 992 } callback; |
920 | 993 |
921 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, | 994 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, |
922 &mock_paced_sender_, nullptr, nullptr, | 995 &mock_paced_sender_, nullptr, nullptr, |
923 nullptr, &callback, nullptr, nullptr, nullptr, | 996 nullptr, nullptr, &callback, nullptr, nullptr, |
924 &retransmission_rate_limiter_)); | 997 nullptr, &retransmission_rate_limiter_)); |
925 | 998 |
926 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; | 999 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; |
927 const uint8_t payload_type = 127; | 1000 const uint8_t payload_type = 127; |
928 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, | 1001 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, |
929 0, 1500)); | 1002 0, 1500)); |
930 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1003 uint8_t payload[] = {47, 11, 32, 93, 89}; |
931 rtp_sender_->SetStorePacketsStatus(true, 1); | 1004 rtp_sender_->SetStorePacketsStatus(true, 1); |
932 uint32_t ssrc = rtp_sender_->SSRC(); | 1005 uint32_t ssrc = rtp_sender_->SSRC(); |
933 | 1006 |
934 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) | 1007 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
973 ssrc_ = ssrc; | 1046 ssrc_ = ssrc; |
974 total_bitrate_ = total_bitrate; | 1047 total_bitrate_ = total_bitrate; |
975 retransmit_bitrate_ = retransmit_bitrate; | 1048 retransmit_bitrate_ = retransmit_bitrate; |
976 } | 1049 } |
977 | 1050 |
978 uint32_t num_calls_; | 1051 uint32_t num_calls_; |
979 uint32_t ssrc_; | 1052 uint32_t ssrc_; |
980 uint32_t total_bitrate_; | 1053 uint32_t total_bitrate_; |
981 uint32_t retransmit_bitrate_; | 1054 uint32_t retransmit_bitrate_; |
982 } callback; | 1055 } callback; |
983 rtp_sender_.reset(new RTPSender( | 1056 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, |
984 false, &fake_clock_, &transport_, nullptr, nullptr, nullptr, &callback, | 1057 nullptr, nullptr, nullptr, &callback, nullptr, |
985 nullptr, nullptr, nullptr, nullptr, &retransmission_rate_limiter_)); | 1058 nullptr, nullptr, nullptr, |
1059 &retransmission_rate_limiter_)); | |
986 | 1060 |
987 // Simulate kNumPackets sent with kPacketInterval ms intervals, with the | 1061 // Simulate kNumPackets sent with kPacketInterval ms intervals, with the |
988 // number of packets selected so that we fill (but don't overflow) the one | 1062 // number of packets selected so that we fill (but don't overflow) the one |
989 // second averaging window. | 1063 // second averaging window. |
990 const uint32_t kWindowSizeMs = 1000; | 1064 const uint32_t kWindowSizeMs = 1000; |
991 const uint32_t kPacketInterval = 20; | 1065 const uint32_t kPacketInterval = 20; |
992 const uint32_t kNumPackets = | 1066 const uint32_t kNumPackets = |
993 (kWindowSizeMs - kPacketInterval) / kPacketInterval; | 1067 (kWindowSizeMs - kPacketInterval) / kPacketInterval; |
994 // Overhead = 12 bytes RTP header + 1 byte generic header. | 1068 // Overhead = 12 bytes RTP header + 1 byte generic header. |
995 const uint32_t kPacketOverhead = 13; | 1069 const uint32_t kPacketOverhead = 13; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1030 | 1104 |
1031 rtp_sender_.reset(); | 1105 rtp_sender_.reset(); |
1032 } | 1106 } |
1033 | 1107 |
1034 class RtpSenderAudioTest : public RtpSenderTest { | 1108 class RtpSenderAudioTest : public RtpSenderTest { |
1035 protected: | 1109 protected: |
1036 RtpSenderAudioTest() {} | 1110 RtpSenderAudioTest() {} |
1037 | 1111 |
1038 void SetUp() override { | 1112 void SetUp() override { |
1039 payload_ = kAudioPayload; | 1113 payload_ = kAudioPayload; |
1040 rtp_sender_.reset(new RTPSender( | 1114 rtp_sender_.reset(new RTPSender(true, &fake_clock_, &transport_, nullptr, |
1041 true, &fake_clock_, &transport_, nullptr, nullptr, nullptr, nullptr, | 1115 nullptr, nullptr, nullptr, nullptr, nullptr, |
1042 nullptr, nullptr, nullptr, nullptr, &retransmission_rate_limiter_)); | 1116 nullptr, nullptr, nullptr, |
1117 &retransmission_rate_limiter_)); | |
1043 rtp_sender_->SetSequenceNumber(kSeqNum); | 1118 rtp_sender_->SetSequenceNumber(kSeqNum); |
1044 } | 1119 } |
1045 }; | 1120 }; |
1046 | 1121 |
1047 TEST_F(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) { | 1122 TEST_F(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) { |
1048 class TestCallback : public StreamDataCountersCallback { | 1123 class TestCallback : public StreamDataCountersCallback { |
1049 public: | 1124 public: |
1050 TestCallback() : StreamDataCountersCallback(), ssrc_(0), counters_() {} | 1125 TestCallback() : StreamDataCountersCallback(), ssrc_(0), counters_() {} |
1051 virtual ~TestCallback() {} | 1126 virtual ~TestCallback() {} |
1052 | 1127 |
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1383 EXPECT_EQ(kVideoRotation_0, | 1458 EXPECT_EQ(kVideoRotation_0, |
1384 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 0)); | 1459 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 0)); |
1385 EXPECT_EQ(kVideoRotation_90, | 1460 EXPECT_EQ(kVideoRotation_90, |
1386 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 1)); | 1461 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 1)); |
1387 EXPECT_EQ(kVideoRotation_180, | 1462 EXPECT_EQ(kVideoRotation_180, |
1388 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 2)); | 1463 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 2)); |
1389 EXPECT_EQ(kVideoRotation_270, | 1464 EXPECT_EQ(kVideoRotation_270, |
1390 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 3)); | 1465 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 3)); |
1391 } | 1466 } |
1392 | 1467 |
1468 TEST_F(RtpSenderVideoTest, SendFlexfecPackets) { | |
danilchap
2016/11/08 14:52:49
this test is likely not needed: the use case alrea
brandtr
2016/11/09 10:40:05
Removed!
| |
1469 constexpr size_t kPayloadLength = 500; | |
1470 uint8_t kFrameData[kPayloadLength]; | |
1471 constexpr int kFlexfecPayloadType = 118; | |
1472 constexpr uint32_t kMediaSsrc = 1234; | |
1473 constexpr uint32_t kFlexfecSsrc = 5678; | |
1474 const std::vector<RtpExtension> kNoRtpExtensions; | |
1475 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | |
1476 kNoRtpExtensions, &fake_clock_); | |
1477 | |
1478 // Reset |rtp_sender_| to use pacer. | |
1479 rtp_sender_.reset( | |
1480 new RTPSender(false, &fake_clock_, &transport_, &mock_paced_sender_, | |
1481 nullptr, &seq_num_allocator_, nullptr, nullptr, nullptr, | |
1482 nullptr, &mock_rtc_event_log_, &send_packet_observer_, | |
1483 &retransmission_rate_limiter_)); | |
1484 rtp_sender_->SetSSRC(kMediaSsrc); | |
1485 rtp_sender_->SetSequenceNumber(kSeqNum); | |
1486 rtp_sender_->SetSendPayloadType(kPayload); | |
1487 // Create specific RTPSenderVideo to test. | |
1488 rtp_sender_video_.reset( | |
1489 new RTPSenderVideo(&fake_clock_, rtp_sender_.get(), &flexfec_sender)); | |
1490 | |
1491 // Parameters selected to generate a single FEC packet per media packet. | |
1492 FecProtectionParams params; | |
1493 params.fec_rate = 15; | |
1494 params.max_fec_frames = 1; | |
1495 params.fec_mask_type = kFecMaskRandom; | |
1496 rtp_sender_video_->SetFecParameters(params, params); | |
1497 | |
1498 // Send a single key frame, and intercept calls to PacedSender. | |
1499 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kLowPriority, | |
1500 kMediaSsrc, _, _, _, false)); | |
1501 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kLowPriority, | |
1502 kFlexfecSsrc, _, _, _, false)); | |
1503 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload, | |
1504 kTimestamp, 0, kFrameData, kPayloadLength, | |
1505 nullptr, nullptr); | |
1506 } | |
1507 | |
1393 } // namespace webrtc | 1508 } // namespace webrtc |
OLD | NEW |