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 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 EXPECT_EQ(0U, rtp_header.paddingLength); | 183 EXPECT_EQ(0U, rtp_header.paddingLength); |
184 } | 184 } |
185 | 185 |
186 void SendPacket(int64_t capture_time_ms, int payload_length) { | 186 void SendPacket(int64_t capture_time_ms, int payload_length) { |
187 uint32_t timestamp = capture_time_ms * 90; | 187 uint32_t timestamp = capture_time_ms * 90; |
188 int32_t rtp_length = rtp_sender_->BuildRtpHeader( | 188 int32_t rtp_length = rtp_sender_->BuildRtpHeader( |
189 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); | 189 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); |
190 ASSERT_GE(rtp_length, 0); | 190 ASSERT_GE(rtp_length, 0); |
191 | 191 |
192 // Packet should be stored in a send bucket. | 192 // Packet should be stored in a send bucket. |
193 EXPECT_TRUE(rtp_sender_->SendToNetwork( | 193 EXPECT_EQ(0, rtp_sender_->SendToNetwork( |
194 packet_, payload_length, rtp_length, capture_time_ms, | 194 packet_, payload_length, rtp_length, capture_time_ms, |
195 kAllowRetransmission, RtpPacketSender::kNormalPriority)); | 195 kAllowRetransmission, RtpPacketSender::kNormalPriority)); |
196 } | 196 } |
197 | 197 |
198 void SendGenericPayload() { | 198 void SendGenericPayload() { |
199 const uint8_t kPayload[] = {47, 11, 32, 93, 89}; | 199 const uint8_t kPayload[] = {47, 11, 32, 93, 89}; |
200 const uint32_t kTimestamp = 1234; | 200 const uint32_t kTimestamp = 1234; |
201 const uint8_t kPayloadType = 127; | 201 const uint8_t kPayloadType = 127; |
202 const int64_t kCaptureTimeMs = fake_clock_.TimeInMilliseconds(); | 202 const int64_t kCaptureTimeMs = fake_clock_.TimeInMilliseconds(); |
203 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; | 203 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; |
204 EXPECT_EQ(0, rtp_sender_->RegisterPayload(payload_name, kPayloadType, 90000, | 204 EXPECT_EQ(0, rtp_sender_->RegisterPayload(payload_name, kPayloadType, 90000, |
205 0, 1500)); | 205 0, 1500)); |
206 | 206 |
207 EXPECT_TRUE(rtp_sender_->SendOutgoingData( | 207 EXPECT_EQ(0, rtp_sender_->SendOutgoingData( |
208 kVideoFrameKey, kPayloadType, kTimestamp, kCaptureTimeMs, kPayload, | 208 kVideoFrameKey, kPayloadType, kTimestamp, kCaptureTimeMs, |
209 sizeof(kPayload), nullptr, nullptr, nullptr)); | 209 kPayload, sizeof(kPayload), nullptr, nullptr)); |
210 } | 210 } |
211 }; | 211 }; |
212 | 212 |
213 // TODO(pbos): Move tests over from WithoutPacer to RtpSenderTest as this is our | 213 // TODO(pbos): Move tests over from WithoutPacer to RtpSenderTest as this is our |
214 // default code path. | 214 // default code path. |
215 class RtpSenderTestWithoutPacer : public RtpSenderTest { | 215 class RtpSenderTestWithoutPacer : public RtpSenderTest { |
216 public: | 216 public: |
217 void SetUp() override { SetUpRtpSender(false); } | 217 void SetUp() override { SetUpRtpSender(false); } |
218 }; | 218 }; |
219 | 219 |
(...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
746 EXPECT_EQ( | 746 EXPECT_EQ( |
747 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 747 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
748 kAbsoluteSendTimeExtensionId)); | 748 kAbsoluteSendTimeExtensionId)); |
749 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 749 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
750 int rtp_length_int = rtp_sender_->BuildRtpHeader( | 750 int rtp_length_int = rtp_sender_->BuildRtpHeader( |
751 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); | 751 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); |
752 ASSERT_NE(-1, rtp_length_int); | 752 ASSERT_NE(-1, rtp_length_int); |
753 size_t rtp_length = static_cast<size_t>(rtp_length_int); | 753 size_t rtp_length = static_cast<size_t>(rtp_length_int); |
754 | 754 |
755 // Packet should be stored in a send bucket. | 755 // Packet should be stored in a send bucket. |
756 EXPECT_TRUE(rtp_sender_->SendToNetwork(packet_, 0, rtp_length, | 756 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, |
757 capture_time_ms, kAllowRetransmission, | 757 capture_time_ms, kAllowRetransmission, |
758 RtpPacketSender::kNormalPriority)); | 758 RtpPacketSender::kNormalPriority)); |
759 | 759 |
760 EXPECT_EQ(0, transport_.packets_sent_); | 760 EXPECT_EQ(0, transport_.packets_sent_); |
761 | 761 |
762 const int kStoredTimeInMs = 100; | 762 const int kStoredTimeInMs = 100; |
763 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); | 763 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); |
764 | 764 |
765 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false, | 765 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false, |
766 PacketInfo::kNotAProbe); | 766 PacketInfo::kNotAProbe); |
767 | 767 |
768 // Process send bucket. Packet should now be sent. | 768 // Process send bucket. Packet should now be sent. |
(...skipping 30 matching lines...) Expand all Loading... |
799 EXPECT_EQ( | 799 EXPECT_EQ( |
800 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 800 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
801 kAbsoluteSendTimeExtensionId)); | 801 kAbsoluteSendTimeExtensionId)); |
802 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 802 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
803 int rtp_length_int = rtp_sender_->BuildRtpHeader( | 803 int rtp_length_int = rtp_sender_->BuildRtpHeader( |
804 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); | 804 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); |
805 ASSERT_NE(-1, rtp_length_int); | 805 ASSERT_NE(-1, rtp_length_int); |
806 size_t rtp_length = static_cast<size_t>(rtp_length_int); | 806 size_t rtp_length = static_cast<size_t>(rtp_length_int); |
807 | 807 |
808 // Packet should be stored in a send bucket. | 808 // Packet should be stored in a send bucket. |
809 EXPECT_TRUE(rtp_sender_->SendToNetwork(packet_, 0, rtp_length, | 809 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, |
810 capture_time_ms, kAllowRetransmission, | 810 capture_time_ms, kAllowRetransmission, |
811 RtpPacketSender::kNormalPriority)); | 811 RtpPacketSender::kNormalPriority)); |
812 | 812 |
813 EXPECT_EQ(0, transport_.packets_sent_); | 813 EXPECT_EQ(0, transport_.packets_sent_); |
814 | 814 |
815 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, | 815 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, |
816 _, kSeqNum, _, _, _)); | 816 _, kSeqNum, _, _, _)); |
817 | 817 |
818 const int kStoredTimeInMs = 100; | 818 const int kStoredTimeInMs = 100; |
819 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); | 819 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); |
820 | 820 |
821 EXPECT_EQ(rtp_length_int, rtp_sender_->ReSendPacket(kSeqNum)); | 821 EXPECT_EQ(rtp_length_int, rtp_sender_->ReSendPacket(kSeqNum)); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
881 webrtc::RTPHeader rtp_header; | 881 webrtc::RTPHeader rtp_header; |
882 | 882 |
883 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 883 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
884 int rtp_length_int = rtp_sender_->BuildRtpHeader( | 884 int rtp_length_int = rtp_sender_->BuildRtpHeader( |
885 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); | 885 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); |
886 const uint32_t media_packet_timestamp = timestamp; | 886 const uint32_t media_packet_timestamp = timestamp; |
887 ASSERT_NE(-1, rtp_length_int); | 887 ASSERT_NE(-1, rtp_length_int); |
888 size_t rtp_length = static_cast<size_t>(rtp_length_int); | 888 size_t rtp_length = static_cast<size_t>(rtp_length_int); |
889 | 889 |
890 // Packet should be stored in a send bucket. | 890 // Packet should be stored in a send bucket. |
891 EXPECT_TRUE(rtp_sender_->SendToNetwork(packet_, 0, rtp_length, | 891 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, |
892 capture_time_ms, kAllowRetransmission, | 892 capture_time_ms, kAllowRetransmission, |
893 RtpPacketSender::kNormalPriority)); | 893 RtpPacketSender::kNormalPriority)); |
894 | 894 |
895 int total_packets_sent = 0; | 895 int total_packets_sent = 0; |
896 EXPECT_EQ(total_packets_sent, transport_.packets_sent_); | 896 EXPECT_EQ(total_packets_sent, transport_.packets_sent_); |
897 | 897 |
898 const int kStoredTimeInMs = 100; | 898 const int kStoredTimeInMs = 100; |
899 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); | 899 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); |
900 rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false, | 900 rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false, |
901 PacketInfo::kNotAProbe); | 901 PacketInfo::kNotAProbe); |
902 // Packet should now be sent. This test doesn't verify the regular video | 902 // Packet should now be sent. This test doesn't verify the regular video |
903 // packet, since it is tested in another test. | 903 // packet, since it is tested in another test. |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
941 capture_time_ms = fake_clock_.TimeInMilliseconds(); | 941 capture_time_ms = fake_clock_.TimeInMilliseconds(); |
942 rtp_length_int = rtp_sender_->BuildRtpHeader(packet_, kPayload, kMarkerBit, | 942 rtp_length_int = rtp_sender_->BuildRtpHeader(packet_, kPayload, kMarkerBit, |
943 timestamp, capture_time_ms); | 943 timestamp, capture_time_ms); |
944 ASSERT_NE(-1, rtp_length_int); | 944 ASSERT_NE(-1, rtp_length_int); |
945 rtp_length = static_cast<size_t>(rtp_length_int); | 945 rtp_length = static_cast<size_t>(rtp_length_int); |
946 | 946 |
947 EXPECT_CALL(mock_paced_sender_, | 947 EXPECT_CALL(mock_paced_sender_, |
948 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)); | 948 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)); |
949 | 949 |
950 // Packet should be stored in a send bucket. | 950 // Packet should be stored in a send bucket. |
951 EXPECT_TRUE(rtp_sender_->SendToNetwork(packet_, 0, rtp_length, | 951 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, |
952 capture_time_ms, kAllowRetransmission, | 952 capture_time_ms, kAllowRetransmission, |
953 RtpPacketSender::kNormalPriority)); | 953 RtpPacketSender::kNormalPriority)); |
954 | 954 |
955 rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false, | 955 rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false, |
956 PacketInfo::kNotAProbe); | 956 PacketInfo::kNotAProbe); |
957 // Process send bucket. | 957 // Process send bucket. |
958 EXPECT_EQ(++total_packets_sent, transport_.packets_sent_); | 958 EXPECT_EQ(++total_packets_sent, transport_.packets_sent_); |
959 EXPECT_EQ(rtp_length, transport_.last_sent_packet_len_); | 959 EXPECT_EQ(rtp_length, transport_.last_sent_packet_len_); |
960 // Parse sent packet. | 960 // Parse sent packet. |
961 ASSERT_TRUE( | 961 ASSERT_TRUE( |
962 rtp_parser->Parse(transport_.last_sent_packet_, rtp_length, &rtp_header)); | 962 rtp_parser->Parse(transport_.last_sent_packet_, rtp_length, &rtp_header)); |
963 | 963 |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1108 } | 1108 } |
1109 | 1109 |
1110 TEST_F(RtpSenderTestWithoutPacer, SendGenericVideo) { | 1110 TEST_F(RtpSenderTestWithoutPacer, SendGenericVideo) { |
1111 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; | 1111 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; |
1112 const uint8_t payload_type = 127; | 1112 const uint8_t payload_type = 127; |
1113 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, | 1113 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, |
1114 0, 1500)); | 1114 0, 1500)); |
1115 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1115 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1116 | 1116 |
1117 // Send keyframe | 1117 // Send keyframe |
1118 ASSERT_TRUE(rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, | 1118 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, |
1119 4321, payload, sizeof(payload), | 1119 4321, payload, sizeof(payload), |
1120 nullptr, nullptr, nullptr)); | 1120 nullptr, nullptr)); |
1121 | 1121 |
1122 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, | 1122 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
1123 transport_.last_sent_packet_len_); | 1123 transport_.last_sent_packet_len_); |
1124 webrtc::RTPHeader rtp_header; | 1124 webrtc::RTPHeader rtp_header; |
1125 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); | 1125 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); |
1126 | 1126 |
1127 const uint8_t* payload_data = | 1127 const uint8_t* payload_data = |
1128 GetPayloadData(rtp_header, transport_.last_sent_packet_); | 1128 GetPayloadData(rtp_header, transport_.last_sent_packet_); |
1129 uint8_t generic_header = *payload_data++; | 1129 uint8_t generic_header = *payload_data++; |
1130 | 1130 |
1131 ASSERT_EQ(sizeof(payload) + sizeof(generic_header), | 1131 ASSERT_EQ(sizeof(payload) + sizeof(generic_header), |
1132 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); | 1132 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); |
1133 | 1133 |
1134 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); | 1134 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); |
1135 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); | 1135 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); |
1136 | 1136 |
1137 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); | 1137 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); |
1138 | 1138 |
1139 // Send delta frame | 1139 // Send delta frame |
1140 payload[0] = 13; | 1140 payload[0] = 13; |
1141 payload[1] = 42; | 1141 payload[1] = 42; |
1142 payload[4] = 13; | 1142 payload[4] = 13; |
1143 | 1143 |
1144 ASSERT_TRUE(rtp_sender_->SendOutgoingData( | 1144 ASSERT_EQ(0, rtp_sender_->SendOutgoingData( |
1145 kVideoFrameDelta, payload_type, 1234, 4321, payload, sizeof(payload), | 1145 kVideoFrameDelta, payload_type, 1234, 4321, payload, |
1146 nullptr, nullptr, nullptr)); | 1146 sizeof(payload), nullptr, nullptr)); |
1147 | 1147 |
1148 RtpUtility::RtpHeaderParser rtp_parser2(transport_.last_sent_packet_, | 1148 RtpUtility::RtpHeaderParser rtp_parser2(transport_.last_sent_packet_, |
1149 transport_.last_sent_packet_len_); | 1149 transport_.last_sent_packet_len_); |
1150 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); | 1150 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); |
1151 | 1151 |
1152 payload_data = GetPayloadData(rtp_header, transport_.last_sent_packet_); | 1152 payload_data = GetPayloadData(rtp_header, transport_.last_sent_packet_); |
1153 generic_header = *payload_data++; | 1153 generic_header = *payload_data++; |
1154 | 1154 |
1155 EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); | 1155 EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); |
1156 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); | 1156 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1188 const uint8_t payload_type = 127; | 1188 const uint8_t payload_type = 127; |
1189 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, | 1189 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, |
1190 0, 1500)); | 1190 0, 1500)); |
1191 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1191 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1192 rtp_sender_->SetStorePacketsStatus(true, 1); | 1192 rtp_sender_->SetStorePacketsStatus(true, 1); |
1193 uint32_t ssrc = rtp_sender_->SSRC(); | 1193 uint32_t ssrc = rtp_sender_->SSRC(); |
1194 | 1194 |
1195 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) | 1195 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) |
1196 .Times(::testing::AtLeast(2)); | 1196 .Times(::testing::AtLeast(2)); |
1197 | 1197 |
1198 ASSERT_TRUE(rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, | 1198 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, |
1199 4321, payload, sizeof(payload), | 1199 4321, payload, sizeof(payload), |
1200 nullptr, nullptr, nullptr)); | 1200 nullptr, nullptr)); |
1201 | 1201 |
1202 EXPECT_EQ(1U, callback.num_calls_); | 1202 EXPECT_EQ(1U, callback.num_calls_); |
1203 EXPECT_EQ(ssrc, callback.ssrc_); | 1203 EXPECT_EQ(ssrc, callback.ssrc_); |
1204 EXPECT_EQ(1, callback.frame_counts_.key_frames); | 1204 EXPECT_EQ(1, callback.frame_counts_.key_frames); |
1205 EXPECT_EQ(0, callback.frame_counts_.delta_frames); | 1205 EXPECT_EQ(0, callback.frame_counts_.delta_frames); |
1206 | 1206 |
1207 ASSERT_TRUE(rtp_sender_->SendOutgoingData( | 1207 ASSERT_EQ(0, rtp_sender_->SendOutgoingData( |
1208 kVideoFrameDelta, payload_type, 1234, 4321, payload, sizeof(payload), | 1208 kVideoFrameDelta, payload_type, 1234, 4321, payload, |
1209 nullptr, nullptr, nullptr)); | 1209 sizeof(payload), nullptr, nullptr)); |
1210 | 1210 |
1211 EXPECT_EQ(2U, callback.num_calls_); | 1211 EXPECT_EQ(2U, callback.num_calls_); |
1212 EXPECT_EQ(ssrc, callback.ssrc_); | 1212 EXPECT_EQ(ssrc, callback.ssrc_); |
1213 EXPECT_EQ(1, callback.frame_counts_.key_frames); | 1213 EXPECT_EQ(1, callback.frame_counts_.key_frames); |
1214 EXPECT_EQ(1, callback.frame_counts_.delta_frames); | 1214 EXPECT_EQ(1, callback.frame_counts_.delta_frames); |
1215 | 1215 |
1216 rtp_sender_.reset(); | 1216 rtp_sender_.reset(); |
1217 } | 1217 } |
1218 | 1218 |
1219 TEST_F(RtpSenderTest, BitrateCallbacks) { | 1219 TEST_F(RtpSenderTest, BitrateCallbacks) { |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1261 0, 1500)); | 1261 0, 1500)); |
1262 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1262 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1263 rtp_sender_->SetStorePacketsStatus(true, 1); | 1263 rtp_sender_->SetStorePacketsStatus(true, 1); |
1264 uint32_t ssrc = rtp_sender_->SSRC(); | 1264 uint32_t ssrc = rtp_sender_->SSRC(); |
1265 | 1265 |
1266 // Initial process call so we get a new time window. | 1266 // Initial process call so we get a new time window. |
1267 rtp_sender_->ProcessBitrate(); | 1267 rtp_sender_->ProcessBitrate(); |
1268 | 1268 |
1269 // Send a few frames. | 1269 // Send a few frames. |
1270 for (uint32_t i = 0; i < kNumPackets; ++i) { | 1270 for (uint32_t i = 0; i < kNumPackets; ++i) { |
1271 ASSERT_TRUE(rtp_sender_->SendOutgoingData( | 1271 ASSERT_EQ(0, rtp_sender_->SendOutgoingData( |
1272 kVideoFrameKey, payload_type, 1234, 4321, payload, sizeof(payload), | 1272 kVideoFrameKey, payload_type, 1234, 4321, payload, |
1273 nullptr, nullptr, nullptr)); | 1273 sizeof(payload), nullptr, nullptr)); |
1274 fake_clock_.AdvanceTimeMilliseconds(kPacketInterval); | 1274 fake_clock_.AdvanceTimeMilliseconds(kPacketInterval); |
1275 } | 1275 } |
1276 | 1276 |
1277 rtp_sender_->ProcessBitrate(); | 1277 rtp_sender_->ProcessBitrate(); |
1278 | 1278 |
1279 // We get one call for every stats updated, thus two calls since both the | 1279 // We get one call for every stats updated, thus two calls since both the |
1280 // stream stats and the retransmit stats are updated once. | 1280 // stream stats and the retransmit stats are updated once. |
1281 EXPECT_EQ(2u, callback.num_calls_); | 1281 EXPECT_EQ(2u, callback.num_calls_); |
1282 EXPECT_EQ(ssrc, callback.ssrc_); | 1282 EXPECT_EQ(ssrc, callback.ssrc_); |
1283 const uint32_t kTotalPacketSize = kPacketOverhead + sizeof(payload); | 1283 const uint32_t kTotalPacketSize = kPacketOverhead + sizeof(payload); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1342 const uint8_t payload_type = 127; | 1342 const uint8_t payload_type = 127; |
1343 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, | 1343 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, |
1344 0, 1500)); | 1344 0, 1500)); |
1345 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1345 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1346 rtp_sender_->SetStorePacketsStatus(true, 1); | 1346 rtp_sender_->SetStorePacketsStatus(true, 1); |
1347 uint32_t ssrc = rtp_sender_->SSRC(); | 1347 uint32_t ssrc = rtp_sender_->SSRC(); |
1348 | 1348 |
1349 rtp_sender_->RegisterRtpStatisticsCallback(&callback); | 1349 rtp_sender_->RegisterRtpStatisticsCallback(&callback); |
1350 | 1350 |
1351 // Send a frame. | 1351 // Send a frame. |
1352 ASSERT_TRUE(rtp_sender_->SendOutgoingData( | 1352 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, |
1353 kVideoFrameKey, payload_type, 1234, 4321, payload, | 1353 4321, payload, sizeof(payload), |
1354 sizeof(payload), nullptr, nullptr, nullptr)); | 1354 nullptr, nullptr)); |
1355 StreamDataCounters expected; | 1355 StreamDataCounters expected; |
1356 expected.transmitted.payload_bytes = 6; | 1356 expected.transmitted.payload_bytes = 6; |
1357 expected.transmitted.header_bytes = 12; | 1357 expected.transmitted.header_bytes = 12; |
1358 expected.transmitted.padding_bytes = 0; | 1358 expected.transmitted.padding_bytes = 0; |
1359 expected.transmitted.packets = 1; | 1359 expected.transmitted.packets = 1; |
1360 expected.retransmitted.payload_bytes = 0; | 1360 expected.retransmitted.payload_bytes = 0; |
1361 expected.retransmitted.header_bytes = 0; | 1361 expected.retransmitted.header_bytes = 0; |
1362 expected.retransmitted.padding_bytes = 0; | 1362 expected.retransmitted.padding_bytes = 0; |
1363 expected.retransmitted.packets = 0; | 1363 expected.retransmitted.packets = 0; |
1364 expected.fec.packets = 0; | 1364 expected.fec.packets = 0; |
(...skipping 19 matching lines...) Expand all Loading... |
1384 expected.transmitted.packets = 3; | 1384 expected.transmitted.packets = 3; |
1385 callback.Matches(ssrc, expected); | 1385 callback.Matches(ssrc, expected); |
1386 | 1386 |
1387 // Send FEC. | 1387 // Send FEC. |
1388 rtp_sender_->SetGenericFECStatus(true, kRedPayloadType, kUlpfecPayloadType); | 1388 rtp_sender_->SetGenericFECStatus(true, kRedPayloadType, kUlpfecPayloadType); |
1389 FecProtectionParams fec_params; | 1389 FecProtectionParams fec_params; |
1390 fec_params.fec_mask_type = kFecMaskRandom; | 1390 fec_params.fec_mask_type = kFecMaskRandom; |
1391 fec_params.fec_rate = 1; | 1391 fec_params.fec_rate = 1; |
1392 fec_params.max_fec_frames = 1; | 1392 fec_params.max_fec_frames = 1; |
1393 rtp_sender_->SetFecParameters(&fec_params, &fec_params); | 1393 rtp_sender_->SetFecParameters(&fec_params, &fec_params); |
1394 ASSERT_TRUE(rtp_sender_->SendOutgoingData( | 1394 ASSERT_EQ(0, rtp_sender_->SendOutgoingData( |
1395 kVideoFrameDelta, payload_type, 1234, 4321, payload, | 1395 kVideoFrameDelta, payload_type, 1234, 4321, payload, |
1396 sizeof(payload), nullptr, nullptr, nullptr)); | 1396 sizeof(payload), nullptr, nullptr)); |
1397 expected.transmitted.payload_bytes = 40; | 1397 expected.transmitted.payload_bytes = 40; |
1398 expected.transmitted.header_bytes = 60; | 1398 expected.transmitted.header_bytes = 60; |
1399 expected.transmitted.packets = 5; | 1399 expected.transmitted.packets = 5; |
1400 expected.fec.packets = 1; | 1400 expected.fec.packets = 1; |
1401 callback.Matches(ssrc, expected); | 1401 callback.Matches(ssrc, expected); |
1402 | 1402 |
1403 rtp_sender_->RegisterRtpStatisticsCallback(nullptr); | 1403 rtp_sender_->RegisterRtpStatisticsCallback(nullptr); |
1404 } | 1404 } |
1405 | 1405 |
1406 TEST_F(RtpSenderAudioTest, SendAudio) { | 1406 TEST_F(RtpSenderAudioTest, SendAudio) { |
1407 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; | 1407 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; |
1408 const uint8_t payload_type = 127; | 1408 const uint8_t payload_type = 127; |
1409 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, | 1409 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, |
1410 0, 1500)); | 1410 0, 1500)); |
1411 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1411 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1412 | 1412 |
1413 ASSERT_TRUE(rtp_sender_->SendOutgoingData( | 1413 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, |
1414 kAudioFrameCN, payload_type, 1234, 4321, payload, | 1414 4321, payload, sizeof(payload), |
1415 sizeof(payload), nullptr, nullptr, nullptr)); | 1415 nullptr, nullptr)); |
1416 | 1416 |
1417 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, | 1417 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
1418 transport_.last_sent_packet_len_); | 1418 transport_.last_sent_packet_len_); |
1419 webrtc::RTPHeader rtp_header; | 1419 webrtc::RTPHeader rtp_header; |
1420 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); | 1420 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); |
1421 | 1421 |
1422 const uint8_t* payload_data = | 1422 const uint8_t* payload_data = |
1423 GetPayloadData(rtp_header, transport_.last_sent_packet_); | 1423 GetPayloadData(rtp_header, transport_.last_sent_packet_); |
1424 | 1424 |
1425 ASSERT_EQ(sizeof(payload), | 1425 ASSERT_EQ(sizeof(payload), |
1426 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); | 1426 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); |
1427 | 1427 |
1428 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); | 1428 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); |
1429 } | 1429 } |
1430 | 1430 |
1431 TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) { | 1431 TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) { |
1432 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel)); | 1432 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel)); |
1433 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, | 1433 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, |
1434 kAudioLevelExtensionId)); | 1434 kAudioLevelExtensionId)); |
1435 | 1435 |
1436 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; | 1436 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; |
1437 const uint8_t payload_type = 127; | 1437 const uint8_t payload_type = 127; |
1438 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, | 1438 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, |
1439 0, 1500)); | 1439 0, 1500)); |
1440 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1440 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1441 | 1441 |
1442 ASSERT_TRUE(rtp_sender_->SendOutgoingData( | 1442 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, |
1443 kAudioFrameCN, payload_type, 1234, 4321, payload, | 1443 4321, payload, sizeof(payload), |
1444 sizeof(payload), nullptr, nullptr, nullptr)); | 1444 nullptr, nullptr)); |
1445 | 1445 |
1446 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, | 1446 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
1447 transport_.last_sent_packet_len_); | 1447 transport_.last_sent_packet_len_); |
1448 webrtc::RTPHeader rtp_header; | 1448 webrtc::RTPHeader rtp_header; |
1449 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); | 1449 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); |
1450 | 1450 |
1451 const uint8_t* payload_data = | 1451 const uint8_t* payload_data = |
1452 GetPayloadData(rtp_header, transport_.last_sent_packet_); | 1452 GetPayloadData(rtp_header, transport_.last_sent_packet_); |
1453 | 1453 |
1454 ASSERT_EQ(sizeof(payload), | 1454 ASSERT_EQ(sizeof(payload), |
(...skipping 28 matching lines...) Expand all Loading... |
1483 // Registering the payload again for audio stream with different payload name. | 1483 // Registering the payload again for audio stream with different payload name. |
1484 const char kPayloadName[] = "payload_name"; | 1484 const char kPayloadName[] = "payload_name"; |
1485 ASSERT_EQ( | 1485 ASSERT_EQ( |
1486 0, rtp_sender_->RegisterPayload(kPayloadName, payload_type, 8000, 1, 0)); | 1486 0, rtp_sender_->RegisterPayload(kPayloadName, payload_type, 8000, 1, 0)); |
1487 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 1487 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
1488 // DTMF event key=9, duration=500 and attenuationdB=10 | 1488 // DTMF event key=9, duration=500 and attenuationdB=10 |
1489 rtp_sender_->SendTelephoneEvent(9, 500, 10); | 1489 rtp_sender_->SendTelephoneEvent(9, 500, 10); |
1490 // During start, it takes the starting timestamp as last sent timestamp. | 1490 // During start, it takes the starting timestamp as last sent timestamp. |
1491 // The duration is calculated as the difference of current and last sent | 1491 // The duration is calculated as the difference of current and last sent |
1492 // timestamp. So for first call it will skip since the duration is zero. | 1492 // timestamp. So for first call it will skip since the duration is zero. |
1493 ASSERT_TRUE(rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, | 1493 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, |
1494 capture_time_ms, 0, nullptr, 0, | 1494 capture_time_ms, 0, nullptr, 0, |
1495 nullptr, nullptr, nullptr)); | 1495 nullptr, nullptr)); |
1496 // DTMF Sample Length is (Frequency/1000) * Duration. | 1496 // DTMF Sample Length is (Frequency/1000) * Duration. |
1497 // So in this case, it is (8000/1000) * 500 = 4000. | 1497 // So in this case, it is (8000/1000) * 500 = 4000. |
1498 // Sending it as two packets. | 1498 // Sending it as two packets. |
1499 ASSERT_TRUE(rtp_sender_->SendOutgoingData( | 1499 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, |
1500 kEmptyFrame, payload_type, capture_time_ms + 2000, 0, | 1500 capture_time_ms + 2000, 0, nullptr, |
1501 nullptr, 0, nullptr, nullptr, nullptr)); | 1501 0, nullptr, nullptr)); |
1502 std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser( | 1502 std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser( |
1503 webrtc::RtpHeaderParser::Create()); | 1503 webrtc::RtpHeaderParser::Create()); |
1504 ASSERT_TRUE(rtp_parser.get() != nullptr); | 1504 ASSERT_TRUE(rtp_parser.get() != nullptr); |
1505 webrtc::RTPHeader rtp_header; | 1505 webrtc::RTPHeader rtp_header; |
1506 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, | 1506 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, |
1507 transport_.last_sent_packet_len_, &rtp_header)); | 1507 transport_.last_sent_packet_len_, &rtp_header)); |
1508 // Marker Bit should be set to 1 for first packet. | 1508 // Marker Bit should be set to 1 for first packet. |
1509 EXPECT_TRUE(rtp_header.markerBit); | 1509 EXPECT_TRUE(rtp_header.markerBit); |
1510 | 1510 |
1511 ASSERT_TRUE(rtp_sender_->SendOutgoingData( | 1511 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, |
1512 kEmptyFrame, payload_type, capture_time_ms + 4000, 0, | 1512 capture_time_ms + 4000, 0, nullptr, |
1513 nullptr, 0, nullptr, nullptr, nullptr)); | 1513 0, nullptr, nullptr)); |
1514 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, | 1514 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, |
1515 transport_.last_sent_packet_len_, &rtp_header)); | 1515 transport_.last_sent_packet_len_, &rtp_header)); |
1516 // Marker Bit should be set to 0 for rest of the packets. | 1516 // Marker Bit should be set to 0 for rest of the packets. |
1517 EXPECT_FALSE(rtp_header.markerBit); | 1517 EXPECT_FALSE(rtp_header.markerBit); |
1518 } | 1518 } |
1519 | 1519 |
1520 TEST_F(RtpSenderTestWithoutPacer, BytesReportedCorrectly) { | 1520 TEST_F(RtpSenderTestWithoutPacer, BytesReportedCorrectly) { |
1521 const char* kPayloadName = "GENERIC"; | 1521 const char* kPayloadName = "GENERIC"; |
1522 const uint8_t kPayloadType = 127; | 1522 const uint8_t kPayloadType = 127; |
1523 rtp_sender_->SetSSRC(1234); | 1523 rtp_sender_->SetSSRC(1234); |
1524 rtp_sender_->SetRtxSsrc(4321); | 1524 rtp_sender_->SetRtxSsrc(4321); |
1525 rtp_sender_->SetRtxPayloadType(kPayloadType - 1, kPayloadType); | 1525 rtp_sender_->SetRtxPayloadType(kPayloadType - 1, kPayloadType); |
1526 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); | 1526 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); |
1527 | 1527 |
1528 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000, | 1528 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000, |
1529 0, 1500)); | 1529 0, 1500)); |
1530 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1530 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1531 | 1531 |
1532 ASSERT_TRUE(rtp_sender_->SendOutgoingData( | 1532 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameKey, kPayloadType, 1234, |
1533 kVideoFrameKey, kPayloadType, 1234, 4321, payload, | 1533 4321, payload, sizeof(payload), |
1534 sizeof(payload), nullptr, nullptr, nullptr)); | 1534 nullptr, nullptr)); |
1535 | 1535 |
1536 // Will send 2 full-size padding packets. | 1536 // Will send 2 full-size padding packets. |
1537 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe); | 1537 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe); |
1538 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe); | 1538 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe); |
1539 | 1539 |
1540 StreamDataCounters rtp_stats; | 1540 StreamDataCounters rtp_stats; |
1541 StreamDataCounters rtx_stats; | 1541 StreamDataCounters rtx_stats; |
1542 rtp_sender_->GetDataCounters(&rtp_stats, &rtx_stats); | 1542 rtp_sender_->GetDataCounters(&rtp_stats, &rtx_stats); |
1543 | 1543 |
1544 // Payload + 1-byte generic header. | 1544 // Payload + 1-byte generic header. |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1621 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), | 1621 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), |
1622 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); | 1622 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); |
1623 | 1623 |
1624 // Verify that this packet does have CVO byte. | 1624 // Verify that this packet does have CVO byte. |
1625 VerifyCVOPacket( | 1625 VerifyCVOPacket( |
1626 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), | 1626 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), |
1627 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, | 1627 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, |
1628 hdr.rotation); | 1628 hdr.rotation); |
1629 } | 1629 } |
1630 } // namespace webrtc | 1630 } // namespace webrtc |
OLD | NEW |