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 445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
456 fake_clock_.TimeInMilliseconds(), false, | 456 fake_clock_.TimeInMilliseconds(), false, |
457 PacedPacketInfo()); | 457 PacedPacketInfo()); |
458 | 458 |
459 const auto& packet = transport_.last_sent_packet(); | 459 const auto& packet = transport_.last_sent_packet(); |
460 uint16_t transport_seq_no; | 460 uint16_t transport_seq_no; |
461 EXPECT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); | 461 EXPECT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); |
462 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); | 462 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); |
463 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); | 463 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); |
464 } | 464 } |
465 | 465 |
466 // Disabled due to webrtc:7859. Until issues with FEC resolved, pacer exit | 466 TEST_P(RtpSenderTestWithoutPacer, WritesTimestampToTimingExtension) { |
467 // timstamp is not updated in the pacer. | |
468 TEST_P(RtpSenderTestWithoutPacer, DISABLED_WritesTimestampToTimingExtension) { | |
469 rtp_sender_->SetStorePacketsStatus(true, 10); | 467 rtp_sender_->SetStorePacketsStatus(true, 10); |
470 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 468 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
471 kRtpExtensionVideoTiming, kVideoTimingExtensionId)); | 469 kRtpExtensionVideoTiming, kVideoTimingExtensionId)); |
472 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 470 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
473 auto packet = rtp_sender_->AllocatePacket(); | 471 auto packet = rtp_sender_->AllocatePacket(); |
474 packet->SetPayloadType(kPayload); | 472 packet->SetPayloadType(kPayload); |
475 packet->SetMarker(true); | 473 packet->SetMarker(true); |
476 packet->SetTimestamp(kTimestamp); | 474 packet->SetTimestamp(kTimestamp); |
477 packet->set_capture_time_ms(capture_time_ms); | 475 packet->set_capture_time_ms(capture_time_ms); |
478 const VideoTiming kVideoTiming = {0u, 0u, 0u, 0u, 0u, 0u, true}; | 476 const VideoTiming kVideoTiming = {0u, 0u, 0u, 0u, 0u, 0u, true}; |
(...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
937 const RtpPacketReceived& media_packet = transport_.sent_packets_[0]; | 935 const RtpPacketReceived& media_packet = transport_.sent_packets_[0]; |
938 EXPECT_EQ(kMediaPayloadType, media_packet.PayloadType()); | 936 EXPECT_EQ(kMediaPayloadType, media_packet.PayloadType()); |
939 EXPECT_EQ(kSeqNum, media_packet.SequenceNumber()); | 937 EXPECT_EQ(kSeqNum, media_packet.SequenceNumber()); |
940 EXPECT_EQ(kMediaSsrc, media_packet.Ssrc()); | 938 EXPECT_EQ(kMediaSsrc, media_packet.Ssrc()); |
941 const RtpPacketReceived& flexfec_packet = transport_.sent_packets_[1]; | 939 const RtpPacketReceived& flexfec_packet = transport_.sent_packets_[1]; |
942 EXPECT_EQ(kFlexfecPayloadType, flexfec_packet.PayloadType()); | 940 EXPECT_EQ(kFlexfecPayloadType, flexfec_packet.PayloadType()); |
943 EXPECT_EQ(flexfec_seq_num, flexfec_packet.SequenceNumber()); | 941 EXPECT_EQ(flexfec_seq_num, flexfec_packet.SequenceNumber()); |
944 EXPECT_EQ(kFlexfecSsrc, flexfec_packet.Ssrc()); | 942 EXPECT_EQ(kFlexfecSsrc, flexfec_packet.Ssrc()); |
945 } | 943 } |
946 | 944 |
945 // TODO(ilnik): because of webrtc:7859. Once FEC moved below pacer, this test | |
946 // should be removed. | |
947 TEST_P(RtpSenderTest, NoFlexfecForTimingFrames) { | |
948 constexpr int kMediaPayloadType = 127; | |
949 constexpr int kFlexfecPayloadType = 118; | |
950 constexpr uint32_t kMediaSsrc = 1234; | |
951 constexpr uint32_t kFlexfecSsrc = 5678; | |
952 const std::vector<RtpExtension> kNoRtpExtensions; | |
953 const std::vector<RtpExtensionSize> kNoRtpExtensionSizes; | |
954 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | |
955 kNoRtpExtensions, kNoRtpExtensionSizes, | |
956 nullptr /* rtp_state */, &fake_clock_); | |
957 | |
958 // Reset |rtp_sender_| to use FlexFEC. | |
959 rtp_sender_.reset(new RTPSender( | |
960 false, &fake_clock_, &transport_, &mock_paced_sender_, &flexfec_sender, | |
961 &seq_num_allocator_, nullptr, nullptr, nullptr, nullptr, | |
962 &mock_rtc_event_log_, &send_packet_observer_, | |
963 &retransmission_rate_limiter_, nullptr)); | |
964 rtp_sender_->SetSSRC(kMediaSsrc); | |
965 rtp_sender_->SetSequenceNumber(kSeqNum); | |
966 rtp_sender_->SetSendPayloadType(kMediaPayloadType); | |
967 rtp_sender_->SetStorePacketsStatus(true, 10); | |
968 | |
969 // Parameters selected to generate a single FEC packet per media packet. | |
970 FecProtectionParams params; | |
971 params.fec_rate = 15; | |
972 params.max_fec_frames = 1; | |
973 params.fec_mask_type = kFecMaskRandom; | |
974 rtp_sender_->SetFecParameters(params, params); | |
975 | |
976 EXPECT_CALL(mock_paced_sender_, | |
977 InsertPacket(RtpPacketSender::kLowPriority, kMediaSsrc, kSeqNum, | |
978 _, _, false)); | |
979 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kLowPriority, | |
980 kFlexfecSsrc, _, _, _, false)) | |
981 .Times(0); // Not called because packet should not be protected. | |
982 | |
983 const uint32_t kTimestamp = 1234; | |
984 const uint8_t kPayloadType = 127; | |
985 const int64_t kCaptureTimeMs = fake_clock_.TimeInMilliseconds(); | |
986 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; | |
987 EXPECT_EQ(0, rtp_sender_->RegisterPayload(payload_name, kPayloadType, 90000, | |
988 0, 1500)); | |
989 RTPVideoHeader video_header; | |
990 memset(&video_header, 0, sizeof(RTPVideoHeader)); | |
991 video_header.video_timing.is_timing_frame = true; | |
992 EXPECT_TRUE(rtp_sender_->SendOutgoingData( | |
993 kVideoFrameKey, kPayloadType, kTimestamp, kCaptureTimeMs, kPayloadData, | |
994 sizeof(kPayloadData), nullptr, &video_header, nullptr)); | |
995 | |
996 EXPECT_CALL(mock_rtc_event_log_, | |
997 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) | |
998 .Times(1); | |
999 EXPECT_TRUE(rtp_sender_->TimeToSendPacket(kMediaSsrc, kSeqNum, | |
1000 fake_clock_.TimeInMilliseconds(), | |
1001 false, PacedPacketInfo())); | |
1002 ASSERT_EQ(1, transport_.packets_sent()); | |
1003 const RtpPacketReceived& media_packet = transport_.sent_packets_[0]; | |
1004 EXPECT_EQ(kMediaPayloadType, media_packet.PayloadType()); | |
1005 EXPECT_EQ(kSeqNum, media_packet.SequenceNumber()); | |
1006 EXPECT_EQ(kMediaSsrc, media_packet.Ssrc()); | |
1007 | |
1008 | |
1009 // Now try to send not a timing frame. | |
1010 uint16_t flexfec_seq_num; | |
1011 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kLowPriority, | |
1012 kFlexfecSsrc, _, _, _, false)) | |
1013 .WillOnce(testing::SaveArg<2>(&flexfec_seq_num)); | |
1014 EXPECT_CALL(mock_paced_sender_, | |
1015 InsertPacket(RtpPacketSender::kLowPriority, kMediaSsrc, | |
1016 kSeqNum+1, _, _, false)); | |
1017 video_header.video_timing.is_timing_frame = false; | |
1018 EXPECT_TRUE(rtp_sender_->SendOutgoingData( | |
1019 kVideoFrameKey, kPayloadType, kTimestamp+1, kCaptureTimeMs+1, | |
1020 kPayloadData, sizeof(kPayloadData), nullptr, &video_header, nullptr)); | |
1021 | |
1022 EXPECT_CALL(mock_rtc_event_log_, | |
1023 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) | |
1024 .Times(2); | |
1025 EXPECT_TRUE(rtp_sender_->TimeToSendPacket(kMediaSsrc, kSeqNum+1, | |
1026 fake_clock_.TimeInMilliseconds(), | |
1027 false, PacedPacketInfo())); | |
1028 EXPECT_TRUE(rtp_sender_->TimeToSendPacket(kFlexfecSsrc, flexfec_seq_num, | |
1029 fake_clock_.TimeInMilliseconds(), | |
1030 false, PacedPacketInfo())); | |
1031 ASSERT_EQ(3, transport_.packets_sent()); | |
1032 const RtpPacketReceived& media_packet2 = transport_.sent_packets_[1]; | |
1033 EXPECT_EQ(kMediaPayloadType, media_packet2.PayloadType()); | |
1034 EXPECT_EQ(kSeqNum+1, media_packet2.SequenceNumber()); | |
brandtr
2017/06/21 13:32:00
format
ilnik
2017/06/21 13:50:47
Done.
| |
1035 EXPECT_EQ(kMediaSsrc, media_packet2.Ssrc()); | |
1036 const RtpPacketReceived& flexfec_packet = transport_.sent_packets_[2]; | |
1037 EXPECT_EQ(kFlexfecPayloadType, flexfec_packet.PayloadType()); | |
1038 EXPECT_EQ(flexfec_seq_num, flexfec_packet.SequenceNumber()); | |
1039 EXPECT_EQ(kFlexfecSsrc, flexfec_packet.Ssrc()); | |
1040 } | |
1041 | |
1042 | |
947 TEST_P(RtpSenderTestWithoutPacer, SendFlexfecPackets) { | 1043 TEST_P(RtpSenderTestWithoutPacer, SendFlexfecPackets) { |
948 constexpr int kMediaPayloadType = 127; | 1044 constexpr int kMediaPayloadType = 127; |
949 constexpr int kFlexfecPayloadType = 118; | 1045 constexpr int kFlexfecPayloadType = 118; |
950 constexpr uint32_t kMediaSsrc = 1234; | 1046 constexpr uint32_t kMediaSsrc = 1234; |
951 constexpr uint32_t kFlexfecSsrc = 5678; | 1047 constexpr uint32_t kFlexfecSsrc = 5678; |
952 const std::vector<RtpExtension> kNoRtpExtensions; | 1048 const std::vector<RtpExtension> kNoRtpExtensions; |
953 const std::vector<RtpExtensionSize> kNoRtpExtensionSizes; | 1049 const std::vector<RtpExtensionSize> kNoRtpExtensionSizes; |
954 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 1050 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
955 kNoRtpExtensions, kNoRtpExtensionSizes, | 1051 kNoRtpExtensions, kNoRtpExtensionSizes, |
956 nullptr /* rtp_state */, &fake_clock_); | 1052 nullptr /* rtp_state */, &fake_clock_); |
(...skipping 661 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1618 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, | 1714 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, |
1619 RtpSenderTestWithoutPacer, | 1715 RtpSenderTestWithoutPacer, |
1620 ::testing::Bool()); | 1716 ::testing::Bool()); |
1621 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, | 1717 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, |
1622 RtpSenderVideoTest, | 1718 RtpSenderVideoTest, |
1623 ::testing::Bool()); | 1719 ::testing::Bool()); |
1624 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, | 1720 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, |
1625 RtpSenderAudioTest, | 1721 RtpSenderAudioTest, |
1626 ::testing::Bool()); | 1722 ::testing::Bool()); |
1627 } // namespace webrtc | 1723 } // namespace webrtc |
OLD | NEW |