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 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 const PacketOptions& options) override { | 83 const PacketOptions& options) override { |
84 packets_sent_++; | 84 packets_sent_++; |
85 rtc::Buffer* buffer = | 85 rtc::Buffer* buffer = |
86 new rtc::Buffer(reinterpret_cast<const uint8_t*>(data), len); | 86 new rtc::Buffer(reinterpret_cast<const uint8_t*>(data), len); |
87 last_sent_packet_ = buffer->data(); | 87 last_sent_packet_ = buffer->data(); |
88 last_sent_packet_len_ = len; | 88 last_sent_packet_len_ = len; |
89 total_bytes_sent_ += len; | 89 total_bytes_sent_ += len; |
90 sent_packets_.push_back(buffer); | 90 sent_packets_.push_back(buffer); |
91 return true; | 91 return true; |
92 } | 92 } |
93 bool SendRtcp(const uint8_t* data, size_t len) override { | 93 bool SendRtcp(const uint8_t* data, size_t len) override { return false; } |
94 return false; | |
95 } | |
96 int packets_sent_; | 94 int packets_sent_; |
97 size_t last_sent_packet_len_; | 95 size_t last_sent_packet_len_; |
98 size_t total_bytes_sent_; | 96 size_t total_bytes_sent_; |
99 uint8_t* last_sent_packet_; | 97 uint8_t* last_sent_packet_; |
100 std::vector<rtc::Buffer*> sent_packets_; | 98 std::vector<rtc::Buffer*> sent_packets_; |
101 }; | 99 }; |
102 | 100 |
103 } // namespace | 101 } // namespace |
104 | 102 |
105 class MockRtpPacketSender : public RtpPacketSender { | 103 class MockRtpPacketSender : public RtpPacketSender { |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
156 EXPECT_EQ(payload_, rtp_header.payloadType); | 154 EXPECT_EQ(payload_, rtp_header.payloadType); |
157 EXPECT_EQ(kSeqNum, rtp_header.sequenceNumber); | 155 EXPECT_EQ(kSeqNum, rtp_header.sequenceNumber); |
158 EXPECT_EQ(kTimestamp, rtp_header.timestamp); | 156 EXPECT_EQ(kTimestamp, rtp_header.timestamp); |
159 EXPECT_EQ(rtp_sender_->SSRC(), rtp_header.ssrc); | 157 EXPECT_EQ(rtp_sender_->SSRC(), rtp_header.ssrc); |
160 EXPECT_EQ(0, rtp_header.numCSRCs); | 158 EXPECT_EQ(0, rtp_header.numCSRCs); |
161 EXPECT_EQ(0U, rtp_header.paddingLength); | 159 EXPECT_EQ(0U, rtp_header.paddingLength); |
162 } | 160 } |
163 | 161 |
164 void SendPacket(int64_t capture_time_ms, int payload_length) { | 162 void SendPacket(int64_t capture_time_ms, int payload_length) { |
165 uint32_t timestamp = capture_time_ms * 90; | 163 uint32_t timestamp = capture_time_ms * 90; |
166 int32_t rtp_length = rtp_sender_->BuildRTPheader(packet_, | 164 int32_t rtp_length = rtp_sender_->BuildRTPheader( |
167 kPayload, | 165 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); |
168 kMarkerBit, | |
169 timestamp, | |
170 capture_time_ms); | |
171 ASSERT_GE(rtp_length, 0); | 166 ASSERT_GE(rtp_length, 0); |
172 | 167 |
173 // Packet should be stored in a send bucket. | 168 // Packet should be stored in a send bucket. |
174 EXPECT_EQ(0, rtp_sender_->SendToNetwork( | 169 EXPECT_EQ(0, rtp_sender_->SendToNetwork( |
175 packet_, payload_length, rtp_length, capture_time_ms, | 170 packet_, payload_length, rtp_length, capture_time_ms, |
176 kAllowRetransmission, RtpPacketSender::kNormalPriority)); | 171 kAllowRetransmission, RtpPacketSender::kNormalPriority)); |
177 } | 172 } |
178 }; | 173 }; |
179 | 174 |
180 // TODO(pbos): Move tests over from WithoutPacer to RtpSenderTest as this is our | 175 // TODO(pbos): Move tests over from WithoutPacer to RtpSenderTest as this is our |
181 // default code path. | 176 // default code path. |
182 class RtpSenderTestWithoutPacer : public RtpSenderTest { | 177 class RtpSenderTestWithoutPacer : public RtpSenderTest { |
183 public: | 178 public: |
184 void SetUp() override { SetUpRtpSender(false); } | 179 void SetUp() override { SetUpRtpSender(false); } |
185 }; | 180 }; |
186 | 181 |
187 class RtpSenderVideoTest : public RtpSenderTest { | 182 class RtpSenderVideoTest : public RtpSenderTest { |
188 protected: | 183 protected: |
189 virtual void SetUp() override { | 184 void SetUp() override { |
190 // TODO(pbos): Set up to use pacer. | 185 // TODO(pbos): Set up to use pacer. |
191 SetUpRtpSender(false); | 186 SetUpRtpSender(false); |
192 rtp_sender_video_.reset( | 187 rtp_sender_video_.reset( |
193 new RTPSenderVideo(&fake_clock_, rtp_sender_.get())); | 188 new RTPSenderVideo(&fake_clock_, rtp_sender_.get())); |
194 } | 189 } |
195 rtc::scoped_ptr<RTPSenderVideo> rtp_sender_video_; | 190 rtc::scoped_ptr<RTPSenderVideo> rtp_sender_video_; |
196 | 191 |
197 void VerifyCVOPacket(uint8_t* data, | 192 void VerifyCVOPacket(uint8_t* data, |
198 size_t len, | 193 size_t len, |
199 bool expect_cvo, | 194 bool expect_cvo, |
(...skipping 21 matching lines...) Expand all Loading... |
221 EXPECT_EQ(0U, rtp_header.paddingLength); | 216 EXPECT_EQ(0U, rtp_header.paddingLength); |
222 EXPECT_EQ(ConvertVideoRotationToCVOByte(rotation), | 217 EXPECT_EQ(ConvertVideoRotationToCVOByte(rotation), |
223 rtp_header.extension.videoRotation); | 218 rtp_header.extension.videoRotation); |
224 } | 219 } |
225 }; | 220 }; |
226 | 221 |
227 TEST_F(RtpSenderTestWithoutPacer, | 222 TEST_F(RtpSenderTestWithoutPacer, |
228 RegisterRtpTransmissionTimeOffsetHeaderExtension) { | 223 RegisterRtpTransmissionTimeOffsetHeaderExtension) { |
229 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); | 224 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); |
230 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 225 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
231 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); | 226 kRtpExtensionTransmissionTimeOffset, |
| 227 kTransmissionTimeOffsetExtensionId)); |
232 EXPECT_EQ(kRtpOneByteHeaderLength + kTransmissionTimeOffsetLength, | 228 EXPECT_EQ(kRtpOneByteHeaderLength + kTransmissionTimeOffsetLength, |
233 rtp_sender_->RtpHeaderExtensionTotalLength()); | 229 rtp_sender_->RtpHeaderExtensionTotalLength()); |
234 EXPECT_EQ(0, rtp_sender_->DeregisterRtpHeaderExtension( | 230 EXPECT_EQ(0, rtp_sender_->DeregisterRtpHeaderExtension( |
235 kRtpExtensionTransmissionTimeOffset)); | 231 kRtpExtensionTransmissionTimeOffset)); |
236 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); | 232 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); |
237 } | 233 } |
238 | 234 |
239 TEST_F(RtpSenderTestWithoutPacer, RegisterRtpAbsoluteSendTimeHeaderExtension) { | 235 TEST_F(RtpSenderTestWithoutPacer, RegisterRtpAbsoluteSendTimeHeaderExtension) { |
240 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); | 236 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); |
241 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 237 EXPECT_EQ( |
242 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); | 238 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
| 239 kAbsoluteSendTimeExtensionId)); |
243 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength + | 240 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength + |
244 kAbsoluteSendTimeLength), | 241 kAbsoluteSendTimeLength), |
245 rtp_sender_->RtpHeaderExtensionTotalLength()); | 242 rtp_sender_->RtpHeaderExtensionTotalLength()); |
246 EXPECT_EQ(0, rtp_sender_->DeregisterRtpHeaderExtension( | 243 EXPECT_EQ(0, rtp_sender_->DeregisterRtpHeaderExtension( |
247 kRtpExtensionAbsoluteSendTime)); | 244 kRtpExtensionAbsoluteSendTime)); |
248 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); | 245 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); |
249 } | 246 } |
250 | 247 |
251 TEST_F(RtpSenderTestWithoutPacer, RegisterRtpAudioLevelHeaderExtension) { | 248 TEST_F(RtpSenderTestWithoutPacer, RegisterRtpAudioLevelHeaderExtension) { |
252 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); | 249 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); |
253 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 250 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, |
254 kRtpExtensionAudioLevel, kAudioLevelExtensionId)); | 251 kAudioLevelExtensionId)); |
255 EXPECT_EQ( | 252 EXPECT_EQ( |
256 RtpUtility::Word32Align(kRtpOneByteHeaderLength + kAudioLevelLength), | 253 RtpUtility::Word32Align(kRtpOneByteHeaderLength + kAudioLevelLength), |
257 rtp_sender_->RtpHeaderExtensionTotalLength()); | 254 rtp_sender_->RtpHeaderExtensionTotalLength()); |
258 EXPECT_EQ(0, rtp_sender_->DeregisterRtpHeaderExtension( | 255 EXPECT_EQ(0, |
259 kRtpExtensionAudioLevel)); | 256 rtp_sender_->DeregisterRtpHeaderExtension(kRtpExtensionAudioLevel)); |
260 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); | 257 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); |
261 } | 258 } |
262 | 259 |
263 TEST_F(RtpSenderTestWithoutPacer, RegisterRtpHeaderExtensions) { | 260 TEST_F(RtpSenderTestWithoutPacer, RegisterRtpHeaderExtensions) { |
264 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); | 261 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); |
265 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 262 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
266 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); | 263 kRtpExtensionTransmissionTimeOffset, |
| 264 kTransmissionTimeOffsetExtensionId)); |
267 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength + | 265 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength + |
268 kTransmissionTimeOffsetLength), | 266 kTransmissionTimeOffsetLength), |
269 rtp_sender_->RtpHeaderExtensionTotalLength()); | 267 rtp_sender_->RtpHeaderExtensionTotalLength()); |
270 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 268 EXPECT_EQ( |
271 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); | 269 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
| 270 kAbsoluteSendTimeExtensionId)); |
272 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength + | 271 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength + |
273 kTransmissionTimeOffsetLength + | 272 kTransmissionTimeOffsetLength + |
274 kAbsoluteSendTimeLength), | 273 kAbsoluteSendTimeLength), |
275 rtp_sender_->RtpHeaderExtensionTotalLength()); | 274 rtp_sender_->RtpHeaderExtensionTotalLength()); |
276 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 275 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, |
277 kRtpExtensionAudioLevel, kAudioLevelExtensionId)); | 276 kAudioLevelExtensionId)); |
278 EXPECT_EQ(RtpUtility::Word32Align( | 277 EXPECT_EQ(RtpUtility::Word32Align( |
279 kRtpOneByteHeaderLength + kTransmissionTimeOffsetLength + | 278 kRtpOneByteHeaderLength + kTransmissionTimeOffsetLength + |
280 kAbsoluteSendTimeLength + kAudioLevelLength), | 279 kAbsoluteSendTimeLength + kAudioLevelLength), |
281 rtp_sender_->RtpHeaderExtensionTotalLength()); | 280 rtp_sender_->RtpHeaderExtensionTotalLength()); |
282 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 281 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
283 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); | 282 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); |
284 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension()); | 283 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension()); |
285 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength + | 284 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength + |
286 kTransmissionTimeOffsetLength + | 285 kTransmissionTimeOffsetLength + |
287 kAbsoluteSendTimeLength + | 286 kAbsoluteSendTimeLength + |
288 kAudioLevelLength + kVideoRotationLength), | 287 kAudioLevelLength + kVideoRotationLength), |
289 rtp_sender_->RtpHeaderExtensionTotalLength()); | 288 rtp_sender_->RtpHeaderExtensionTotalLength()); |
290 | 289 |
291 // Deregister starts. | 290 // Deregister starts. |
292 EXPECT_EQ(0, rtp_sender_->DeregisterRtpHeaderExtension( | 291 EXPECT_EQ(0, rtp_sender_->DeregisterRtpHeaderExtension( |
293 kRtpExtensionTransmissionTimeOffset)); | 292 kRtpExtensionTransmissionTimeOffset)); |
294 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength + | 293 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength + |
295 kAbsoluteSendTimeLength + | 294 kAbsoluteSendTimeLength + |
296 kAudioLevelLength + kVideoRotationLength), | 295 kAudioLevelLength + kVideoRotationLength), |
297 rtp_sender_->RtpHeaderExtensionTotalLength()); | 296 rtp_sender_->RtpHeaderExtensionTotalLength()); |
298 EXPECT_EQ(0, rtp_sender_->DeregisterRtpHeaderExtension( | 297 EXPECT_EQ(0, rtp_sender_->DeregisterRtpHeaderExtension( |
299 kRtpExtensionAbsoluteSendTime)); | 298 kRtpExtensionAbsoluteSendTime)); |
300 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength + | 299 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength + |
301 kAudioLevelLength + kVideoRotationLength), | 300 kAudioLevelLength + kVideoRotationLength), |
302 rtp_sender_->RtpHeaderExtensionTotalLength()); | 301 rtp_sender_->RtpHeaderExtensionTotalLength()); |
303 EXPECT_EQ(0, rtp_sender_->DeregisterRtpHeaderExtension( | 302 EXPECT_EQ(0, |
304 kRtpExtensionAudioLevel)); | 303 rtp_sender_->DeregisterRtpHeaderExtension(kRtpExtensionAudioLevel)); |
305 EXPECT_EQ( | 304 EXPECT_EQ( |
306 RtpUtility::Word32Align(kRtpOneByteHeaderLength + kVideoRotationLength), | 305 RtpUtility::Word32Align(kRtpOneByteHeaderLength + kVideoRotationLength), |
307 rtp_sender_->RtpHeaderExtensionTotalLength()); | 306 rtp_sender_->RtpHeaderExtensionTotalLength()); |
308 EXPECT_EQ( | 307 EXPECT_EQ( |
309 0, rtp_sender_->DeregisterRtpHeaderExtension(kRtpExtensionVideoRotation)); | 308 0, rtp_sender_->DeregisterRtpHeaderExtension(kRtpExtensionVideoRotation)); |
310 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); | 309 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); |
311 } | 310 } |
312 | 311 |
313 TEST_F(RtpSenderTestWithoutPacer, RegisterRtpVideoRotationHeaderExtension) { | 312 TEST_F(RtpSenderTestWithoutPacer, RegisterRtpVideoRotationHeaderExtension) { |
314 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); | 313 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
347 EXPECT_EQ(0u, rtp_header.extension.absoluteSendTime); | 346 EXPECT_EQ(0u, rtp_header.extension.absoluteSendTime); |
348 EXPECT_FALSE(rtp_header.extension.voiceActivity); | 347 EXPECT_FALSE(rtp_header.extension.voiceActivity); |
349 EXPECT_EQ(0u, rtp_header.extension.audioLevel); | 348 EXPECT_EQ(0u, rtp_header.extension.audioLevel); |
350 EXPECT_EQ(0u, rtp_header.extension.videoRotation); | 349 EXPECT_EQ(0u, rtp_header.extension.videoRotation); |
351 } | 350 } |
352 | 351 |
353 TEST_F(RtpSenderTestWithoutPacer, | 352 TEST_F(RtpSenderTestWithoutPacer, |
354 BuildRTPPacketWithTransmissionOffsetExtension) { | 353 BuildRTPPacketWithTransmissionOffsetExtension) { |
355 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kTimeOffset)); | 354 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kTimeOffset)); |
356 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 355 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
357 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); | 356 kRtpExtensionTransmissionTimeOffset, |
| 357 kTransmissionTimeOffsetExtensionId)); |
358 | 358 |
359 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( | 359 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( |
360 packet_, kPayload, kMarkerBit, kTimestamp, 0)); | 360 packet_, kPayload, kMarkerBit, kTimestamp, 0)); |
361 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionTotalLength(), | 361 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionTotalLength(), |
362 length); | 362 length); |
363 | 363 |
364 // Verify | 364 // Verify |
365 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); | 365 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); |
366 webrtc::RTPHeader rtp_header; | 366 webrtc::RTPHeader rtp_header; |
367 | 367 |
(...skipping 18 matching lines...) Expand all Loading... |
386 EXPECT_EQ(length, rtp_header2.headerLength); | 386 EXPECT_EQ(length, rtp_header2.headerLength); |
387 EXPECT_FALSE(rtp_header2.extension.hasTransmissionTimeOffset); | 387 EXPECT_FALSE(rtp_header2.extension.hasTransmissionTimeOffset); |
388 EXPECT_EQ(0, rtp_header2.extension.transmissionTimeOffset); | 388 EXPECT_EQ(0, rtp_header2.extension.transmissionTimeOffset); |
389 } | 389 } |
390 | 390 |
391 TEST_F(RtpSenderTestWithoutPacer, | 391 TEST_F(RtpSenderTestWithoutPacer, |
392 BuildRTPPacketWithNegativeTransmissionOffsetExtension) { | 392 BuildRTPPacketWithNegativeTransmissionOffsetExtension) { |
393 const int kNegTimeOffset = -500; | 393 const int kNegTimeOffset = -500; |
394 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kNegTimeOffset)); | 394 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kNegTimeOffset)); |
395 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 395 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
396 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); | 396 kRtpExtensionTransmissionTimeOffset, |
| 397 kTransmissionTimeOffsetExtensionId)); |
397 | 398 |
398 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( | 399 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( |
399 packet_, kPayload, kMarkerBit, kTimestamp, 0)); | 400 packet_, kPayload, kMarkerBit, kTimestamp, 0)); |
400 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionTotalLength(), | 401 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionTotalLength(), |
401 length); | 402 length); |
402 | 403 |
403 // Verify | 404 // Verify |
404 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); | 405 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); |
405 webrtc::RTPHeader rtp_header; | 406 webrtc::RTPHeader rtp_header; |
406 | 407 |
407 RtpHeaderExtensionMap map; | 408 RtpHeaderExtensionMap map; |
408 map.Register(kRtpExtensionTransmissionTimeOffset, | 409 map.Register(kRtpExtensionTransmissionTimeOffset, |
409 kTransmissionTimeOffsetExtensionId); | 410 kTransmissionTimeOffsetExtensionId); |
410 const bool valid_rtp_header = rtp_parser.Parse(rtp_header, &map); | 411 const bool valid_rtp_header = rtp_parser.Parse(rtp_header, &map); |
411 | 412 |
412 ASSERT_TRUE(valid_rtp_header); | 413 ASSERT_TRUE(valid_rtp_header); |
413 ASSERT_FALSE(rtp_parser.RTCP()); | 414 ASSERT_FALSE(rtp_parser.RTCP()); |
414 VerifyRTPHeaderCommon(rtp_header); | 415 VerifyRTPHeaderCommon(rtp_header); |
415 EXPECT_EQ(length, rtp_header.headerLength); | 416 EXPECT_EQ(length, rtp_header.headerLength); |
416 EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset); | 417 EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset); |
417 EXPECT_EQ(kNegTimeOffset, rtp_header.extension.transmissionTimeOffset); | 418 EXPECT_EQ(kNegTimeOffset, rtp_header.extension.transmissionTimeOffset); |
418 } | 419 } |
419 | 420 |
420 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAbsoluteSendTimeExtension) { | 421 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAbsoluteSendTimeExtension) { |
421 EXPECT_EQ(0, rtp_sender_->SetAbsoluteSendTime(kAbsoluteSendTime)); | 422 EXPECT_EQ(0, rtp_sender_->SetAbsoluteSendTime(kAbsoluteSendTime)); |
422 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 423 EXPECT_EQ( |
423 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); | 424 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
| 425 kAbsoluteSendTimeExtensionId)); |
424 | 426 |
425 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( | 427 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( |
426 packet_, kPayload, kMarkerBit, kTimestamp, 0)); | 428 packet_, kPayload, kMarkerBit, kTimestamp, 0)); |
427 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionTotalLength(), | 429 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionTotalLength(), |
428 length); | 430 length); |
429 | 431 |
430 // Verify | 432 // Verify |
431 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); | 433 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); |
432 webrtc::RTPHeader rtp_header; | 434 webrtc::RTPHeader rtp_header; |
433 | 435 |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
501 webrtc::RTPHeader rtp_header; | 503 webrtc::RTPHeader rtp_header; |
502 | 504 |
503 ASSERT_TRUE(rtp_parser.Parse(rtp_header, &map)); | 505 ASSERT_TRUE(rtp_parser.Parse(rtp_header, &map)); |
504 ASSERT_FALSE(rtp_parser.RTCP()); | 506 ASSERT_FALSE(rtp_parser.RTCP()); |
505 VerifyRTPHeaderCommon(rtp_header, false); | 507 VerifyRTPHeaderCommon(rtp_header, false); |
506 EXPECT_EQ(length, rtp_header.headerLength); | 508 EXPECT_EQ(length, rtp_header.headerLength); |
507 EXPECT_FALSE(rtp_header.extension.hasVideoRotation); | 509 EXPECT_FALSE(rtp_header.extension.hasVideoRotation); |
508 } | 510 } |
509 | 511 |
510 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAudioLevelExtension) { | 512 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAudioLevelExtension) { |
511 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 513 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, |
512 kRtpExtensionAudioLevel, kAudioLevelExtensionId)); | 514 kAudioLevelExtensionId)); |
513 | 515 |
514 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( | 516 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( |
515 packet_, kPayload, kMarkerBit, kTimestamp, 0)); | 517 packet_, kPayload, kMarkerBit, kTimestamp, 0)); |
516 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionTotalLength(), | 518 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionTotalLength(), |
517 length); | 519 length); |
518 | 520 |
519 // Verify | 521 // Verify |
520 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); | 522 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); |
521 webrtc::RTPHeader rtp_header; | 523 webrtc::RTPHeader rtp_header; |
522 | 524 |
(...skipping 24 matching lines...) Expand all Loading... |
547 EXPECT_FALSE(rtp_header2.extension.voiceActivity); | 549 EXPECT_FALSE(rtp_header2.extension.voiceActivity); |
548 EXPECT_EQ(0u, rtp_header2.extension.audioLevel); | 550 EXPECT_EQ(0u, rtp_header2.extension.audioLevel); |
549 } | 551 } |
550 | 552 |
551 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithHeaderExtensions) { | 553 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithHeaderExtensions) { |
552 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kTimeOffset)); | 554 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kTimeOffset)); |
553 EXPECT_EQ(0, rtp_sender_->SetAbsoluteSendTime(kAbsoluteSendTime)); | 555 EXPECT_EQ(0, rtp_sender_->SetAbsoluteSendTime(kAbsoluteSendTime)); |
554 EXPECT_EQ(0, | 556 EXPECT_EQ(0, |
555 rtp_sender_->SetTransportSequenceNumber(kTransportSequenceNumber)); | 557 rtp_sender_->SetTransportSequenceNumber(kTransportSequenceNumber)); |
556 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 558 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
557 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); | 559 kRtpExtensionTransmissionTimeOffset, |
558 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 560 kTransmissionTimeOffsetExtensionId)); |
559 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); | 561 EXPECT_EQ( |
560 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 562 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
561 kRtpExtensionAudioLevel, kAudioLevelExtensionId)); | 563 kAbsoluteSendTimeExtensionId)); |
| 564 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, |
| 565 kAudioLevelExtensionId)); |
562 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 566 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
563 kRtpExtensionTransportSequenceNumber, | 567 kRtpExtensionTransportSequenceNumber, |
564 kTransportSequenceNumberExtensionId)); | 568 kTransportSequenceNumberExtensionId)); |
565 | 569 |
566 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( | 570 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( |
567 packet_, kPayload, kMarkerBit, kTimestamp, 0)); | 571 packet_, kPayload, kMarkerBit, kTimestamp, 0)); |
568 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionTotalLength(), | 572 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionTotalLength(), |
569 length); | 573 length); |
570 | 574 |
571 // Verify | 575 // Verify |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
619 EXPECT_EQ(0u, rtp_header2.extension.transportSequenceNumber); | 623 EXPECT_EQ(0u, rtp_header2.extension.transportSequenceNumber); |
620 } | 624 } |
621 | 625 |
622 TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) { | 626 TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) { |
623 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, | 627 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, |
624 _, kSeqNum, _, _, _)) | 628 _, kSeqNum, _, _, _)) |
625 .WillRepeatedly(testing::Return()); | 629 .WillRepeatedly(testing::Return()); |
626 | 630 |
627 rtp_sender_->SetStorePacketsStatus(true, 10); | 631 rtp_sender_->SetStorePacketsStatus(true, 10); |
628 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 632 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
629 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); | 633 kRtpExtensionTransmissionTimeOffset, |
630 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 634 kTransmissionTimeOffsetExtensionId)); |
631 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); | 635 EXPECT_EQ( |
| 636 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
| 637 kAbsoluteSendTimeExtensionId)); |
632 rtp_sender_->SetTargetBitrate(300000); | 638 rtp_sender_->SetTargetBitrate(300000); |
633 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 639 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
634 int rtp_length_int = rtp_sender_->BuildRTPheader( | 640 int rtp_length_int = rtp_sender_->BuildRTPheader( |
635 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); | 641 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); |
636 ASSERT_NE(-1, rtp_length_int); | 642 ASSERT_NE(-1, rtp_length_int); |
637 size_t rtp_length = static_cast<size_t>(rtp_length_int); | 643 size_t rtp_length = static_cast<size_t>(rtp_length_int); |
638 | 644 |
639 // Packet should be stored in a send bucket. | 645 // Packet should be stored in a send bucket. |
640 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, | 646 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, |
641 capture_time_ms, kAllowRetransmission, | 647 capture_time_ms, kAllowRetransmission, |
(...skipping 27 matching lines...) Expand all Loading... |
669 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); | 675 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); |
670 } | 676 } |
671 | 677 |
672 TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) { | 678 TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) { |
673 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, | 679 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, |
674 _, kSeqNum, _, _, _)) | 680 _, kSeqNum, _, _, _)) |
675 .WillRepeatedly(testing::Return()); | 681 .WillRepeatedly(testing::Return()); |
676 | 682 |
677 rtp_sender_->SetStorePacketsStatus(true, 10); | 683 rtp_sender_->SetStorePacketsStatus(true, 10); |
678 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 684 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
679 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); | 685 kRtpExtensionTransmissionTimeOffset, |
680 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 686 kTransmissionTimeOffsetExtensionId)); |
681 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); | 687 EXPECT_EQ( |
| 688 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
| 689 kAbsoluteSendTimeExtensionId)); |
682 rtp_sender_->SetTargetBitrate(300000); | 690 rtp_sender_->SetTargetBitrate(300000); |
683 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 691 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
684 int rtp_length_int = rtp_sender_->BuildRTPheader( | 692 int rtp_length_int = rtp_sender_->BuildRTPheader( |
685 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); | 693 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); |
686 ASSERT_NE(-1, rtp_length_int); | 694 ASSERT_NE(-1, rtp_length_int); |
687 size_t rtp_length = static_cast<size_t>(rtp_length_int); | 695 size_t rtp_length = static_cast<size_t>(rtp_length_int); |
688 | 696 |
689 // Packet should be stored in a send bucket. | 697 // Packet should be stored in a send bucket. |
690 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, | 698 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, |
691 capture_time_ms, kAllowRetransmission, | 699 capture_time_ms, kAllowRetransmission, |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
733 // Make all (non-padding) packets go to send queue. | 741 // Make all (non-padding) packets go to send queue. |
734 EXPECT_CALL(mock_paced_sender_, | 742 EXPECT_CALL(mock_paced_sender_, |
735 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)) | 743 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)) |
736 .WillRepeatedly(testing::Return()); | 744 .WillRepeatedly(testing::Return()); |
737 | 745 |
738 uint16_t seq_num = kSeqNum; | 746 uint16_t seq_num = kSeqNum; |
739 uint32_t timestamp = kTimestamp; | 747 uint32_t timestamp = kTimestamp; |
740 rtp_sender_->SetStorePacketsStatus(true, 10); | 748 rtp_sender_->SetStorePacketsStatus(true, 10); |
741 size_t rtp_header_len = kRtpHeaderSize; | 749 size_t rtp_header_len = kRtpHeaderSize; |
742 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 750 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
743 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); | 751 kRtpExtensionTransmissionTimeOffset, |
| 752 kTransmissionTimeOffsetExtensionId)); |
744 rtp_header_len += 4; // 4 bytes extension. | 753 rtp_header_len += 4; // 4 bytes extension. |
745 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 754 EXPECT_EQ( |
746 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); | 755 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
| 756 kAbsoluteSendTimeExtensionId)); |
747 rtp_header_len += 4; // 4 bytes extension. | 757 rtp_header_len += 4; // 4 bytes extension. |
748 rtp_header_len += 4; // 4 extra bytes common to all extension headers. | 758 rtp_header_len += 4; // 4 extra bytes common to all extension headers. |
749 | 759 |
750 // Create and set up parser. | 760 // Create and set up parser. |
751 rtc::scoped_ptr<webrtc::RtpHeaderParser> rtp_parser( | 761 rtc::scoped_ptr<webrtc::RtpHeaderParser> rtp_parser( |
752 webrtc::RtpHeaderParser::Create()); | 762 webrtc::RtpHeaderParser::Create()); |
753 ASSERT_TRUE(rtp_parser.get() != nullptr); | 763 ASSERT_TRUE(rtp_parser.get() != nullptr); |
754 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, | 764 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, |
755 kTransmissionTimeOffsetExtensionId); | 765 kTransmissionTimeOffsetExtensionId); |
756 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 766 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
808 EXPECT_EQ(offset, rtp_header.extension.transmissionTimeOffset); | 818 EXPECT_EQ(offset, rtp_header.extension.transmissionTimeOffset); |
809 uint64_t expected_send_time = | 819 uint64_t expected_send_time = |
810 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); | 820 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); |
811 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); | 821 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); |
812 fake_clock_.AdvanceTimeMilliseconds(kPaddingPeriodMs); | 822 fake_clock_.AdvanceTimeMilliseconds(kPaddingPeriodMs); |
813 timestamp += 90 * kPaddingPeriodMs; | 823 timestamp += 90 * kPaddingPeriodMs; |
814 } | 824 } |
815 | 825 |
816 // Send a regular video packet again. | 826 // Send a regular video packet again. |
817 capture_time_ms = fake_clock_.TimeInMilliseconds(); | 827 capture_time_ms = fake_clock_.TimeInMilliseconds(); |
818 rtp_length_int = rtp_sender_->BuildRTPheader( | 828 rtp_length_int = rtp_sender_->BuildRTPheader(packet_, kPayload, kMarkerBit, |
819 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); | 829 timestamp, capture_time_ms); |
820 ASSERT_NE(-1, rtp_length_int); | 830 ASSERT_NE(-1, rtp_length_int); |
821 rtp_length = static_cast<size_t>(rtp_length_int); | 831 rtp_length = static_cast<size_t>(rtp_length_int); |
822 | 832 |
823 // Packet should be stored in a send bucket. | 833 // Packet should be stored in a send bucket. |
824 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, | 834 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, |
825 capture_time_ms, kAllowRetransmission, | 835 capture_time_ms, kAllowRetransmission, |
826 RtpPacketSender::kNormalPriority)); | 836 RtpPacketSender::kNormalPriority)); |
827 | 837 |
828 rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false); | 838 rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false); |
829 // Process send bucket. | 839 // Process send bucket. |
830 EXPECT_EQ(++total_packets_sent, transport_.packets_sent_); | 840 EXPECT_EQ(++total_packets_sent, transport_.packets_sent_); |
831 EXPECT_EQ(rtp_length, transport_.last_sent_packet_len_); | 841 EXPECT_EQ(rtp_length, transport_.last_sent_packet_len_); |
832 // Parse sent packet. | 842 // Parse sent packet. |
833 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, rtp_length, | 843 ASSERT_TRUE( |
834 &rtp_header)); | 844 rtp_parser->Parse(transport_.last_sent_packet_, rtp_length, &rtp_header)); |
835 | 845 |
836 // Verify sequence number and timestamp. | 846 // Verify sequence number and timestamp. |
837 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); | 847 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); |
838 EXPECT_EQ(timestamp, rtp_header.timestamp); | 848 EXPECT_EQ(timestamp, rtp_header.timestamp); |
839 // Verify transmission time offset. This packet is sent without delay. | 849 // Verify transmission time offset. This packet is sent without delay. |
840 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); | 850 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); |
841 uint64_t expected_send_time = | 851 uint64_t expected_send_time = |
842 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); | 852 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); |
843 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); | 853 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); |
844 } | 854 } |
845 | 855 |
846 TEST_F(RtpSenderTest, SendRedundantPayloads) { | 856 TEST_F(RtpSenderTest, SendRedundantPayloads) { |
847 MockTransport transport; | 857 MockTransport transport; |
848 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport, nullptr, | 858 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport, nullptr, |
849 &mock_paced_sender_, nullptr, nullptr, | 859 &mock_paced_sender_, nullptr, nullptr, |
850 nullptr, nullptr, nullptr)); | 860 nullptr, nullptr, nullptr)); |
851 rtp_sender_->SetSequenceNumber(kSeqNum); | 861 rtp_sender_->SetSequenceNumber(kSeqNum); |
852 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload); | 862 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload); |
853 // Make all packets go through the pacer. | 863 // Make all packets go through the pacer. |
854 EXPECT_CALL(mock_paced_sender_, | 864 EXPECT_CALL(mock_paced_sender_, |
855 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)) | 865 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)) |
856 .WillRepeatedly(testing::Return()); | 866 .WillRepeatedly(testing::Return()); |
857 | 867 |
858 uint16_t seq_num = kSeqNum; | 868 uint16_t seq_num = kSeqNum; |
859 rtp_sender_->SetStorePacketsStatus(true, 10); | 869 rtp_sender_->SetStorePacketsStatus(true, 10); |
860 int32_t rtp_header_len = kRtpHeaderSize; | 870 int32_t rtp_header_len = kRtpHeaderSize; |
861 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 871 EXPECT_EQ( |
862 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); | 872 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
| 873 kAbsoluteSendTimeExtensionId)); |
863 rtp_header_len += 4; // 4 bytes extension. | 874 rtp_header_len += 4; // 4 bytes extension. |
864 rtp_header_len += 4; // 4 extra bytes common to all extension headers. | 875 rtp_header_len += 4; // 4 extra bytes common to all extension headers. |
865 | 876 |
866 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); | 877 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); |
867 rtp_sender_->SetRtxSsrc(1234); | 878 rtp_sender_->SetRtxSsrc(1234); |
868 | 879 |
869 // Create and set up parser. | 880 // Create and set up parser. |
870 rtc::scoped_ptr<webrtc::RtpHeaderParser> rtp_parser( | 881 rtc::scoped_ptr<webrtc::RtpHeaderParser> rtp_parser( |
871 webrtc::RtpHeaderParser::Create()); | 882 webrtc::RtpHeaderParser::Create()); |
872 ASSERT_TRUE(rtp_parser.get() != nullptr); | 883 ASSERT_TRUE(rtp_parser.get() != nullptr); |
873 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, | 884 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, |
874 kTransmissionTimeOffsetExtensionId); | 885 kTransmissionTimeOffsetExtensionId); |
875 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 886 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
876 kAbsoluteSendTimeExtensionId); | 887 kAbsoluteSendTimeExtensionId); |
877 rtp_sender_->SetTargetBitrate(300000); | 888 rtp_sender_->SetTargetBitrate(300000); |
878 const size_t kNumPayloadSizes = 10; | 889 const size_t kNumPayloadSizes = 10; |
879 const size_t kPayloadSizes[kNumPayloadSizes] = {500, 550, 600, 650, 700, 750, | 890 const size_t kPayloadSizes[kNumPayloadSizes] = {500, 550, 600, 650, 700, |
880 800, 850, 900, 950}; | 891 750, 800, 850, 900, 950}; |
881 // Send 10 packets of increasing size. | 892 // Send 10 packets of increasing size. |
882 for (size_t i = 0; i < kNumPayloadSizes; ++i) { | 893 for (size_t i = 0; i < kNumPayloadSizes; ++i) { |
883 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 894 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
884 EXPECT_CALL(transport, SendRtp(_, _, _)).WillOnce(testing::Return(true)); | 895 EXPECT_CALL(transport, SendRtp(_, _, _)).WillOnce(testing::Return(true)); |
885 SendPacket(capture_time_ms, kPayloadSizes[i]); | 896 SendPacket(capture_time_ms, kPayloadSizes[i]); |
886 rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false); | 897 rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false); |
887 fake_clock_.AdvanceTimeMilliseconds(33); | 898 fake_clock_.AdvanceTimeMilliseconds(33); |
888 } | 899 } |
889 // The amount of padding to send it too small to send a payload packet. | 900 // The amount of padding to send it too small to send a payload packet. |
890 EXPECT_CALL(transport, SendRtp(_, kMaxPaddingSize + rtp_header_len, _)) | 901 EXPECT_CALL(transport, SendRtp(_, kMaxPaddingSize + rtp_header_len, _)) |
(...skipping 25 matching lines...) Expand all Loading... |
916 // Send keyframe | 927 // Send keyframe |
917 ASSERT_EQ( | 928 ASSERT_EQ( |
918 0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 4321, | 929 0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 4321, |
919 payload, sizeof(payload), nullptr)); | 930 payload, sizeof(payload), nullptr)); |
920 | 931 |
921 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, | 932 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
922 transport_.last_sent_packet_len_); | 933 transport_.last_sent_packet_len_); |
923 webrtc::RTPHeader rtp_header; | 934 webrtc::RTPHeader rtp_header; |
924 ASSERT_TRUE(rtp_parser.Parse(rtp_header)); | 935 ASSERT_TRUE(rtp_parser.Parse(rtp_header)); |
925 | 936 |
926 const uint8_t* payload_data = GetPayloadData(rtp_header, | 937 const uint8_t* payload_data = |
927 transport_.last_sent_packet_); | 938 GetPayloadData(rtp_header, transport_.last_sent_packet_); |
928 uint8_t generic_header = *payload_data++; | 939 uint8_t generic_header = *payload_data++; |
929 | 940 |
930 ASSERT_EQ(sizeof(payload) + sizeof(generic_header), | 941 ASSERT_EQ(sizeof(payload) + sizeof(generic_header), |
931 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); | 942 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); |
932 | 943 |
933 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); | 944 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); |
934 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); | 945 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); |
935 | 946 |
936 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); | 947 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); |
937 | 948 |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1036 nullptr)); | 1047 nullptr)); |
1037 | 1048 |
1038 // Simulate kNumPackets sent with kPacketInterval ms intervals. | 1049 // Simulate kNumPackets sent with kPacketInterval ms intervals. |
1039 const uint32_t kNumPackets = 15; | 1050 const uint32_t kNumPackets = 15; |
1040 const uint32_t kPacketInterval = 20; | 1051 const uint32_t kPacketInterval = 20; |
1041 // Overhead = 12 bytes RTP header + 1 byte generic header. | 1052 // Overhead = 12 bytes RTP header + 1 byte generic header. |
1042 const uint32_t kPacketOverhead = 13; | 1053 const uint32_t kPacketOverhead = 13; |
1043 | 1054 |
1044 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; | 1055 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; |
1045 const uint8_t payload_type = 127; | 1056 const uint8_t payload_type = 127; |
1046 ASSERT_EQ( | 1057 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, |
1047 0, | 1058 0, 1500)); |
1048 rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, 0, 1500)); | |
1049 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1059 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1050 rtp_sender_->SetStorePacketsStatus(true, 1); | 1060 rtp_sender_->SetStorePacketsStatus(true, 1); |
1051 uint32_t ssrc = rtp_sender_->SSRC(); | 1061 uint32_t ssrc = rtp_sender_->SSRC(); |
1052 | 1062 |
1053 // Initial process call so we get a new time window. | 1063 // Initial process call so we get a new time window. |
1054 rtp_sender_->ProcessBitrate(); | 1064 rtp_sender_->ProcessBitrate(); |
1055 uint64_t start_time = fake_clock_.CurrentNtpInMilliseconds(); | 1065 uint64_t start_time = fake_clock_.CurrentNtpInMilliseconds(); |
1056 | 1066 |
1057 // Send a few frames. | 1067 // Send a few frames. |
1058 for (uint32_t i = 0; i < kNumPackets; ++i) { | 1068 for (uint32_t i = 0; i < kNumPackets; ++i) { |
1059 ASSERT_EQ(0, | 1069 ASSERT_EQ(0, |
1060 rtp_sender_->SendOutgoingData(kVideoFrameKey, | 1070 rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, |
1061 payload_type, | 1071 4321, payload, sizeof(payload), 0)); |
1062 1234, | |
1063 4321, | |
1064 payload, | |
1065 sizeof(payload), | |
1066 0)); | |
1067 fake_clock_.AdvanceTimeMilliseconds(kPacketInterval); | 1072 fake_clock_.AdvanceTimeMilliseconds(kPacketInterval); |
1068 } | 1073 } |
1069 | 1074 |
1070 rtp_sender_->ProcessBitrate(); | 1075 rtp_sender_->ProcessBitrate(); |
1071 | 1076 |
1072 const uint32_t expected_packet_rate = 1000 / kPacketInterval; | 1077 const uint32_t expected_packet_rate = 1000 / kPacketInterval; |
1073 | 1078 |
1074 // We get one call for every stats updated, thus two calls since both the | 1079 // We get one call for every stats updated, thus two calls since both the |
1075 // stream stats and the retransmit stats are updated once. | 1080 // stream stats and the retransmit stats are updated once. |
1076 EXPECT_EQ(2u, callback.num_calls_); | 1081 EXPECT_EQ(2u, callback.num_calls_); |
(...skipping 16 matching lines...) Expand all Loading... |
1093 rtp_sender_.reset(new RTPSender(true, &fake_clock_, &transport_, nullptr, | 1098 rtp_sender_.reset(new RTPSender(true, &fake_clock_, &transport_, nullptr, |
1094 nullptr, nullptr, nullptr, nullptr, nullptr, | 1099 nullptr, nullptr, nullptr, nullptr, nullptr, |
1095 nullptr)); | 1100 nullptr)); |
1096 rtp_sender_->SetSequenceNumber(kSeqNum); | 1101 rtp_sender_->SetSequenceNumber(kSeqNum); |
1097 } | 1102 } |
1098 }; | 1103 }; |
1099 | 1104 |
1100 TEST_F(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) { | 1105 TEST_F(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) { |
1101 class TestCallback : public StreamDataCountersCallback { | 1106 class TestCallback : public StreamDataCountersCallback { |
1102 public: | 1107 public: |
1103 TestCallback() | 1108 TestCallback() : StreamDataCountersCallback(), ssrc_(0), counters_() {} |
1104 : StreamDataCountersCallback(), ssrc_(0), counters_() {} | |
1105 virtual ~TestCallback() {} | 1109 virtual ~TestCallback() {} |
1106 | 1110 |
1107 void DataCountersUpdated(const StreamDataCounters& counters, | 1111 void DataCountersUpdated(const StreamDataCounters& counters, |
1108 uint32_t ssrc) override { | 1112 uint32_t ssrc) override { |
1109 ssrc_ = ssrc; | 1113 ssrc_ = ssrc; |
1110 counters_ = counters; | 1114 counters_ = counters; |
1111 } | 1115 } |
1112 | 1116 |
1113 uint32_t ssrc_; | 1117 uint32_t ssrc_; |
1114 StreamDataCounters counters_; | 1118 StreamDataCounters counters_; |
1115 | 1119 |
1116 void MatchPacketCounter(const RtpPacketCounter& expected, | 1120 void MatchPacketCounter(const RtpPacketCounter& expected, |
1117 const RtpPacketCounter& actual) { | 1121 const RtpPacketCounter& actual) { |
1118 EXPECT_EQ(expected.payload_bytes, actual.payload_bytes); | 1122 EXPECT_EQ(expected.payload_bytes, actual.payload_bytes); |
1119 EXPECT_EQ(expected.header_bytes, actual.header_bytes); | 1123 EXPECT_EQ(expected.header_bytes, actual.header_bytes); |
1120 EXPECT_EQ(expected.padding_bytes, actual.padding_bytes); | 1124 EXPECT_EQ(expected.padding_bytes, actual.padding_bytes); |
1121 EXPECT_EQ(expected.packets, actual.packets); | 1125 EXPECT_EQ(expected.packets, actual.packets); |
1122 } | 1126 } |
1123 | 1127 |
1124 void Matches(uint32_t ssrc, const StreamDataCounters& counters) { | 1128 void Matches(uint32_t ssrc, const StreamDataCounters& counters) { |
1125 EXPECT_EQ(ssrc, ssrc_); | 1129 EXPECT_EQ(ssrc, ssrc_); |
1126 MatchPacketCounter(counters.transmitted, counters_.transmitted); | 1130 MatchPacketCounter(counters.transmitted, counters_.transmitted); |
1127 MatchPacketCounter(counters.retransmitted, counters_.retransmitted); | 1131 MatchPacketCounter(counters.retransmitted, counters_.retransmitted); |
1128 EXPECT_EQ(counters.fec.packets, counters_.fec.packets); | 1132 EXPECT_EQ(counters.fec.packets, counters_.fec.packets); |
1129 } | 1133 } |
1130 | |
1131 } callback; | 1134 } callback; |
1132 | 1135 |
1133 const uint8_t kRedPayloadType = 96; | 1136 const uint8_t kRedPayloadType = 96; |
1134 const uint8_t kUlpfecPayloadType = 97; | 1137 const uint8_t kUlpfecPayloadType = 97; |
1135 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; | 1138 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; |
1136 const uint8_t payload_type = 127; | 1139 const uint8_t payload_type = 127; |
1137 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, | 1140 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, |
1138 0, 1500)); | 1141 0, 1500)); |
1139 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1142 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1140 rtp_sender_->SetStorePacketsStatus(true, 1); | 1143 rtp_sender_->SetStorePacketsStatus(true, 1); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1207 | 1210 |
1208 ASSERT_EQ( | 1211 ASSERT_EQ( |
1209 0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, 4321, | 1212 0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, 4321, |
1210 payload, sizeof(payload), nullptr)); | 1213 payload, sizeof(payload), nullptr)); |
1211 | 1214 |
1212 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, | 1215 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
1213 transport_.last_sent_packet_len_); | 1216 transport_.last_sent_packet_len_); |
1214 webrtc::RTPHeader rtp_header; | 1217 webrtc::RTPHeader rtp_header; |
1215 ASSERT_TRUE(rtp_parser.Parse(rtp_header)); | 1218 ASSERT_TRUE(rtp_parser.Parse(rtp_header)); |
1216 | 1219 |
1217 const uint8_t* payload_data = GetPayloadData(rtp_header, | 1220 const uint8_t* payload_data = |
1218 transport_.last_sent_packet_); | 1221 GetPayloadData(rtp_header, transport_.last_sent_packet_); |
1219 | 1222 |
1220 ASSERT_EQ(sizeof(payload), | 1223 ASSERT_EQ(sizeof(payload), |
1221 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); | 1224 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); |
1222 | 1225 |
1223 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); | 1226 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); |
1224 } | 1227 } |
1225 | 1228 |
1226 TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) { | 1229 TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) { |
1227 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel)); | 1230 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel)); |
1228 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 1231 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, |
1229 kRtpExtensionAudioLevel, kAudioLevelExtensionId)); | 1232 kAudioLevelExtensionId)); |
1230 | 1233 |
1231 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; | 1234 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; |
1232 const uint8_t payload_type = 127; | 1235 const uint8_t payload_type = 127; |
1233 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, | 1236 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, |
1234 0, 1500)); | 1237 0, 1500)); |
1235 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1238 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1236 | 1239 |
1237 ASSERT_EQ( | 1240 ASSERT_EQ( |
1238 0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, 4321, | 1241 0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, 4321, |
1239 payload, sizeof(payload), nullptr)); | 1242 payload, sizeof(payload), nullptr)); |
1240 | 1243 |
1241 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, | 1244 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
1242 transport_.last_sent_packet_len_); | 1245 transport_.last_sent_packet_len_); |
1243 webrtc::RTPHeader rtp_header; | 1246 webrtc::RTPHeader rtp_header; |
1244 ASSERT_TRUE(rtp_parser.Parse(rtp_header)); | 1247 ASSERT_TRUE(rtp_parser.Parse(rtp_header)); |
1245 | 1248 |
1246 const uint8_t* payload_data = GetPayloadData(rtp_header, | 1249 const uint8_t* payload_data = |
1247 transport_.last_sent_packet_); | 1250 GetPayloadData(rtp_header, transport_.last_sent_packet_); |
1248 | 1251 |
1249 ASSERT_EQ(sizeof(payload), | 1252 ASSERT_EQ(sizeof(payload), |
1250 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); | 1253 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); |
1251 | 1254 |
1252 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); | 1255 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); |
1253 | 1256 |
1254 uint8_t extension[] = { 0xbe, 0xde, 0x00, 0x01, | 1257 uint8_t extension[] = { |
1255 (kAudioLevelExtensionId << 4) + 0, // ID + length. | 1258 0xbe, 0xde, 0x00, 0x01, |
1256 kAudioLevel, // Data. | 1259 (kAudioLevelExtensionId << 4) + 0, // ID + length. |
1257 0x00, 0x00 // Padding. | 1260 kAudioLevel, // Data. |
1258 }; | 1261 0x00, 0x00 // Padding. |
| 1262 }; |
1259 | 1263 |
1260 EXPECT_EQ(0, memcmp(extension, payload_data - sizeof(extension), | 1264 EXPECT_EQ(0, memcmp(extension, payload_data - sizeof(extension), |
1261 sizeof(extension))); | 1265 sizeof(extension))); |
1262 } | 1266 } |
1263 | 1267 |
1264 // As RFC4733, named telephone events are carried as part of the audio stream | 1268 // As RFC4733, named telephone events are carried as part of the audio stream |
1265 // and must use the same sequence number and timestamp base as the regular | 1269 // and must use the same sequence number and timestamp base as the regular |
1266 // audio channel. | 1270 // audio channel. |
1267 // This test checks the marker bit for the first packet and the consequent | 1271 // This test checks the marker bit for the first packet and the consequent |
1268 // packets of the same telephone event. Since it is specifically for DTMF | 1272 // packets of the same telephone event. Since it is specifically for DTMF |
1269 // events, ignoring audio packets and sending kEmptyFrame instead of those. | 1273 // events, ignoring audio packets and sending kEmptyFrame instead of those. |
1270 TEST_F(RtpSenderAudioTest, CheckMarkerBitForTelephoneEvents) { | 1274 TEST_F(RtpSenderAudioTest, CheckMarkerBitForTelephoneEvents) { |
1271 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "telephone-event"; | 1275 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "telephone-event"; |
1272 uint8_t payload_type = 126; | 1276 uint8_t payload_type = 126; |
1273 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 0, | 1277 ASSERT_EQ(0, |
1274 0, 0)); | 1278 rtp_sender_->RegisterPayload(payload_name, payload_type, 0, 0, 0)); |
1275 // For Telephone events, payload is not added to the registered payload list, | 1279 // For Telephone events, payload is not added to the registered payload list, |
1276 // it will register only the payload used for audio stream. | 1280 // it will register only the payload used for audio stream. |
1277 // Registering the payload again for audio stream with different payload name. | 1281 // Registering the payload again for audio stream with different payload name. |
1278 strcpy(payload_name, "payload_name"); | 1282 strcpy(payload_name, "payload_name"); |
1279 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 8000, | 1283 ASSERT_EQ( |
1280 1, 0)); | 1284 0, rtp_sender_->RegisterPayload(payload_name, payload_type, 8000, 1, 0)); |
1281 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 1285 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
1282 // DTMF event key=9, duration=500 and attenuationdB=10 | 1286 // DTMF event key=9, duration=500 and attenuationdB=10 |
1283 rtp_sender_->SendTelephoneEvent(9, 500, 10); | 1287 rtp_sender_->SendTelephoneEvent(9, 500, 10); |
1284 // During start, it takes the starting timestamp as last sent timestamp. | 1288 // During start, it takes the starting timestamp as last sent timestamp. |
1285 // The duration is calculated as the difference of current and last sent | 1289 // The duration is calculated as the difference of current and last sent |
1286 // timestamp. So for first call it will skip since the duration is zero. | 1290 // timestamp. So for first call it will skip since the duration is zero. |
1287 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, | 1291 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, |
1288 capture_time_ms, 0, nullptr, 0, | 1292 capture_time_ms, 0, nullptr, 0, |
1289 nullptr)); | 1293 nullptr)); |
1290 // DTMF Sample Length is (Frequency/1000) * Duration. | 1294 // DTMF Sample Length is (Frequency/1000) * Duration. |
1291 // So in this case, it is (8000/1000) * 500 = 4000. | 1295 // So in this case, it is (8000/1000) * 500 = 4000. |
1292 // Sending it as two packets. | 1296 // Sending it as two packets. |
1293 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, | 1297 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, |
1294 capture_time_ms + 2000, 0, nullptr, | 1298 capture_time_ms + 2000, 0, nullptr, |
1295 0, nullptr)); | 1299 0, nullptr)); |
1296 rtc::scoped_ptr<webrtc::RtpHeaderParser> rtp_parser( | 1300 rtc::scoped_ptr<webrtc::RtpHeaderParser> rtp_parser( |
1297 webrtc::RtpHeaderParser::Create()); | 1301 webrtc::RtpHeaderParser::Create()); |
1298 ASSERT_TRUE(rtp_parser.get() != nullptr); | 1302 ASSERT_TRUE(rtp_parser.get() != nullptr); |
1299 webrtc::RTPHeader rtp_header; | 1303 webrtc::RTPHeader rtp_header; |
1300 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, | 1304 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, |
1301 transport_.last_sent_packet_len_, | 1305 transport_.last_sent_packet_len_, &rtp_header)); |
1302 &rtp_header)); | |
1303 // Marker Bit should be set to 1 for first packet. | 1306 // Marker Bit should be set to 1 for first packet. |
1304 EXPECT_TRUE(rtp_header.markerBit); | 1307 EXPECT_TRUE(rtp_header.markerBit); |
1305 | 1308 |
1306 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, | 1309 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, |
1307 capture_time_ms + 4000, 0, nullptr, | 1310 capture_time_ms + 4000, 0, nullptr, |
1308 0, nullptr)); | 1311 0, nullptr)); |
1309 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, | 1312 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, |
1310 transport_.last_sent_packet_len_, | 1313 transport_.last_sent_packet_len_, &rtp_header)); |
1311 &rtp_header)); | |
1312 // Marker Bit should be set to 0 for rest of the packets. | 1314 // Marker Bit should be set to 0 for rest of the packets. |
1313 EXPECT_FALSE(rtp_header.markerBit); | 1315 EXPECT_FALSE(rtp_header.markerBit); |
1314 } | 1316 } |
1315 | 1317 |
1316 TEST_F(RtpSenderTestWithoutPacer, BytesReportedCorrectly) { | 1318 TEST_F(RtpSenderTestWithoutPacer, BytesReportedCorrectly) { |
1317 const char* kPayloadName = "GENERIC"; | 1319 const char* kPayloadName = "GENERIC"; |
1318 const uint8_t kPayloadType = 127; | 1320 const uint8_t kPayloadType = 127; |
1319 rtp_sender_->SetSSRC(1234); | 1321 rtp_sender_->SetSSRC(1234); |
1320 rtp_sender_->SetRtxSsrc(4321); | 1322 rtp_sender_->SetRtxSsrc(4321); |
1321 rtp_sender_->SetRtxPayloadType(kPayloadType - 1, kPayloadType); | 1323 rtp_sender_->SetRtxPayloadType(kPayloadType - 1, kPayloadType); |
1322 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); | 1324 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); |
1323 | 1325 |
1324 ASSERT_EQ( | 1326 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000, |
1325 0, | 1327 0, 1500)); |
1326 rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000, 0, 1500)); | |
1327 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1328 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1328 | 1329 |
1329 ASSERT_EQ(0, | 1330 ASSERT_EQ( |
1330 rtp_sender_->SendOutgoingData(kVideoFrameKey, | 1331 0, rtp_sender_->SendOutgoingData(kVideoFrameKey, kPayloadType, 1234, 4321, |
1331 kPayloadType, | 1332 payload, sizeof(payload), 0)); |
1332 1234, | |
1333 4321, | |
1334 payload, | |
1335 sizeof(payload), | |
1336 0)); | |
1337 | 1333 |
1338 // Will send 2 full-size padding packets. | 1334 // Will send 2 full-size padding packets. |
1339 rtp_sender_->TimeToSendPadding(1); | 1335 rtp_sender_->TimeToSendPadding(1); |
1340 rtp_sender_->TimeToSendPadding(1); | 1336 rtp_sender_->TimeToSendPadding(1); |
1341 | 1337 |
1342 StreamDataCounters rtp_stats; | 1338 StreamDataCounters rtp_stats; |
1343 StreamDataCounters rtx_stats; | 1339 StreamDataCounters rtx_stats; |
1344 rtp_sender_->GetDataCounters(&rtp_stats, &rtx_stats); | 1340 rtp_sender_->GetDataCounters(&rtp_stats, &rtx_stats); |
1345 | 1341 |
1346 // Payload + 1-byte generic header. | 1342 // Payload + 1-byte generic header. |
1347 EXPECT_GT(rtp_stats.first_packet_time_ms, -1); | 1343 EXPECT_GT(rtp_stats.first_packet_time_ms, -1); |
1348 EXPECT_EQ(rtp_stats.transmitted.payload_bytes, sizeof(payload) + 1); | 1344 EXPECT_EQ(rtp_stats.transmitted.payload_bytes, sizeof(payload) + 1); |
1349 EXPECT_EQ(rtp_stats.transmitted.header_bytes, 12u); | 1345 EXPECT_EQ(rtp_stats.transmitted.header_bytes, 12u); |
1350 EXPECT_EQ(rtp_stats.transmitted.padding_bytes, 0u); | 1346 EXPECT_EQ(rtp_stats.transmitted.padding_bytes, 0u); |
1351 EXPECT_EQ(rtx_stats.transmitted.payload_bytes, 0u); | 1347 EXPECT_EQ(rtx_stats.transmitted.payload_bytes, 0u); |
1352 EXPECT_EQ(rtx_stats.transmitted.header_bytes, 24u); | 1348 EXPECT_EQ(rtx_stats.transmitted.header_bytes, 24u); |
1353 EXPECT_EQ(rtx_stats.transmitted.padding_bytes, 2 * kMaxPaddingSize); | 1349 EXPECT_EQ(rtx_stats.transmitted.padding_bytes, 2 * kMaxPaddingSize); |
1354 | 1350 |
1355 EXPECT_EQ(rtp_stats.transmitted.TotalBytes(), | 1351 EXPECT_EQ(rtp_stats.transmitted.TotalBytes(), |
1356 rtp_stats.transmitted.payload_bytes + | 1352 rtp_stats.transmitted.payload_bytes + |
1357 rtp_stats.transmitted.header_bytes + | 1353 rtp_stats.transmitted.header_bytes + |
1358 rtp_stats.transmitted.padding_bytes); | 1354 rtp_stats.transmitted.padding_bytes); |
1359 EXPECT_EQ(rtx_stats.transmitted.TotalBytes(), | 1355 EXPECT_EQ(rtx_stats.transmitted.TotalBytes(), |
1360 rtx_stats.transmitted.payload_bytes + | 1356 rtx_stats.transmitted.payload_bytes + |
1361 rtx_stats.transmitted.header_bytes + | 1357 rtx_stats.transmitted.header_bytes + |
1362 rtx_stats.transmitted.padding_bytes); | 1358 rtx_stats.transmitted.padding_bytes); |
1363 | 1359 |
1364 EXPECT_EQ(transport_.total_bytes_sent_, | 1360 EXPECT_EQ( |
1365 rtp_stats.transmitted.TotalBytes() + | 1361 transport_.total_bytes_sent_, |
1366 rtx_stats.transmitted.TotalBytes()); | 1362 rtp_stats.transmitted.TotalBytes() + rtx_stats.transmitted.TotalBytes()); |
1367 } | 1363 } |
1368 | 1364 |
1369 TEST_F(RtpSenderTestWithoutPacer, RespectsNackBitrateLimit) { | 1365 TEST_F(RtpSenderTestWithoutPacer, RespectsNackBitrateLimit) { |
1370 const int32_t kPacketSize = 1400; | 1366 const int32_t kPacketSize = 1400; |
1371 const int32_t kNumPackets = 30; | 1367 const int32_t kNumPackets = 30; |
1372 | 1368 |
1373 rtp_sender_->SetStorePacketsStatus(true, kNumPackets); | 1369 rtp_sender_->SetStorePacketsStatus(true, kNumPackets); |
1374 // Set bitrate (in kbps) to fit kNumPackets á kPacketSize bytes in one second. | 1370 // Set bitrate (in kbps) to fit kNumPackets á kPacketSize bytes in one second. |
1375 rtp_sender_->SetTargetBitrate(kNumPackets * kPacketSize * 8); | 1371 rtp_sender_->SetTargetBitrate(kNumPackets * kPacketSize * 8); |
1376 const uint16_t kStartSequenceNumber = rtp_sender_->SequenceNumber(); | 1372 const uint16_t kStartSequenceNumber = rtp_sender_->SequenceNumber(); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1420 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), | 1416 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), |
1421 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); | 1417 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); |
1422 | 1418 |
1423 // Verify that this packet does have CVO byte. | 1419 // Verify that this packet does have CVO byte. |
1424 VerifyCVOPacket( | 1420 VerifyCVOPacket( |
1425 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), | 1421 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), |
1426 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, | 1422 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, |
1427 hdr.rotation); | 1423 hdr.rotation); |
1428 } | 1424 } |
1429 } // namespace webrtc | 1425 } // namespace webrtc |
OLD | NEW |