| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
| 6 #include "base/test/simple_test_tick_clock.h" | 6 #include "base/test/simple_test_tick_clock.h" |
| 7 #include "media/cast/cast_defines.h" | 7 #include "media/cast/cast_defines.h" |
| 8 #include "media/cast/cast_environment.h" | 8 #include "media/cast/cast_environment.h" |
| 9 #include "media/cast/rtcp/receiver_rtcp_event_subscriber.h" | 9 #include "media/cast/net/cast_transport_defines.h" |
| 10 #include "media/cast/rtcp/rtcp_sender.h" | 10 #include "media/cast/net/pacing/paced_sender.h" |
| 11 #include "media/cast/rtcp/rtcp_utility.h" | 11 #include "media/cast/net/rtcp/receiver_rtcp_event_subscriber.h" |
| 12 #include "media/cast/rtcp/test_rtcp_packet_builder.h" | 12 #include "media/cast/net/rtcp/rtcp_sender.h" |
| 13 #include "media/cast/net/rtcp/rtcp_utility.h" |
| 14 #include "media/cast/net/rtcp/test_rtcp_packet_builder.h" |
| 13 #include "media/cast/test/fake_single_thread_task_runner.h" | 15 #include "media/cast/test/fake_single_thread_task_runner.h" |
| 14 #include "media/cast/transport/cast_transport_defines.h" | |
| 15 #include "media/cast/transport/pacing/paced_sender.h" | |
| 16 #include "testing/gmock/include/gmock/gmock.h" | 16 #include "testing/gmock/include/gmock/gmock.h" |
| 17 | 17 |
| 18 namespace media { | 18 namespace media { |
| 19 namespace cast { | 19 namespace cast { |
| 20 | 20 |
| 21 namespace { | 21 namespace { |
| 22 static const uint32 kSendingSsrc = 0x12345678; | 22 static const uint32 kSendingSsrc = 0x12345678; |
| 23 static const uint32 kMediaSsrc = 0x87654321; | 23 static const uint32 kMediaSsrc = 0x87654321; |
| 24 static const base::TimeDelta kDefaultDelay = | 24 static const base::TimeDelta kDefaultDelay = |
| 25 base::TimeDelta::FromMilliseconds(100); | 25 base::TimeDelta::FromMilliseconds(100); |
| 26 static const std::string kCName("test@10.1.1.1"); | 26 static const std::string kCName("test@10.1.1.1"); |
| 27 | 27 |
| 28 transport::RtcpReportBlock GetReportBlock() { | 28 RtcpReportBlock GetReportBlock() { |
| 29 transport::RtcpReportBlock report_block; | 29 RtcpReportBlock report_block; |
| 30 // Initialize remote_ssrc to a "clearly illegal" value. | 30 // Initialize remote_ssrc to a "clearly illegal" value. |
| 31 report_block.remote_ssrc = 0xDEAD; | 31 report_block.remote_ssrc = 0xDEAD; |
| 32 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. | 32 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. |
| 33 report_block.fraction_lost = kLoss >> 24; | 33 report_block.fraction_lost = kLoss >> 24; |
| 34 report_block.cumulative_lost = kLoss; // 24 bits valid. | 34 report_block.cumulative_lost = kLoss; // 24 bits valid. |
| 35 report_block.extended_high_sequence_number = kExtendedMax; | 35 report_block.extended_high_sequence_number = kExtendedMax; |
| 36 report_block.jitter = kTestJitter; | 36 report_block.jitter = kTestJitter; |
| 37 report_block.last_sr = kLastSr; | 37 report_block.last_sr = kLastSr; |
| 38 report_block.delay_since_last_sr = kDelayLastSr; | 38 report_block.delay_since_last_sr = kDelayLastSr; |
| 39 return report_block; | 39 return report_block; |
| 40 } | 40 } |
| 41 | 41 |
| 42 } // namespace | 42 } // namespace |
| 43 | 43 |
| 44 class TestRtcpTransport : public transport::PacedPacketSender { | 44 class TestRtcpTransport : public PacedPacketSender { |
| 45 public: | 45 public: |
| 46 TestRtcpTransport() : packet_count_(0) {} | 46 TestRtcpTransport() : packet_count_(0) {} |
| 47 | 47 |
| 48 virtual bool SendRtcpPacket(uint32 ssrc, | 48 virtual bool SendRtcpPacket(uint32 ssrc, |
| 49 transport::PacketRef packet) OVERRIDE { | 49 PacketRef packet) OVERRIDE { |
| 50 EXPECT_EQ(expected_packet_.size(), packet->data.size()); | 50 EXPECT_EQ(expected_packet_.size(), packet->data.size()); |
| 51 EXPECT_EQ(0, memcmp(expected_packet_.data(), | 51 EXPECT_EQ(0, memcmp(expected_packet_.data(), |
| 52 packet->data.data(), | 52 packet->data.data(), |
| 53 packet->data.size())); | 53 packet->data.size())); |
| 54 packet_count_++; | 54 packet_count_++; |
| 55 return true; | 55 return true; |
| 56 } | 56 } |
| 57 | 57 |
| 58 virtual bool SendPackets( | 58 virtual bool SendPackets( |
| 59 const transport::SendPacketVector& packets) OVERRIDE { | 59 const SendPacketVector& packets) OVERRIDE { |
| 60 return false; | 60 return false; |
| 61 } | 61 } |
| 62 virtual bool ResendPackets( | 62 virtual bool ResendPackets( |
| 63 const transport::SendPacketVector& packets, | 63 const SendPacketVector& packets, |
| 64 base::TimeDelta dedupe_window) OVERRIDE { | 64 base::TimeDelta dedupe_window) OVERRIDE { |
| 65 return false; | 65 return false; |
| 66 } | 66 } |
| 67 | 67 |
| 68 virtual void CancelSendingPacket( | 68 virtual void CancelSendingPacket( |
| 69 const transport::PacketKey& packet_key) OVERRIDE { | 69 const PacketKey& packet_key) OVERRIDE { |
| 70 } | 70 } |
| 71 | 71 |
| 72 void SetExpectedRtcpPacket(scoped_ptr<Packet> packet) { | 72 void SetExpectedRtcpPacket(scoped_ptr<Packet> packet) { |
| 73 expected_packet_.swap(*packet); | 73 expected_packet_.swap(*packet); |
| 74 } | 74 } |
| 75 | 75 |
| 76 int packet_count() const { return packet_count_; } | 76 int packet_count() const { return packet_count_; } |
| 77 | 77 |
| 78 private: | 78 private: |
| 79 Packet expected_packet_; | 79 Packet expected_packet_; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 107 }; | 107 }; |
| 108 | 108 |
| 109 TEST_F(RtcpSenderTest, RtcpReceiverReport) { | 109 TEST_F(RtcpSenderTest, RtcpReceiverReport) { |
| 110 // Empty receiver report + c_name. | 110 // Empty receiver report + c_name. |
| 111 TestRtcpPacketBuilder p1; | 111 TestRtcpPacketBuilder p1; |
| 112 p1.AddRr(kSendingSsrc, 0); | 112 p1.AddRr(kSendingSsrc, 0); |
| 113 p1.AddSdesCname(kSendingSsrc, kCName); | 113 p1.AddSdesCname(kSendingSsrc, kCName); |
| 114 test_transport_.SetExpectedRtcpPacket(p1.GetPacket()); | 114 test_transport_.SetExpectedRtcpPacket(p1.GetPacket()); |
| 115 | 115 |
| 116 rtcp_sender_->SendRtcpFromRtpReceiver( | 116 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 117 transport::kRtcpRr, NULL, NULL, NULL, NULL, kDefaultDelay); | 117 kRtcpRr, NULL, NULL, NULL, NULL, kDefaultDelay); |
| 118 | 118 |
| 119 EXPECT_EQ(1, test_transport_.packet_count()); | 119 EXPECT_EQ(1, test_transport_.packet_count()); |
| 120 | 120 |
| 121 // Receiver report with report block + c_name. | 121 // Receiver report with report block + c_name. |
| 122 TestRtcpPacketBuilder p2; | 122 TestRtcpPacketBuilder p2; |
| 123 p2.AddRr(kSendingSsrc, 1); | 123 p2.AddRr(kSendingSsrc, 1); |
| 124 p2.AddRb(kMediaSsrc); | 124 p2.AddRb(kMediaSsrc); |
| 125 p2.AddSdesCname(kSendingSsrc, kCName); | 125 p2.AddSdesCname(kSendingSsrc, kCName); |
| 126 test_transport_.SetExpectedRtcpPacket(p2.GetPacket().Pass()); | 126 test_transport_.SetExpectedRtcpPacket(p2.GetPacket().Pass()); |
| 127 | 127 |
| 128 transport::RtcpReportBlock report_block = GetReportBlock(); | 128 RtcpReportBlock report_block = GetReportBlock(); |
| 129 | 129 |
| 130 rtcp_sender_->SendRtcpFromRtpReceiver( | 130 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 131 transport::kRtcpRr, &report_block, NULL, NULL, NULL, kDefaultDelay); | 131 kRtcpRr, &report_block, NULL, NULL, NULL, kDefaultDelay); |
| 132 | 132 |
| 133 EXPECT_EQ(2, test_transport_.packet_count()); | 133 EXPECT_EQ(2, test_transport_.packet_count()); |
| 134 } | 134 } |
| 135 | 135 |
| 136 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtr) { | 136 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtr) { |
| 137 // Receiver report with report block + c_name. | 137 // Receiver report with report block + c_name. |
| 138 TestRtcpPacketBuilder p; | 138 TestRtcpPacketBuilder p; |
| 139 p.AddRr(kSendingSsrc, 1); | 139 p.AddRr(kSendingSsrc, 1); |
| 140 p.AddRb(kMediaSsrc); | 140 p.AddRb(kMediaSsrc); |
| 141 p.AddSdesCname(kSendingSsrc, kCName); | 141 p.AddSdesCname(kSendingSsrc, kCName); |
| 142 p.AddXrHeader(kSendingSsrc); | 142 p.AddXrHeader(kSendingSsrc); |
| 143 p.AddXrRrtrBlock(); | 143 p.AddXrRrtrBlock(); |
| 144 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); | 144 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); |
| 145 | 145 |
| 146 transport::RtcpReportBlock report_block = GetReportBlock(); | 146 RtcpReportBlock report_block = GetReportBlock(); |
| 147 | 147 |
| 148 RtcpReceiverReferenceTimeReport rrtr; | 148 RtcpReceiverReferenceTimeReport rrtr; |
| 149 rrtr.ntp_seconds = kNtpHigh; | 149 rrtr.ntp_seconds = kNtpHigh; |
| 150 rrtr.ntp_fraction = kNtpLow; | 150 rrtr.ntp_fraction = kNtpLow; |
| 151 | 151 |
| 152 rtcp_sender_->SendRtcpFromRtpReceiver( | 152 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 153 transport::kRtcpRr | transport::kRtcpRrtr, | 153 kRtcpRr | kRtcpRrtr, |
| 154 &report_block, | 154 &report_block, |
| 155 &rrtr, | 155 &rrtr, |
| 156 NULL, | 156 NULL, |
| 157 NULL, | 157 NULL, |
| 158 kDefaultDelay); | 158 kDefaultDelay); |
| 159 | 159 |
| 160 EXPECT_EQ(1, test_transport_.packet_count()); | 160 EXPECT_EQ(1, test_transport_.packet_count()); |
| 161 } | 161 } |
| 162 | 162 |
| 163 TEST_F(RtcpSenderTest, RtcpReceiverReportWithCast) { | 163 TEST_F(RtcpSenderTest, RtcpReceiverReportWithCast) { |
| 164 // Receiver report with report block + c_name. | 164 // Receiver report with report block + c_name. |
| 165 TestRtcpPacketBuilder p; | 165 TestRtcpPacketBuilder p; |
| 166 p.AddRr(kSendingSsrc, 1); | 166 p.AddRr(kSendingSsrc, 1); |
| 167 p.AddRb(kMediaSsrc); | 167 p.AddRb(kMediaSsrc); |
| 168 p.AddSdesCname(kSendingSsrc, kCName); | 168 p.AddSdesCname(kSendingSsrc, kCName); |
| 169 p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay); | 169 p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay); |
| 170 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); | 170 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); |
| 171 | 171 |
| 172 transport::RtcpReportBlock report_block = GetReportBlock(); | 172 RtcpReportBlock report_block = GetReportBlock(); |
| 173 | 173 |
| 174 RtcpCastMessage cast_message(kMediaSsrc); | 174 RtcpCastMessage cast_message(kMediaSsrc); |
| 175 cast_message.ack_frame_id_ = kAckFrameId; | 175 cast_message.ack_frame_id_ = kAckFrameId; |
| 176 PacketIdSet missing_packets; | 176 PacketIdSet missing_packets; |
| 177 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; | 177 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; |
| 178 | 178 |
| 179 missing_packets.insert(kLostPacketId1); | 179 missing_packets.insert(kLostPacketId1); |
| 180 missing_packets.insert(kLostPacketId2); | 180 missing_packets.insert(kLostPacketId2); |
| 181 missing_packets.insert(kLostPacketId3); | 181 missing_packets.insert(kLostPacketId3); |
| 182 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = | 182 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = |
| 183 missing_packets; | 183 missing_packets; |
| 184 | 184 |
| 185 rtcp_sender_->SendRtcpFromRtpReceiver( | 185 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 186 transport::kRtcpRr | transport::kRtcpCast, | 186 kRtcpRr | kRtcpCast, |
| 187 &report_block, | 187 &report_block, |
| 188 NULL, | 188 NULL, |
| 189 &cast_message, | 189 &cast_message, |
| 190 NULL, | 190 NULL, |
| 191 kDefaultDelay); | 191 kDefaultDelay); |
| 192 | 192 |
| 193 EXPECT_EQ(1, test_transport_.packet_count()); | 193 EXPECT_EQ(1, test_transport_.packet_count()); |
| 194 } | 194 } |
| 195 | 195 |
| 196 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtraAndCastMessage) { | 196 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtraAndCastMessage) { |
| 197 TestRtcpPacketBuilder p; | 197 TestRtcpPacketBuilder p; |
| 198 p.AddRr(kSendingSsrc, 1); | 198 p.AddRr(kSendingSsrc, 1); |
| 199 p.AddRb(kMediaSsrc); | 199 p.AddRb(kMediaSsrc); |
| 200 p.AddSdesCname(kSendingSsrc, kCName); | 200 p.AddSdesCname(kSendingSsrc, kCName); |
| 201 p.AddXrHeader(kSendingSsrc); | 201 p.AddXrHeader(kSendingSsrc); |
| 202 p.AddXrRrtrBlock(); | 202 p.AddXrRrtrBlock(); |
| 203 p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay); | 203 p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay); |
| 204 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); | 204 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); |
| 205 | 205 |
| 206 transport::RtcpReportBlock report_block = GetReportBlock(); | 206 RtcpReportBlock report_block = GetReportBlock(); |
| 207 | 207 |
| 208 RtcpReceiverReferenceTimeReport rrtr; | 208 RtcpReceiverReferenceTimeReport rrtr; |
| 209 rrtr.ntp_seconds = kNtpHigh; | 209 rrtr.ntp_seconds = kNtpHigh; |
| 210 rrtr.ntp_fraction = kNtpLow; | 210 rrtr.ntp_fraction = kNtpLow; |
| 211 | 211 |
| 212 RtcpCastMessage cast_message(kMediaSsrc); | 212 RtcpCastMessage cast_message(kMediaSsrc); |
| 213 cast_message.ack_frame_id_ = kAckFrameId; | 213 cast_message.ack_frame_id_ = kAckFrameId; |
| 214 PacketIdSet missing_packets; | 214 PacketIdSet missing_packets; |
| 215 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; | 215 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; |
| 216 | 216 |
| 217 missing_packets.insert(kLostPacketId1); | 217 missing_packets.insert(kLostPacketId1); |
| 218 missing_packets.insert(kLostPacketId2); | 218 missing_packets.insert(kLostPacketId2); |
| 219 missing_packets.insert(kLostPacketId3); | 219 missing_packets.insert(kLostPacketId3); |
| 220 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = | 220 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = |
| 221 missing_packets; | 221 missing_packets; |
| 222 | 222 |
| 223 rtcp_sender_->SendRtcpFromRtpReceiver( | 223 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 224 transport::kRtcpRr | transport::kRtcpRrtr | transport::kRtcpCast, | 224 kRtcpRr | kRtcpRrtr | kRtcpCast, |
| 225 &report_block, | 225 &report_block, |
| 226 &rrtr, | 226 &rrtr, |
| 227 &cast_message, | 227 &cast_message, |
| 228 NULL, | 228 NULL, |
| 229 kDefaultDelay); | 229 kDefaultDelay); |
| 230 | 230 |
| 231 EXPECT_EQ(1, test_transport_.packet_count()); | 231 EXPECT_EQ(1, test_transport_.packet_count()); |
| 232 } | 232 } |
| 233 | 233 |
| 234 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtrCastMessageAndLog) { | 234 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtrCastMessageAndLog) { |
| 235 static const uint32 kTimeBaseMs = 12345678; | 235 static const uint32 kTimeBaseMs = 12345678; |
| 236 static const uint32 kTimeDelayMs = 10; | 236 static const uint32 kTimeDelayMs = 10; |
| 237 | 237 |
| 238 TestRtcpPacketBuilder p; | 238 TestRtcpPacketBuilder p; |
| 239 p.AddRr(kSendingSsrc, 1); | 239 p.AddRr(kSendingSsrc, 1); |
| 240 p.AddRb(kMediaSsrc); | 240 p.AddRb(kMediaSsrc); |
| 241 p.AddSdesCname(kSendingSsrc, kCName); | 241 p.AddSdesCname(kSendingSsrc, kCName); |
| 242 p.AddXrHeader(kSendingSsrc); | 242 p.AddXrHeader(kSendingSsrc); |
| 243 p.AddXrRrtrBlock(); | 243 p.AddXrRrtrBlock(); |
| 244 p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay); | 244 p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay); |
| 245 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); | 245 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); |
| 246 | 246 |
| 247 transport::RtcpReportBlock report_block = GetReportBlock(); | 247 RtcpReportBlock report_block = GetReportBlock(); |
| 248 | 248 |
| 249 RtcpReceiverReferenceTimeReport rrtr; | 249 RtcpReceiverReferenceTimeReport rrtr; |
| 250 rrtr.ntp_seconds = kNtpHigh; | 250 rrtr.ntp_seconds = kNtpHigh; |
| 251 rrtr.ntp_fraction = kNtpLow; | 251 rrtr.ntp_fraction = kNtpLow; |
| 252 | 252 |
| 253 RtcpCastMessage cast_message(kMediaSsrc); | 253 RtcpCastMessage cast_message(kMediaSsrc); |
| 254 cast_message.ack_frame_id_ = kAckFrameId; | 254 cast_message.ack_frame_id_ = kAckFrameId; |
| 255 PacketIdSet missing_packets; | 255 PacketIdSet missing_packets; |
| 256 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; | 256 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; |
| 257 | 257 |
| 258 missing_packets.insert(kLostPacketId1); | 258 missing_packets.insert(kLostPacketId1); |
| 259 missing_packets.insert(kLostPacketId2); | 259 missing_packets.insert(kLostPacketId2); |
| 260 missing_packets.insert(kLostPacketId3); | 260 missing_packets.insert(kLostPacketId3); |
| 261 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = | 261 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = |
| 262 missing_packets; | 262 missing_packets; |
| 263 | 263 |
| 264 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); | 264 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); |
| 265 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; | 265 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; |
| 266 | 266 |
| 267 rtcp_sender_->SendRtcpFromRtpReceiver( | 267 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 268 transport::kRtcpRr | transport::kRtcpRrtr | transport::kRtcpCast | | 268 kRtcpRr | kRtcpRrtr | kRtcpCast | |
| 269 transport::kRtcpReceiverLog, | 269 kRtcpReceiverLog, |
| 270 &report_block, | 270 &report_block, |
| 271 &rrtr, | 271 &rrtr, |
| 272 &cast_message, | 272 &cast_message, |
| 273 &rtcp_events, | 273 &rtcp_events, |
| 274 kDefaultDelay); | 274 kDefaultDelay); |
| 275 | 275 |
| 276 base::SimpleTestTickClock testing_clock; | 276 base::SimpleTestTickClock testing_clock; |
| 277 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); | 277 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); |
| 278 | 278 |
| 279 p.AddReceiverLog(kSendingSsrc); | 279 p.AddReceiverLog(kSendingSsrc); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 295 packet_event.rtp_timestamp = kRtpTimestamp; | 295 packet_event.rtp_timestamp = kRtpTimestamp; |
| 296 packet_event.type = PACKET_RECEIVED; | 296 packet_event.type = PACKET_RECEIVED; |
| 297 packet_event.media_type = VIDEO_EVENT; | 297 packet_event.media_type = VIDEO_EVENT; |
| 298 packet_event.timestamp = testing_clock.NowTicks(); | 298 packet_event.timestamp = testing_clock.NowTicks(); |
| 299 packet_event.packet_id = kLostPacketId1; | 299 packet_event.packet_id = kLostPacketId1; |
| 300 event_subscriber.OnReceivePacketEvent(packet_event); | 300 event_subscriber.OnReceivePacketEvent(packet_event); |
| 301 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); | 301 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); |
| 302 EXPECT_EQ(2u, rtcp_events.size()); | 302 EXPECT_EQ(2u, rtcp_events.size()); |
| 303 | 303 |
| 304 rtcp_sender_->SendRtcpFromRtpReceiver( | 304 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 305 transport::kRtcpRr | transport::kRtcpRrtr | transport::kRtcpCast | | 305 kRtcpRr | kRtcpRrtr | kRtcpCast | |
| 306 transport::kRtcpReceiverLog, | 306 kRtcpReceiverLog, |
| 307 &report_block, | 307 &report_block, |
| 308 &rrtr, | 308 &rrtr, |
| 309 &cast_message, | 309 &cast_message, |
| 310 &rtcp_events, | 310 &rtcp_events, |
| 311 kDefaultDelay); | 311 kDefaultDelay); |
| 312 | 312 |
| 313 EXPECT_EQ(2, test_transport_.packet_count()); | 313 EXPECT_EQ(2, test_transport_.packet_count()); |
| 314 } | 314 } |
| 315 | 315 |
| 316 TEST_F(RtcpSenderTest, RtcpReceiverReportWithOversizedFrameLog) { | 316 TEST_F(RtcpSenderTest, RtcpReceiverReportWithOversizedFrameLog) { |
| 317 static const uint32 kTimeBaseMs = 12345678; | 317 static const uint32 kTimeBaseMs = 12345678; |
| 318 static const uint32 kTimeDelayMs = 10; | 318 static const uint32 kTimeDelayMs = 10; |
| 319 | 319 |
| 320 TestRtcpPacketBuilder p; | 320 TestRtcpPacketBuilder p; |
| 321 p.AddRr(kSendingSsrc, 1); | 321 p.AddRr(kSendingSsrc, 1); |
| 322 p.AddRb(kMediaSsrc); | 322 p.AddRb(kMediaSsrc); |
| 323 p.AddSdesCname(kSendingSsrc, kCName); | 323 p.AddSdesCname(kSendingSsrc, kCName); |
| 324 | 324 |
| 325 transport::RtcpReportBlock report_block = GetReportBlock(); | 325 RtcpReportBlock report_block = GetReportBlock(); |
| 326 | 326 |
| 327 base::SimpleTestTickClock testing_clock; | 327 base::SimpleTestTickClock testing_clock; |
| 328 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); | 328 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); |
| 329 | 329 |
| 330 p.AddReceiverLog(kSendingSsrc); | 330 p.AddReceiverLog(kSendingSsrc); |
| 331 | 331 |
| 332 int remaining_bytes = kMaxReceiverLogBytes; | 332 int remaining_bytes = kMaxReceiverLogBytes; |
| 333 remaining_bytes -= kRtcpCastLogHeaderSize; | 333 remaining_bytes -= kRtcpCastLogHeaderSize; |
| 334 | 334 |
| 335 remaining_bytes -= kRtcpReceiverFrameLogSize; | 335 remaining_bytes -= kRtcpReceiverFrameLogSize; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 364 packet_event.timestamp = testing_clock.NowTicks(); | 364 packet_event.timestamp = testing_clock.NowTicks(); |
| 365 packet_event.packet_id = kLostPacketId1; | 365 packet_event.packet_id = kLostPacketId1; |
| 366 event_subscriber.OnReceivePacketEvent(packet_event); | 366 event_subscriber.OnReceivePacketEvent(packet_event); |
| 367 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); | 367 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); |
| 368 } | 368 } |
| 369 | 369 |
| 370 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; | 370 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; |
| 371 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); | 371 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); |
| 372 | 372 |
| 373 rtcp_sender_->SendRtcpFromRtpReceiver( | 373 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 374 transport::kRtcpRr | transport::kRtcpReceiverLog, | 374 kRtcpRr | kRtcpReceiverLog, |
| 375 &report_block, | 375 &report_block, |
| 376 NULL, | 376 NULL, |
| 377 NULL, | 377 NULL, |
| 378 &rtcp_events, | 378 &rtcp_events, |
| 379 kDefaultDelay); | 379 kDefaultDelay); |
| 380 | 380 |
| 381 EXPECT_EQ(1, test_transport_.packet_count()); | 381 EXPECT_EQ(1, test_transport_.packet_count()); |
| 382 } | 382 } |
| 383 | 383 |
| 384 TEST_F(RtcpSenderTest, RtcpReceiverReportWithTooManyLogFrames) { | 384 TEST_F(RtcpSenderTest, RtcpReceiverReportWithTooManyLogFrames) { |
| 385 static const uint32 kTimeBaseMs = 12345678; | 385 static const uint32 kTimeBaseMs = 12345678; |
| 386 static const uint32 kTimeDelayMs = 10; | 386 static const uint32 kTimeDelayMs = 10; |
| 387 | 387 |
| 388 TestRtcpPacketBuilder p; | 388 TestRtcpPacketBuilder p; |
| 389 p.AddRr(kSendingSsrc, 1); | 389 p.AddRr(kSendingSsrc, 1); |
| 390 p.AddRb(kMediaSsrc); | 390 p.AddRb(kMediaSsrc); |
| 391 p.AddSdesCname(kSendingSsrc, kCName); | 391 p.AddSdesCname(kSendingSsrc, kCName); |
| 392 | 392 |
| 393 transport::RtcpReportBlock report_block = GetReportBlock(); | 393 RtcpReportBlock report_block = GetReportBlock(); |
| 394 | 394 |
| 395 base::SimpleTestTickClock testing_clock; | 395 base::SimpleTestTickClock testing_clock; |
| 396 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); | 396 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); |
| 397 | 397 |
| 398 p.AddReceiverLog(kSendingSsrc); | 398 p.AddReceiverLog(kSendingSsrc); |
| 399 | 399 |
| 400 int remaining_bytes = kMaxReceiverLogBytes; | 400 int remaining_bytes = kMaxReceiverLogBytes; |
| 401 remaining_bytes -= kRtcpCastLogHeaderSize; | 401 remaining_bytes -= kRtcpCastLogHeaderSize; |
| 402 | 402 |
| 403 int num_events = | 403 int num_events = |
| (...skipping 17 matching lines...) Expand all Loading... |
| 421 frame_event.media_type = VIDEO_EVENT; | 421 frame_event.media_type = VIDEO_EVENT; |
| 422 frame_event.timestamp = testing_clock.NowTicks(); | 422 frame_event.timestamp = testing_clock.NowTicks(); |
| 423 event_subscriber.OnReceiveFrameEvent(frame_event); | 423 event_subscriber.OnReceiveFrameEvent(frame_event); |
| 424 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); | 424 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); |
| 425 } | 425 } |
| 426 | 426 |
| 427 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; | 427 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; |
| 428 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); | 428 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); |
| 429 | 429 |
| 430 rtcp_sender_->SendRtcpFromRtpReceiver( | 430 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 431 transport::kRtcpRr | transport::kRtcpReceiverLog, | 431 kRtcpRr | kRtcpReceiverLog, |
| 432 &report_block, | 432 &report_block, |
| 433 NULL, | 433 NULL, |
| 434 NULL, | 434 NULL, |
| 435 &rtcp_events, | 435 &rtcp_events, |
| 436 kDefaultDelay); | 436 kDefaultDelay); |
| 437 | 437 |
| 438 EXPECT_EQ(1, test_transport_.packet_count()); | 438 EXPECT_EQ(1, test_transport_.packet_count()); |
| 439 } | 439 } |
| 440 | 440 |
| 441 TEST_F(RtcpSenderTest, RtcpReceiverReportWithOldLogFrames) { | 441 TEST_F(RtcpSenderTest, RtcpReceiverReportWithOldLogFrames) { |
| 442 static const uint32 kTimeBaseMs = 12345678; | 442 static const uint32 kTimeBaseMs = 12345678; |
| 443 | 443 |
| 444 TestRtcpPacketBuilder p; | 444 TestRtcpPacketBuilder p; |
| 445 p.AddRr(kSendingSsrc, 1); | 445 p.AddRr(kSendingSsrc, 1); |
| 446 p.AddRb(kMediaSsrc); | 446 p.AddRb(kMediaSsrc); |
| 447 p.AddSdesCname(kSendingSsrc, kCName); | 447 p.AddSdesCname(kSendingSsrc, kCName); |
| 448 | 448 |
| 449 transport::RtcpReportBlock report_block = GetReportBlock(); | 449 RtcpReportBlock report_block = GetReportBlock(); |
| 450 | 450 |
| 451 base::SimpleTestTickClock testing_clock; | 451 base::SimpleTestTickClock testing_clock; |
| 452 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); | 452 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); |
| 453 | 453 |
| 454 p.AddReceiverLog(kSendingSsrc); | 454 p.AddReceiverLog(kSendingSsrc); |
| 455 | 455 |
| 456 // Log 11 events for a single frame, each |kTimeBetweenEventsMs| apart. | 456 // Log 11 events for a single frame, each |kTimeBetweenEventsMs| apart. |
| 457 // Only last 10 events will be sent because the first event is more than | 457 // Only last 10 events will be sent because the first event is more than |
| 458 // 4095 milliseconds away from latest event. | 458 // 4095 milliseconds away from latest event. |
| 459 const int kTimeBetweenEventsMs = 410; | 459 const int kTimeBetweenEventsMs = 410; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 472 frame_event.timestamp = testing_clock.NowTicks(); | 472 frame_event.timestamp = testing_clock.NowTicks(); |
| 473 event_subscriber.OnReceiveFrameEvent(frame_event); | 473 event_subscriber.OnReceiveFrameEvent(frame_event); |
| 474 testing_clock.Advance( | 474 testing_clock.Advance( |
| 475 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); | 475 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); |
| 476 } | 476 } |
| 477 | 477 |
| 478 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; | 478 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; |
| 479 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); | 479 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); |
| 480 | 480 |
| 481 rtcp_sender_->SendRtcpFromRtpReceiver( | 481 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 482 transport::kRtcpRr | transport::kRtcpReceiverLog, | 482 kRtcpRr | kRtcpReceiverLog, |
| 483 &report_block, | 483 &report_block, |
| 484 NULL, | 484 NULL, |
| 485 NULL, | 485 NULL, |
| 486 &rtcp_events, | 486 &rtcp_events, |
| 487 kDefaultDelay); | 487 kDefaultDelay); |
| 488 | 488 |
| 489 EXPECT_EQ(1, test_transport_.packet_count()); | 489 EXPECT_EQ(1, test_transport_.packet_count()); |
| 490 } | 490 } |
| 491 | 491 |
| 492 TEST_F(RtcpSenderTest, RtcpReceiverReportRedundancy) { | 492 TEST_F(RtcpSenderTest, RtcpReceiverReportRedundancy) { |
| 493 uint32 time_base_ms = 12345678; | 493 uint32 time_base_ms = 12345678; |
| 494 int kTimeBetweenEventsMs = 10; | 494 int kTimeBetweenEventsMs = 10; |
| 495 | 495 |
| 496 transport::RtcpReportBlock report_block = GetReportBlock(); | 496 RtcpReportBlock report_block = GetReportBlock(); |
| 497 | 497 |
| 498 base::SimpleTestTickClock testing_clock; | 498 base::SimpleTestTickClock testing_clock; |
| 499 testing_clock.Advance(base::TimeDelta::FromMilliseconds(time_base_ms)); | 499 testing_clock.Advance(base::TimeDelta::FromMilliseconds(time_base_ms)); |
| 500 | 500 |
| 501 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); | 501 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); |
| 502 size_t packet_count = kReceiveLogMessageHistorySize + 10; | 502 size_t packet_count = kReceiveLogMessageHistorySize + 10; |
| 503 for (size_t i = 0; i < packet_count; i++) { | 503 for (size_t i = 0; i < packet_count; i++) { |
| 504 TestRtcpPacketBuilder p; | 504 TestRtcpPacketBuilder p; |
| 505 p.AddRr(kSendingSsrc, 1); | 505 p.AddRr(kSendingSsrc, 1); |
| 506 p.AddRb(kMediaSsrc); | 506 p.AddRb(kMediaSsrc); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 531 frame_event.rtp_timestamp = kRtpTimestamp; | 531 frame_event.rtp_timestamp = kRtpTimestamp; |
| 532 frame_event.type = FRAME_ACK_SENT; | 532 frame_event.type = FRAME_ACK_SENT; |
| 533 frame_event.media_type = VIDEO_EVENT; | 533 frame_event.media_type = VIDEO_EVENT; |
| 534 frame_event.timestamp = testing_clock.NowTicks(); | 534 frame_event.timestamp = testing_clock.NowTicks(); |
| 535 event_subscriber.OnReceiveFrameEvent(frame_event); | 535 event_subscriber.OnReceiveFrameEvent(frame_event); |
| 536 | 536 |
| 537 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; | 537 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; |
| 538 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); | 538 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); |
| 539 | 539 |
| 540 rtcp_sender_->SendRtcpFromRtpReceiver( | 540 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 541 transport::kRtcpRr | transport::kRtcpReceiverLog, | 541 kRtcpRr | kRtcpReceiverLog, |
| 542 &report_block, | 542 &report_block, |
| 543 NULL, | 543 NULL, |
| 544 NULL, | 544 NULL, |
| 545 &rtcp_events, | 545 &rtcp_events, |
| 546 kDefaultDelay); | 546 kDefaultDelay); |
| 547 | 547 |
| 548 testing_clock.Advance( | 548 testing_clock.Advance( |
| 549 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); | 549 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); |
| 550 time_base_ms += kTimeBetweenEventsMs; | 550 time_base_ms += kTimeBetweenEventsMs; |
| 551 } | 551 } |
| 552 | 552 |
| 553 EXPECT_EQ(static_cast<int>(packet_count), test_transport_.packet_count()); | 553 EXPECT_EQ(static_cast<int>(packet_count), test_transport_.packet_count()); |
| 554 } | 554 } |
| 555 | 555 |
| 556 } // namespace cast | 556 } // namespace cast |
| 557 } // namespace media | 557 } // namespace media |
| OLD | NEW |