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 |