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 20 matching lines...) Expand all Loading... | |
31 #include "webrtc/test/gtest.h" | 31 #include "webrtc/test/gtest.h" |
32 #include "webrtc/test/mock_transport.h" | 32 #include "webrtc/test/mock_transport.h" |
33 #include "webrtc/typedefs.h" | 33 #include "webrtc/typedefs.h" |
34 | 34 |
35 namespace webrtc { | 35 namespace webrtc { |
36 | 36 |
37 namespace { | 37 namespace { |
38 const int kTransmissionTimeOffsetExtensionId = 1; | 38 const int kTransmissionTimeOffsetExtensionId = 1; |
39 const int kAbsoluteSendTimeExtensionId = 14; | 39 const int kAbsoluteSendTimeExtensionId = 14; |
40 const int kTransportSequenceNumberExtensionId = 13; | 40 const int kTransportSequenceNumberExtensionId = 13; |
41 const int kVideoTimingExtensionId = 12; | |
41 const int kPayload = 100; | 42 const int kPayload = 100; |
42 const int kRtxPayload = 98; | 43 const int kRtxPayload = 98; |
43 const uint32_t kTimestamp = 10; | 44 const uint32_t kTimestamp = 10; |
44 const uint16_t kSeqNum = 33; | 45 const uint16_t kSeqNum = 33; |
45 const uint32_t kSsrc = 725242; | 46 const uint32_t kSsrc = 725242; |
46 const int kMaxPacketLength = 1500; | 47 const int kMaxPacketLength = 1500; |
47 const uint8_t kAudioLevel = 0x5a; | 48 const uint8_t kAudioLevel = 0x5a; |
48 const uint16_t kTransportSequenceNumber = 0xaabbu; | 49 const uint16_t kTransportSequenceNumber = 0xaabbu; |
49 const uint8_t kAudioLevelExtensionId = 9; | 50 const uint8_t kAudioLevelExtensionId = 9; |
50 const int kAudioPayload = 103; | 51 const int kAudioPayload = 103; |
(...skipping 16 matching lines...) Expand all Loading... | |
67 receivers_extensions_.Register(kRtpExtensionTransmissionTimeOffset, | 68 receivers_extensions_.Register(kRtpExtensionTransmissionTimeOffset, |
68 kTransmissionTimeOffsetExtensionId); | 69 kTransmissionTimeOffsetExtensionId); |
69 receivers_extensions_.Register(kRtpExtensionAbsoluteSendTime, | 70 receivers_extensions_.Register(kRtpExtensionAbsoluteSendTime, |
70 kAbsoluteSendTimeExtensionId); | 71 kAbsoluteSendTimeExtensionId); |
71 receivers_extensions_.Register(kRtpExtensionTransportSequenceNumber, | 72 receivers_extensions_.Register(kRtpExtensionTransportSequenceNumber, |
72 kTransportSequenceNumberExtensionId); | 73 kTransportSequenceNumberExtensionId); |
73 receivers_extensions_.Register(kRtpExtensionVideoRotation, | 74 receivers_extensions_.Register(kRtpExtensionVideoRotation, |
74 kVideoRotationExtensionId); | 75 kVideoRotationExtensionId); |
75 receivers_extensions_.Register(kRtpExtensionAudioLevel, | 76 receivers_extensions_.Register(kRtpExtensionAudioLevel, |
76 kAudioLevelExtensionId); | 77 kAudioLevelExtensionId); |
78 receivers_extensions_.Register(kRtpExtensionVideoTiming, | |
79 kVideoTimingExtensionId); | |
77 } | 80 } |
78 | 81 |
79 bool SendRtp(const uint8_t* data, | 82 bool SendRtp(const uint8_t* data, |
80 size_t len, | 83 size_t len, |
81 const PacketOptions& options) override { | 84 const PacketOptions& options) override { |
82 last_packet_id_ = options.packet_id; | 85 last_packet_id_ = options.packet_id; |
83 total_bytes_sent_ += len; | 86 total_bytes_sent_ += len; |
84 sent_packets_.push_back(RtpPacketReceived(&receivers_extensions_)); | 87 sent_packets_.push_back(RtpPacketReceived(&receivers_extensions_)); |
85 EXPECT_TRUE(sent_packets_.back().Parse(data, len)); | 88 EXPECT_TRUE(sent_packets_.back().Parse(data, len)); |
86 return true; | 89 return true; |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
340 packet->SetTimestamp(kTimestamp); | 343 packet->SetTimestamp(kTimestamp); |
341 | 344 |
342 ASSERT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get())); | 345 ASSERT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get())); |
343 ASSERT_TRUE(rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo())); | 346 ASSERT_TRUE(rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo())); |
344 | 347 |
345 ASSERT_EQ(1u, transport_.sent_packets_.size()); | 348 ASSERT_EQ(1u, transport_.sent_packets_.size()); |
346 // Verify padding packet timestamp. | 349 // Verify padding packet timestamp. |
347 EXPECT_EQ(kTimestamp, transport_.last_sent_packet().Timestamp()); | 350 EXPECT_EQ(kTimestamp, transport_.last_sent_packet().Timestamp()); |
348 } | 351 } |
349 | 352 |
353 | |
350 TEST_P(RtpSenderTestWithoutPacer, | 354 TEST_P(RtpSenderTestWithoutPacer, |
351 TransportFeedbackObserverGetsCorrectByteCount) { | 355 TransportFeedbackObserverGetsCorrectByteCount) { |
352 constexpr int kRtpOverheadBytesPerPacket = 12 + 8; | 356 constexpr int kRtpOverheadBytesPerPacket = 12 + 8; |
353 testing::NiceMock<MockOverheadObserver> mock_overhead_observer; | 357 testing::NiceMock<MockOverheadObserver> mock_overhead_observer; |
354 rtp_sender_.reset(new RTPSender( | 358 rtp_sender_.reset(new RTPSender( |
355 false, &fake_clock_, &transport_, nullptr, nullptr, &seq_num_allocator_, | 359 false, &fake_clock_, &transport_, nullptr, nullptr, &seq_num_allocator_, |
356 &feedback_observer_, nullptr, nullptr, nullptr, &mock_rtc_event_log_, | 360 &feedback_observer_, nullptr, nullptr, nullptr, &mock_rtc_event_log_, |
357 nullptr, &retransmission_rate_limiter_, &mock_overhead_observer)); | 361 nullptr, &retransmission_rate_limiter_, &mock_overhead_observer)); |
358 rtp_sender_->SetSSRC(kSsrc); | 362 rtp_sender_->SetSSRC(kSsrc); |
359 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 363 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
453 fake_clock_.TimeInMilliseconds(), false, | 457 fake_clock_.TimeInMilliseconds(), false, |
454 PacedPacketInfo()); | 458 PacedPacketInfo()); |
455 | 459 |
456 const auto& packet = transport_.last_sent_packet(); | 460 const auto& packet = transport_.last_sent_packet(); |
457 uint16_t transport_seq_no; | 461 uint16_t transport_seq_no; |
458 EXPECT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); | 462 EXPECT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); |
459 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); | 463 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); |
460 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); | 464 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); |
461 } | 465 } |
462 | 466 |
467 TEST_P(RtpSenderTestWithoutPacer, WritesTimestampToTimingExtension) { | |
468 rtp_sender_->SetStorePacketsStatus(true, 10); | |
469 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | |
470 kRtpExtensionVideoTiming, | |
471 kVideoTimingExtensionId)); | |
472 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | |
473 kRtpExtensionTransmissionTimeOffset, | |
474 kTransmissionTimeOffsetExtensionId)); | |
475 EXPECT_EQ( | |
476 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | |
477 kAbsoluteSendTimeExtensionId)); | |
sprang_webrtc
2017/06/13 14:14:14
why toffset and ast extensions?
ilnik
2017/06/13 14:55:44
Leftover from copypaste and playing around. Remove
| |
478 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | |
479 auto packet = rtp_sender_->AllocatePacket(); | |
480 packet->SetPayloadType(kPayload); | |
481 packet->SetMarker(true); | |
482 packet->SetTimestamp(kTimestamp); | |
483 packet->set_capture_time_ms(capture_time_ms); | |
484 VideoTiming kVideoTiming = {0u, 0u, 0u, 0u, 0u, 0u, true}; | |
sprang_webrtc
2017/06/13 14:14:14
const
ilnik
2017/06/13 14:55:44
Done.
| |
485 packet->SetExtension<VideoTimingExtension>(kVideoTiming); | |
486 EXPECT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get())); | |
487 size_t packet_size = packet->size(); | |
488 webrtc::RTPHeader rtp_header; | |
489 | |
490 packet->GetHeader(&rtp_header); | |
491 | |
492 const int kStoredTimeInMs = 100; | |
493 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); | |
494 | |
495 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), | |
496 kAllowRetransmission, | |
497 RtpPacketSender::kNormalPriority)); | |
498 EXPECT_EQ(1, transport_.packets_sent()); | |
499 EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); | |
500 | |
501 transport_.last_sent_packet().GetHeader(&rtp_header); | |
502 EXPECT_TRUE(rtp_header.extension.hasVideoTiming); | |
503 EXPECT_EQ(kStoredTimeInMs, | |
504 rtp_header.extension.videoTiming.pacer_exit_ms_delta); | |
sprang_webrtc
2017/06/13 14:14:14
nit: indentation?
ilnik
2017/06/13 14:55:44
Done.
| |
505 | |
506 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); | |
507 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, capture_time_ms, false, | |
508 PacedPacketInfo()); | |
509 | |
510 EXPECT_EQ(2, transport_.packets_sent()); | |
511 EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); | |
512 | |
513 transport_.last_sent_packet().GetHeader(&rtp_header); | |
514 EXPECT_TRUE(rtp_header.extension.hasVideoTiming); | |
515 EXPECT_EQ(kStoredTimeInMs * 2, | |
516 rtp_header.extension.videoTiming.pacer_exit_ms_delta); | |
517 } | |
518 | |
463 TEST_P(RtpSenderTest, TrafficSmoothingWithExtensions) { | 519 TEST_P(RtpSenderTest, TrafficSmoothingWithExtensions) { |
464 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, | 520 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, |
465 kSsrc, kSeqNum, _, _, _)); | 521 kSsrc, kSeqNum, _, _, _)); |
466 EXPECT_CALL(mock_rtc_event_log_, | 522 EXPECT_CALL(mock_rtc_event_log_, |
467 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); | 523 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); |
468 | 524 |
469 rtp_sender_->SetStorePacketsStatus(true, 10); | 525 rtp_sender_->SetStorePacketsStatus(true, 10); |
470 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 526 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
471 kRtpExtensionTransmissionTimeOffset, | 527 kRtpExtensionTransmissionTimeOffset, |
472 kTransmissionTimeOffsetExtensionId)); | 528 kTransmissionTimeOffsetExtensionId)); |
(...skipping 1068 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1541 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, | 1597 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, |
1542 RtpSenderTestWithoutPacer, | 1598 RtpSenderTestWithoutPacer, |
1543 ::testing::Bool()); | 1599 ::testing::Bool()); |
1544 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, | 1600 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, |
1545 RtpSenderVideoTest, | 1601 RtpSenderVideoTest, |
1546 ::testing::Bool()); | 1602 ::testing::Bool()); |
1547 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, | 1603 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, |
1548 RtpSenderAudioTest, | 1604 RtpSenderAudioTest, |
1549 ::testing::Bool()); | 1605 ::testing::Bool()); |
1550 } // namespace webrtc | 1606 } // namespace webrtc |
OLD | NEW |