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 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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_EQ(0, rtp_sender_->SendOutgoingData( | 207 EXPECT_EQ(0, rtp_sender_->SendOutgoingData( |
208 kVideoFrameKey, kPayloadType, kTimestamp, kCaptureTimeMs, | 208 kVideoFrameKey, kPayloadType, kTimestamp, kCaptureTimeMs, |
209 kPayload, sizeof(kPayload), nullptr)); | 209 kPayload, sizeof(kPayload), nullptr, 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 882 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1102 } | 1102 } |
1103 | 1103 |
1104 TEST_F(RtpSenderTestWithoutPacer, SendGenericVideo) { | 1104 TEST_F(RtpSenderTestWithoutPacer, SendGenericVideo) { |
1105 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; | 1105 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; |
1106 const uint8_t payload_type = 127; | 1106 const uint8_t payload_type = 127; |
1107 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, | 1107 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, |
1108 0, 1500)); | 1108 0, 1500)); |
1109 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1109 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1110 | 1110 |
1111 // Send keyframe | 1111 // Send keyframe |
1112 ASSERT_EQ( | 1112 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, |
1113 0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 4321, | 1113 4321, payload, sizeof(payload), |
1114 payload, sizeof(payload), nullptr)); | 1114 nullptr, nullptr, nullptr)); |
1115 | 1115 |
1116 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, | 1116 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
1117 transport_.last_sent_packet_len_); | 1117 transport_.last_sent_packet_len_); |
1118 webrtc::RTPHeader rtp_header; | 1118 webrtc::RTPHeader rtp_header; |
1119 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); | 1119 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); |
1120 | 1120 |
1121 const uint8_t* payload_data = | 1121 const uint8_t* payload_data = |
1122 GetPayloadData(rtp_header, transport_.last_sent_packet_); | 1122 GetPayloadData(rtp_header, transport_.last_sent_packet_); |
1123 uint8_t generic_header = *payload_data++; | 1123 uint8_t generic_header = *payload_data++; |
1124 | 1124 |
1125 ASSERT_EQ(sizeof(payload) + sizeof(generic_header), | 1125 ASSERT_EQ(sizeof(payload) + sizeof(generic_header), |
1126 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); | 1126 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); |
1127 | 1127 |
1128 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); | 1128 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); |
1129 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); | 1129 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); |
1130 | 1130 |
1131 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); | 1131 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); |
1132 | 1132 |
1133 // Send delta frame | 1133 // Send delta frame |
1134 payload[0] = 13; | 1134 payload[0] = 13; |
1135 payload[1] = 42; | 1135 payload[1] = 42; |
1136 payload[4] = 13; | 1136 payload[4] = 13; |
1137 | 1137 |
1138 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameDelta, payload_type, | 1138 ASSERT_EQ(0, rtp_sender_->SendOutgoingData( |
1139 1234, 4321, payload, | 1139 kVideoFrameDelta, payload_type, 1234, 4321, payload, |
1140 sizeof(payload), nullptr)); | 1140 sizeof(payload), nullptr, nullptr, nullptr)); |
1141 | 1141 |
1142 RtpUtility::RtpHeaderParser rtp_parser2(transport_.last_sent_packet_, | 1142 RtpUtility::RtpHeaderParser rtp_parser2(transport_.last_sent_packet_, |
1143 transport_.last_sent_packet_len_); | 1143 transport_.last_sent_packet_len_); |
1144 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); | 1144 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); |
1145 | 1145 |
1146 payload_data = GetPayloadData(rtp_header, transport_.last_sent_packet_); | 1146 payload_data = GetPayloadData(rtp_header, transport_.last_sent_packet_); |
1147 generic_header = *payload_data++; | 1147 generic_header = *payload_data++; |
1148 | 1148 |
1149 EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); | 1149 EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); |
1150 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); | 1150 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); |
(...skipping 30 matching lines...) Expand all Loading... |
1181 const uint8_t payload_type = 127; | 1181 const uint8_t payload_type = 127; |
1182 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, | 1182 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, |
1183 0, 1500)); | 1183 0, 1500)); |
1184 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1184 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1185 rtp_sender_->SetStorePacketsStatus(true, 1); | 1185 rtp_sender_->SetStorePacketsStatus(true, 1); |
1186 uint32_t ssrc = rtp_sender_->SSRC(); | 1186 uint32_t ssrc = rtp_sender_->SSRC(); |
1187 | 1187 |
1188 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) | 1188 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) |
1189 .Times(::testing::AtLeast(2)); | 1189 .Times(::testing::AtLeast(2)); |
1190 | 1190 |
1191 ASSERT_EQ( | 1191 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, |
1192 0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 4321, | 1192 4321, payload, sizeof(payload), |
1193 payload, sizeof(payload), nullptr)); | 1193 nullptr, nullptr, nullptr)); |
1194 | 1194 |
1195 EXPECT_EQ(1U, callback.num_calls_); | 1195 EXPECT_EQ(1U, callback.num_calls_); |
1196 EXPECT_EQ(ssrc, callback.ssrc_); | 1196 EXPECT_EQ(ssrc, callback.ssrc_); |
1197 EXPECT_EQ(1, callback.frame_counts_.key_frames); | 1197 EXPECT_EQ(1, callback.frame_counts_.key_frames); |
1198 EXPECT_EQ(0, callback.frame_counts_.delta_frames); | 1198 EXPECT_EQ(0, callback.frame_counts_.delta_frames); |
1199 | 1199 |
1200 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameDelta, payload_type, | 1200 ASSERT_EQ(0, rtp_sender_->SendOutgoingData( |
1201 1234, 4321, payload, | 1201 kVideoFrameDelta, payload_type, 1234, 4321, payload, |
1202 sizeof(payload), nullptr)); | 1202 sizeof(payload), nullptr, nullptr, nullptr)); |
1203 | 1203 |
1204 EXPECT_EQ(2U, callback.num_calls_); | 1204 EXPECT_EQ(2U, callback.num_calls_); |
1205 EXPECT_EQ(ssrc, callback.ssrc_); | 1205 EXPECT_EQ(ssrc, callback.ssrc_); |
1206 EXPECT_EQ(1, callback.frame_counts_.key_frames); | 1206 EXPECT_EQ(1, callback.frame_counts_.key_frames); |
1207 EXPECT_EQ(1, callback.frame_counts_.delta_frames); | 1207 EXPECT_EQ(1, callback.frame_counts_.delta_frames); |
1208 | 1208 |
1209 rtp_sender_.reset(); | 1209 rtp_sender_.reset(); |
1210 } | 1210 } |
1211 | 1211 |
1212 TEST_F(RtpSenderTest, BitrateCallbacks) { | 1212 TEST_F(RtpSenderTest, BitrateCallbacks) { |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1254 0, 1500)); | 1254 0, 1500)); |
1255 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1255 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1256 rtp_sender_->SetStorePacketsStatus(true, 1); | 1256 rtp_sender_->SetStorePacketsStatus(true, 1); |
1257 uint32_t ssrc = rtp_sender_->SSRC(); | 1257 uint32_t ssrc = rtp_sender_->SSRC(); |
1258 | 1258 |
1259 // Initial process call so we get a new time window. | 1259 // Initial process call so we get a new time window. |
1260 rtp_sender_->ProcessBitrate(); | 1260 rtp_sender_->ProcessBitrate(); |
1261 | 1261 |
1262 // Send a few frames. | 1262 // Send a few frames. |
1263 for (uint32_t i = 0; i < kNumPackets; ++i) { | 1263 for (uint32_t i = 0; i < kNumPackets; ++i) { |
1264 ASSERT_EQ(0, | 1264 ASSERT_EQ(0, rtp_sender_->SendOutgoingData( |
1265 rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, | 1265 kVideoFrameKey, payload_type, 1234, 4321, payload, |
1266 4321, payload, sizeof(payload), 0)); | 1266 sizeof(payload), nullptr, nullptr, nullptr)); |
1267 fake_clock_.AdvanceTimeMilliseconds(kPacketInterval); | 1267 fake_clock_.AdvanceTimeMilliseconds(kPacketInterval); |
1268 } | 1268 } |
1269 | 1269 |
1270 rtp_sender_->ProcessBitrate(); | 1270 rtp_sender_->ProcessBitrate(); |
1271 | 1271 |
1272 // We get one call for every stats updated, thus two calls since both the | 1272 // We get one call for every stats updated, thus two calls since both the |
1273 // stream stats and the retransmit stats are updated once. | 1273 // stream stats and the retransmit stats are updated once. |
1274 EXPECT_EQ(2u, callback.num_calls_); | 1274 EXPECT_EQ(2u, callback.num_calls_); |
1275 EXPECT_EQ(ssrc, callback.ssrc_); | 1275 EXPECT_EQ(ssrc, callback.ssrc_); |
1276 const uint32_t kTotalPacketSize = kPacketOverhead + sizeof(payload); | 1276 const uint32_t kTotalPacketSize = kPacketOverhead + sizeof(payload); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1335 const uint8_t payload_type = 127; | 1335 const uint8_t payload_type = 127; |
1336 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, | 1336 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, |
1337 0, 1500)); | 1337 0, 1500)); |
1338 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1338 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1339 rtp_sender_->SetStorePacketsStatus(true, 1); | 1339 rtp_sender_->SetStorePacketsStatus(true, 1); |
1340 uint32_t ssrc = rtp_sender_->SSRC(); | 1340 uint32_t ssrc = rtp_sender_->SSRC(); |
1341 | 1341 |
1342 rtp_sender_->RegisterRtpStatisticsCallback(&callback); | 1342 rtp_sender_->RegisterRtpStatisticsCallback(&callback); |
1343 | 1343 |
1344 // Send a frame. | 1344 // Send a frame. |
1345 ASSERT_EQ( | 1345 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, |
1346 0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 4321, | 1346 4321, payload, sizeof(payload), |
1347 payload, sizeof(payload), nullptr)); | 1347 nullptr, nullptr, nullptr)); |
1348 StreamDataCounters expected; | 1348 StreamDataCounters expected; |
1349 expected.transmitted.payload_bytes = 6; | 1349 expected.transmitted.payload_bytes = 6; |
1350 expected.transmitted.header_bytes = 12; | 1350 expected.transmitted.header_bytes = 12; |
1351 expected.transmitted.padding_bytes = 0; | 1351 expected.transmitted.padding_bytes = 0; |
1352 expected.transmitted.packets = 1; | 1352 expected.transmitted.packets = 1; |
1353 expected.retransmitted.payload_bytes = 0; | 1353 expected.retransmitted.payload_bytes = 0; |
1354 expected.retransmitted.header_bytes = 0; | 1354 expected.retransmitted.header_bytes = 0; |
1355 expected.retransmitted.padding_bytes = 0; | 1355 expected.retransmitted.padding_bytes = 0; |
1356 expected.retransmitted.packets = 0; | 1356 expected.retransmitted.packets = 0; |
1357 expected.fec.packets = 0; | 1357 expected.fec.packets = 0; |
(...skipping 19 matching lines...) Expand all Loading... |
1377 expected.transmitted.packets = 3; | 1377 expected.transmitted.packets = 3; |
1378 callback.Matches(ssrc, expected); | 1378 callback.Matches(ssrc, expected); |
1379 | 1379 |
1380 // Send FEC. | 1380 // Send FEC. |
1381 rtp_sender_->SetGenericFECStatus(true, kRedPayloadType, kUlpfecPayloadType); | 1381 rtp_sender_->SetGenericFECStatus(true, kRedPayloadType, kUlpfecPayloadType); |
1382 FecProtectionParams fec_params; | 1382 FecProtectionParams fec_params; |
1383 fec_params.fec_mask_type = kFecMaskRandom; | 1383 fec_params.fec_mask_type = kFecMaskRandom; |
1384 fec_params.fec_rate = 1; | 1384 fec_params.fec_rate = 1; |
1385 fec_params.max_fec_frames = 1; | 1385 fec_params.max_fec_frames = 1; |
1386 rtp_sender_->SetFecParameters(&fec_params, &fec_params); | 1386 rtp_sender_->SetFecParameters(&fec_params, &fec_params); |
1387 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameDelta, payload_type, | 1387 ASSERT_EQ(0, rtp_sender_->SendOutgoingData( |
1388 1234, 4321, payload, | 1388 kVideoFrameDelta, payload_type, 1234, 4321, payload, |
1389 sizeof(payload), nullptr)); | 1389 sizeof(payload), nullptr, nullptr, nullptr)); |
1390 expected.transmitted.payload_bytes = 40; | 1390 expected.transmitted.payload_bytes = 40; |
1391 expected.transmitted.header_bytes = 60; | 1391 expected.transmitted.header_bytes = 60; |
1392 expected.transmitted.packets = 5; | 1392 expected.transmitted.packets = 5; |
1393 expected.fec.packets = 1; | 1393 expected.fec.packets = 1; |
1394 callback.Matches(ssrc, expected); | 1394 callback.Matches(ssrc, expected); |
1395 | 1395 |
1396 rtp_sender_->RegisterRtpStatisticsCallback(nullptr); | 1396 rtp_sender_->RegisterRtpStatisticsCallback(nullptr); |
1397 } | 1397 } |
1398 | 1398 |
1399 TEST_F(RtpSenderAudioTest, SendAudio) { | 1399 TEST_F(RtpSenderAudioTest, SendAudio) { |
1400 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; | 1400 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; |
1401 const uint8_t payload_type = 127; | 1401 const uint8_t payload_type = 127; |
1402 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, | 1402 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, |
1403 0, 1500)); | 1403 0, 1500)); |
1404 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1404 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1405 | 1405 |
1406 ASSERT_EQ( | 1406 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, |
1407 0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, 4321, | 1407 4321, payload, sizeof(payload), |
1408 payload, sizeof(payload), nullptr)); | 1408 nullptr, nullptr, nullptr)); |
1409 | 1409 |
1410 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, | 1410 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
1411 transport_.last_sent_packet_len_); | 1411 transport_.last_sent_packet_len_); |
1412 webrtc::RTPHeader rtp_header; | 1412 webrtc::RTPHeader rtp_header; |
1413 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); | 1413 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); |
1414 | 1414 |
1415 const uint8_t* payload_data = | 1415 const uint8_t* payload_data = |
1416 GetPayloadData(rtp_header, transport_.last_sent_packet_); | 1416 GetPayloadData(rtp_header, transport_.last_sent_packet_); |
1417 | 1417 |
1418 ASSERT_EQ(sizeof(payload), | 1418 ASSERT_EQ(sizeof(payload), |
1419 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); | 1419 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); |
1420 | 1420 |
1421 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); | 1421 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); |
1422 } | 1422 } |
1423 | 1423 |
1424 TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) { | 1424 TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) { |
1425 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel)); | 1425 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel)); |
1426 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, | 1426 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, |
1427 kAudioLevelExtensionId)); | 1427 kAudioLevelExtensionId)); |
1428 | 1428 |
1429 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; | 1429 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; |
1430 const uint8_t payload_type = 127; | 1430 const uint8_t payload_type = 127; |
1431 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, | 1431 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, |
1432 0, 1500)); | 1432 0, 1500)); |
1433 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1433 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1434 | 1434 |
1435 ASSERT_EQ( | 1435 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, |
1436 0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, 4321, | 1436 4321, payload, sizeof(payload), |
1437 payload, sizeof(payload), nullptr)); | 1437 nullptr, nullptr, nullptr)); |
1438 | 1438 |
1439 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, | 1439 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
1440 transport_.last_sent_packet_len_); | 1440 transport_.last_sent_packet_len_); |
1441 webrtc::RTPHeader rtp_header; | 1441 webrtc::RTPHeader rtp_header; |
1442 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); | 1442 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); |
1443 | 1443 |
1444 const uint8_t* payload_data = | 1444 const uint8_t* payload_data = |
1445 GetPayloadData(rtp_header, transport_.last_sent_packet_); | 1445 GetPayloadData(rtp_header, transport_.last_sent_packet_); |
1446 | 1446 |
1447 ASSERT_EQ(sizeof(payload), | 1447 ASSERT_EQ(sizeof(payload), |
(...skipping 30 matching lines...) Expand all Loading... |
1478 ASSERT_EQ( | 1478 ASSERT_EQ( |
1479 0, rtp_sender_->RegisterPayload(kPayloadName, payload_type, 8000, 1, 0)); | 1479 0, rtp_sender_->RegisterPayload(kPayloadName, payload_type, 8000, 1, 0)); |
1480 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 1480 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
1481 // DTMF event key=9, duration=500 and attenuationdB=10 | 1481 // DTMF event key=9, duration=500 and attenuationdB=10 |
1482 rtp_sender_->SendTelephoneEvent(9, 500, 10); | 1482 rtp_sender_->SendTelephoneEvent(9, 500, 10); |
1483 // During start, it takes the starting timestamp as last sent timestamp. | 1483 // During start, it takes the starting timestamp as last sent timestamp. |
1484 // The duration is calculated as the difference of current and last sent | 1484 // The duration is calculated as the difference of current and last sent |
1485 // timestamp. So for first call it will skip since the duration is zero. | 1485 // timestamp. So for first call it will skip since the duration is zero. |
1486 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, | 1486 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, |
1487 capture_time_ms, 0, nullptr, 0, | 1487 capture_time_ms, 0, nullptr, 0, |
1488 nullptr)); | 1488 nullptr, nullptr, nullptr)); |
1489 // DTMF Sample Length is (Frequency/1000) * Duration. | 1489 // DTMF Sample Length is (Frequency/1000) * Duration. |
1490 // So in this case, it is (8000/1000) * 500 = 4000. | 1490 // So in this case, it is (8000/1000) * 500 = 4000. |
1491 // Sending it as two packets. | 1491 // Sending it as two packets. |
1492 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, | 1492 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, |
1493 capture_time_ms + 2000, 0, nullptr, | 1493 capture_time_ms + 2000, 0, nullptr, |
1494 0, nullptr)); | 1494 0, nullptr, nullptr, nullptr)); |
1495 std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser( | 1495 std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser( |
1496 webrtc::RtpHeaderParser::Create()); | 1496 webrtc::RtpHeaderParser::Create()); |
1497 ASSERT_TRUE(rtp_parser.get() != nullptr); | 1497 ASSERT_TRUE(rtp_parser.get() != nullptr); |
1498 webrtc::RTPHeader rtp_header; | 1498 webrtc::RTPHeader rtp_header; |
1499 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, | 1499 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, |
1500 transport_.last_sent_packet_len_, &rtp_header)); | 1500 transport_.last_sent_packet_len_, &rtp_header)); |
1501 // Marker Bit should be set to 1 for first packet. | 1501 // Marker Bit should be set to 1 for first packet. |
1502 EXPECT_TRUE(rtp_header.markerBit); | 1502 EXPECT_TRUE(rtp_header.markerBit); |
1503 | 1503 |
1504 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, | 1504 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, |
1505 capture_time_ms + 4000, 0, nullptr, | 1505 capture_time_ms + 4000, 0, nullptr, |
1506 0, nullptr)); | 1506 0, nullptr, nullptr, nullptr)); |
1507 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, | 1507 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, |
1508 transport_.last_sent_packet_len_, &rtp_header)); | 1508 transport_.last_sent_packet_len_, &rtp_header)); |
1509 // Marker Bit should be set to 0 for rest of the packets. | 1509 // Marker Bit should be set to 0 for rest of the packets. |
1510 EXPECT_FALSE(rtp_header.markerBit); | 1510 EXPECT_FALSE(rtp_header.markerBit); |
1511 } | 1511 } |
1512 | 1512 |
1513 TEST_F(RtpSenderTestWithoutPacer, BytesReportedCorrectly) { | 1513 TEST_F(RtpSenderTestWithoutPacer, BytesReportedCorrectly) { |
1514 const char* kPayloadName = "GENERIC"; | 1514 const char* kPayloadName = "GENERIC"; |
1515 const uint8_t kPayloadType = 127; | 1515 const uint8_t kPayloadType = 127; |
1516 rtp_sender_->SetSSRC(1234); | 1516 rtp_sender_->SetSSRC(1234); |
1517 rtp_sender_->SetRtxSsrc(4321); | 1517 rtp_sender_->SetRtxSsrc(4321); |
1518 rtp_sender_->SetRtxPayloadType(kPayloadType - 1, kPayloadType); | 1518 rtp_sender_->SetRtxPayloadType(kPayloadType - 1, kPayloadType); |
1519 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); | 1519 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); |
1520 | 1520 |
1521 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000, | 1521 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000, |
1522 0, 1500)); | 1522 0, 1500)); |
1523 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1523 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1524 | 1524 |
1525 ASSERT_EQ( | 1525 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameKey, kPayloadType, 1234, |
1526 0, rtp_sender_->SendOutgoingData(kVideoFrameKey, kPayloadType, 1234, 4321, | 1526 4321, payload, sizeof(payload), |
1527 payload, sizeof(payload), 0)); | 1527 nullptr, nullptr, nullptr)); |
1528 | 1528 |
1529 // Will send 2 full-size padding packets. | 1529 // Will send 2 full-size padding packets. |
1530 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe); | 1530 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe); |
1531 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe); | 1531 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe); |
1532 | 1532 |
1533 StreamDataCounters rtp_stats; | 1533 StreamDataCounters rtp_stats; |
1534 StreamDataCounters rtx_stats; | 1534 StreamDataCounters rtx_stats; |
1535 rtp_sender_->GetDataCounters(&rtp_stats, &rtx_stats); | 1535 rtp_sender_->GetDataCounters(&rtp_stats, &rtx_stats); |
1536 | 1536 |
1537 // Payload + 1-byte generic header. | 1537 // Payload + 1-byte generic header. |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1614 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), | 1614 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), |
1615 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); | 1615 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); |
1616 | 1616 |
1617 // Verify that this packet does have CVO byte. | 1617 // Verify that this packet does have CVO byte. |
1618 VerifyCVOPacket( | 1618 VerifyCVOPacket( |
1619 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), | 1619 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), |
1620 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, | 1620 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, |
1621 hdr.rotation); | 1621 hdr.rotation); |
1622 } | 1622 } |
1623 } // namespace webrtc | 1623 } // namespace webrtc |
OLD | NEW |