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/test/simple_test_tick_clock.h" | 5 #include "base/test/simple_test_tick_clock.h" |
6 #include "media/cast/cast_defines.h" | 6 #include "media/cast/cast_defines.h" |
7 #include "media/cast/pacing/paced_sender.h" | 7 #include "media/cast/pacing/paced_sender.h" |
8 #include "media/cast/rtcp/mock_rtcp_receiver_feedback.h" | 8 #include "media/cast/rtcp/mock_rtcp_receiver_feedback.h" |
9 #include "media/cast/rtcp/mock_rtcp_sender_feedback.h" | 9 #include "media/cast/rtcp/mock_rtcp_sender_feedback.h" |
10 #include "media/cast/rtcp/rtcp.h" | 10 #include "media/cast/rtcp/rtcp.h" |
11 #include "media/cast/rtcp/test_rtcp_packet_builder.h" | 11 #include "media/cast/rtcp/test_rtcp_packet_builder.h" |
12 #include "testing/gmock/include/gmock/gmock.h" | 12 #include "testing/gmock/include/gmock/gmock.h" |
13 | 13 |
14 namespace media { | 14 namespace media { |
15 namespace cast { | 15 namespace cast { |
16 | 16 |
17 using testing::_; | 17 using testing::_; |
18 | 18 |
19 static const uint32 kSenderSsrc = 0x10203; | 19 static const uint32 kSenderSsrc = 0x10203; |
20 static const uint32 kReceiverSsrc = 0x40506; | 20 static const uint32 kReceiverSsrc = 0x40506; |
21 static const uint32 kUnknownSsrc = 0xDEAD; | |
22 static const std::string kCName("test@10.1.1.1"); | 21 static const std::string kCName("test@10.1.1.1"); |
23 static const uint32 kRtcpIntervalMs = 500; | 22 static const uint32 kRtcpIntervalMs = 500; |
24 static const int64 kStartMillisecond = GG_INT64_C(12345678900000); | 23 static const int64 kStartMillisecond = GG_INT64_C(12345678900000); |
25 static const int64 kAddedDelay = 123; | 24 static const int64 kAddedDelay = 123; |
26 static const int64 kAddedShortDelay= 100; | 25 static const int64 kAddedShortDelay= 100; |
27 | 26 |
28 class LocalRtcpTransport : public PacedPacketSender { | 27 class LocalRtcpTransport : public PacedPacketSender { |
29 public: | 28 public: |
30 explicit LocalRtcpTransport(base::SimpleTestTickClock* testing_clock) | 29 explicit LocalRtcpTransport(base::SimpleTestTickClock* testing_clock) |
31 : drop_packets_(false), | 30 : drop_packets_(false), |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 | 68 |
70 class RtcpPeer : public Rtcp { | 69 class RtcpPeer : public Rtcp { |
71 public: | 70 public: |
72 RtcpPeer(base::TickClock* clock, | 71 RtcpPeer(base::TickClock* clock, |
73 RtcpSenderFeedback* sender_feedback, | 72 RtcpSenderFeedback* sender_feedback, |
74 PacedPacketSender* const paced_packet_sender, | 73 PacedPacketSender* const paced_packet_sender, |
75 RtpSenderStatistics* rtp_sender_statistics, | 74 RtpSenderStatistics* rtp_sender_statistics, |
76 RtpReceiverStatistics* rtp_receiver_statistics, | 75 RtpReceiverStatistics* rtp_receiver_statistics, |
77 RtcpMode rtcp_mode, | 76 RtcpMode rtcp_mode, |
78 const base::TimeDelta& rtcp_interval, | 77 const base::TimeDelta& rtcp_interval, |
79 bool sending_media, | |
80 uint32 local_ssrc, | 78 uint32 local_ssrc, |
| 79 uint32 remote_ssrc, |
81 const std::string& c_name) | 80 const std::string& c_name) |
82 : Rtcp(clock, | 81 : Rtcp(clock, |
83 sender_feedback, | 82 sender_feedback, |
84 paced_packet_sender, | 83 paced_packet_sender, |
85 rtp_sender_statistics, | 84 rtp_sender_statistics, |
86 rtp_receiver_statistics, | 85 rtp_receiver_statistics, |
87 rtcp_mode, | 86 rtcp_mode, |
88 rtcp_interval, | 87 rtcp_interval, |
89 sending_media, | |
90 local_ssrc, | 88 local_ssrc, |
| 89 remote_ssrc, |
91 c_name) { | 90 c_name) { |
92 } | 91 } |
93 | 92 |
94 using Rtcp::CheckForWrapAround; | 93 using Rtcp::CheckForWrapAround; |
95 using Rtcp::OnReceivedLipSyncInfo; | 94 using Rtcp::OnReceivedLipSyncInfo; |
96 }; | 95 }; |
97 | 96 |
98 class RtcpTest : public ::testing::Test { | 97 class RtcpTest : public ::testing::Test { |
99 protected: | 98 protected: |
100 RtcpTest() | 99 RtcpTest() |
(...skipping 16 matching lines...) Expand all Loading... |
117 TEST_F(RtcpTest, TimeToSend) { | 116 TEST_F(RtcpTest, TimeToSend) { |
118 base::TimeTicks start_time; | 117 base::TimeTicks start_time; |
119 start_time += base::TimeDelta::FromMilliseconds(kStartMillisecond); | 118 start_time += base::TimeDelta::FromMilliseconds(kStartMillisecond); |
120 Rtcp rtcp(&testing_clock_, | 119 Rtcp rtcp(&testing_clock_, |
121 &mock_sender_feedback_, | 120 &mock_sender_feedback_, |
122 &transport_, | 121 &transport_, |
123 NULL, | 122 NULL, |
124 NULL, | 123 NULL, |
125 kRtcpCompound, | 124 kRtcpCompound, |
126 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 125 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
127 true, // Media sender. | |
128 kSenderSsrc, | 126 kSenderSsrc, |
| 127 kReceiverSsrc, |
129 kCName); | 128 kCName); |
130 transport_.SetRtcpReceiver(&rtcp); | 129 transport_.SetRtcpReceiver(&rtcp); |
131 EXPECT_LE(start_time, rtcp.TimeToSendNextRtcpReport()); | 130 EXPECT_LE(start_time, rtcp.TimeToSendNextRtcpReport()); |
132 EXPECT_GE(start_time + base::TimeDelta::FromMilliseconds( | 131 EXPECT_GE(start_time + base::TimeDelta::FromMilliseconds( |
133 kRtcpIntervalMs * 3 / 2), | 132 kRtcpIntervalMs * 3 / 2), |
134 rtcp.TimeToSendNextRtcpReport()); | 133 rtcp.TimeToSendNextRtcpReport()); |
135 base::TimeDelta delta = rtcp.TimeToSendNextRtcpReport() - start_time; | 134 base::TimeDelta delta = rtcp.TimeToSendNextRtcpReport() - start_time; |
136 testing_clock_.Advance(delta); | 135 testing_clock_.Advance(delta); |
137 EXPECT_EQ(testing_clock_.NowTicks(), rtcp.TimeToSendNextRtcpReport()); | 136 EXPECT_EQ(testing_clock_.NowTicks(), rtcp.TimeToSendNextRtcpReport()); |
138 } | 137 } |
139 | 138 |
140 TEST_F(RtcpTest, BasicSenderReport) { | 139 TEST_F(RtcpTest, BasicSenderReport) { |
141 Rtcp rtcp(&testing_clock_, | 140 Rtcp rtcp(&testing_clock_, |
142 &mock_sender_feedback_, | 141 &mock_sender_feedback_, |
143 &transport_, | 142 &transport_, |
144 NULL, | 143 NULL, |
145 NULL, | 144 NULL, |
146 kRtcpCompound, | 145 kRtcpCompound, |
147 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 146 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
148 true, // Media sender. | |
149 kSenderSsrc, | 147 kSenderSsrc, |
| 148 kReceiverSsrc, |
150 kCName); | 149 kCName); |
151 transport_.SetRtcpReceiver(&rtcp); | 150 transport_.SetRtcpReceiver(&rtcp); |
152 rtcp.SendRtcpReport(kUnknownSsrc); | 151 rtcp.SendRtcpFromRtpSender(NULL); |
153 } | 152 } |
154 | 153 |
155 TEST_F(RtcpTest, BasicReceiverReport) { | 154 TEST_F(RtcpTest, BasicReceiverReport) { |
156 Rtcp rtcp(&testing_clock_, | 155 Rtcp rtcp(&testing_clock_, |
157 &mock_sender_feedback_, | 156 &mock_sender_feedback_, |
158 &transport_, | 157 &transport_, |
159 NULL, | 158 NULL, |
160 NULL, | 159 NULL, |
161 kRtcpCompound, | 160 kRtcpCompound, |
162 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 161 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
163 false, // Media receiver. | |
164 kSenderSsrc, | 162 kSenderSsrc, |
| 163 kReceiverSsrc, |
165 kCName); | 164 kCName); |
166 transport_.SetRtcpReceiver(&rtcp); | 165 transport_.SetRtcpReceiver(&rtcp); |
167 rtcp.SetRemoteSSRC(kSenderSsrc); | 166 rtcp.SendRtcpFromRtpReceiver(NULL, NULL); |
168 rtcp.SendRtcpReport(kSenderSsrc); | |
169 } | 167 } |
170 | 168 |
171 TEST_F(RtcpTest, BasicCast) { | 169 TEST_F(RtcpTest, BasicCast) { |
172 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(1); | 170 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(1); |
173 | 171 |
174 // Media receiver. | 172 // Media receiver. |
175 Rtcp rtcp(&testing_clock_, | 173 Rtcp rtcp(&testing_clock_, |
176 &mock_sender_feedback_, | 174 &mock_sender_feedback_, |
177 &transport_, | 175 &transport_, |
178 NULL, | 176 NULL, |
179 NULL, | 177 NULL, |
180 kRtcpReducedSize, | 178 kRtcpReducedSize, |
181 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 179 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
182 false, | 180 kSenderSsrc, |
183 kSenderSsrc, | 181 kSenderSsrc, |
184 kCName); | 182 kCName); |
185 transport_.SetRtcpReceiver(&rtcp); | 183 transport_.SetRtcpReceiver(&rtcp); |
186 rtcp.SetRemoteSSRC(kSenderSsrc); | |
187 RtcpCastMessage cast_message(kSenderSsrc); | 184 RtcpCastMessage cast_message(kSenderSsrc); |
188 cast_message.ack_frame_id_ = kAckFrameId; | 185 cast_message.ack_frame_id_ = kAckFrameId; |
189 PacketIdSet missing_packets; | 186 PacketIdSet missing_packets; |
190 cast_message.missing_frames_and_packets_[ | 187 cast_message.missing_frames_and_packets_[ |
191 kLostFrameId] = missing_packets; | 188 kLostFrameId] = missing_packets; |
192 | 189 |
193 missing_packets.insert(kLostPacketId1); | 190 missing_packets.insert(kLostPacketId1); |
194 missing_packets.insert(kLostPacketId2); | 191 missing_packets.insert(kLostPacketId2); |
195 missing_packets.insert(kLostPacketId3); | 192 missing_packets.insert(kLostPacketId3); |
196 cast_message.missing_frames_and_packets_[ | 193 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = |
197 kFrameIdWithLostPackets] = missing_packets; | 194 missing_packets; |
198 rtcp.SendRtcpCast(cast_message); | 195 rtcp.SendRtcpFromRtpReceiver(&cast_message, NULL); |
199 } | 196 } |
200 | 197 |
201 TEST_F(RtcpTest, Rtt) { | 198 TEST_F(RtcpTest, RttReducedSizeRtcp) { |
202 // Media receiver. | 199 // Media receiver. |
203 LocalRtcpTransport receiver_transport(&testing_clock_); | 200 LocalRtcpTransport receiver_transport(&testing_clock_); |
204 Rtcp rtcp_receiver(&testing_clock_, | 201 Rtcp rtcp_receiver(&testing_clock_, |
205 &mock_sender_feedback_, | 202 &mock_sender_feedback_, |
206 &receiver_transport, | 203 &receiver_transport, |
207 NULL, | 204 NULL, |
208 NULL, | 205 NULL, |
209 kRtcpReducedSize, | 206 kRtcpReducedSize, |
210 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 207 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
211 false, | |
212 kReceiverSsrc, | 208 kReceiverSsrc, |
| 209 kSenderSsrc, |
213 kCName); | 210 kCName); |
214 | 211 |
215 // Media sender. | 212 // Media sender. |
216 LocalRtcpTransport sender_transport(&testing_clock_); | 213 LocalRtcpTransport sender_transport(&testing_clock_); |
217 Rtcp rtcp_sender(&testing_clock_, | 214 Rtcp rtcp_sender(&testing_clock_, |
218 &mock_sender_feedback_, | 215 &mock_sender_feedback_, |
219 &sender_transport, | 216 &sender_transport, |
220 NULL, | 217 NULL, |
221 NULL, | 218 NULL, |
222 kRtcpReducedSize, | 219 kRtcpReducedSize, |
223 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 220 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
224 true, | |
225 kSenderSsrc, | 221 kSenderSsrc, |
| 222 kReceiverSsrc, |
226 kCName); | 223 kCName); |
227 | 224 |
228 receiver_transport.SetRtcpReceiver(&rtcp_sender); | 225 receiver_transport.SetRtcpReceiver(&rtcp_sender); |
229 sender_transport.SetRtcpReceiver(&rtcp_receiver); | 226 sender_transport.SetRtcpReceiver(&rtcp_receiver); |
230 | 227 |
231 rtcp_sender.SetRemoteSSRC(kReceiverSsrc); | |
232 rtcp_receiver.SetRemoteSSRC(kSenderSsrc); | |
233 | |
234 base::TimeDelta rtt; | 228 base::TimeDelta rtt; |
235 base::TimeDelta avg_rtt; | 229 base::TimeDelta avg_rtt; |
236 base::TimeDelta min_rtt; | 230 base::TimeDelta min_rtt; |
237 base::TimeDelta max_rtt; | 231 base::TimeDelta max_rtt; |
238 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 232 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
239 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 233 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
240 | 234 |
241 rtcp_sender.SendRtcpReport(kSenderSsrc); | 235 rtcp_sender.SendRtcpFromRtpSender(NULL); |
242 rtcp_receiver.SendRtcpReport(kSenderSsrc); | 236 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); |
243 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 237 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
244 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 238 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
245 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); | 239 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); |
246 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); | 240 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); |
247 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); | 241 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); |
248 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); | 242 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
249 rtcp_sender.SendRtcpReport(kSenderSsrc); | 243 rtcp_sender.SendRtcpFromRtpSender(NULL); |
250 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 244 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
251 | 245 |
252 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); | 246 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); |
253 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); | 247 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); |
254 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); | 248 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); |
255 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); | 249 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
| 250 } |
| 251 |
| 252 TEST_F(RtcpTest, Rtt) { |
| 253 // Media receiver. |
| 254 LocalRtcpTransport receiver_transport(&testing_clock_); |
| 255 Rtcp rtcp_receiver(&testing_clock_, |
| 256 &mock_sender_feedback_, |
| 257 &receiver_transport, |
| 258 NULL, |
| 259 NULL, |
| 260 kRtcpCompound, |
| 261 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 262 kReceiverSsrc, |
| 263 kSenderSsrc, |
| 264 kCName); |
| 265 |
| 266 // Media sender. |
| 267 LocalRtcpTransport sender_transport(&testing_clock_); |
| 268 Rtcp rtcp_sender(&testing_clock_, |
| 269 &mock_sender_feedback_, |
| 270 &sender_transport, |
| 271 NULL, |
| 272 NULL, |
| 273 kRtcpCompound, |
| 274 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 275 kSenderSsrc, |
| 276 kReceiverSsrc, |
| 277 kCName); |
| 278 |
| 279 receiver_transport.SetRtcpReceiver(&rtcp_sender); |
| 280 sender_transport.SetRtcpReceiver(&rtcp_receiver); |
| 281 |
| 282 base::TimeDelta rtt; |
| 283 base::TimeDelta avg_rtt; |
| 284 base::TimeDelta min_rtt; |
| 285 base::TimeDelta max_rtt; |
| 286 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 287 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 288 |
| 289 rtcp_sender.SendRtcpFromRtpSender(NULL); |
| 290 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); |
| 291 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 292 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 293 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); |
| 294 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); |
| 295 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); |
| 296 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
| 297 |
| 298 rtcp_sender.SendRtcpFromRtpSender(NULL); |
| 299 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 300 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); |
| 301 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); |
| 302 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); |
| 303 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
256 | 304 |
257 receiver_transport.SetShortDelay(); | 305 receiver_transport.SetShortDelay(); |
258 sender_transport.SetShortDelay(); | 306 sender_transport.SetShortDelay(); |
259 rtcp_receiver.SendRtcpReport(kSenderSsrc); | 307 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); |
260 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 308 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
261 | |
262 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, rtt.InMilliseconds(), 1); | 309 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, rtt.InMilliseconds(), 1); |
263 EXPECT_NEAR((kAddedShortDelay + 3 * kAddedDelay) / 2, | 310 EXPECT_NEAR((kAddedShortDelay + 3 * kAddedDelay) / 2, |
264 avg_rtt.InMilliseconds(), | 311 avg_rtt.InMilliseconds(), |
265 1); | 312 1); |
266 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, min_rtt.InMilliseconds(), 1); | 313 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, min_rtt.InMilliseconds(), 1); |
267 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); | 314 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
268 rtcp_sender.SendRtcpReport(kSenderSsrc); | 315 |
| 316 rtcp_sender.SendRtcpFromRtpSender(NULL); |
269 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 317 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
270 | |
271 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 1); | 318 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 1); |
272 EXPECT_NEAR((2 * kAddedShortDelay + 2 * kAddedDelay) / 2, | 319 EXPECT_NEAR((2 * kAddedShortDelay + 2 * kAddedDelay) / 2, |
273 avg_rtt.InMilliseconds(), | 320 avg_rtt.InMilliseconds(), |
274 1); | 321 1); |
275 EXPECT_NEAR(2 * kAddedShortDelay, min_rtt.InMilliseconds(), 1); | 322 EXPECT_NEAR(2 * kAddedShortDelay, min_rtt.InMilliseconds(), 1); |
276 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); | 323 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
| 324 |
| 325 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); |
| 326 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 327 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 1); |
| 328 EXPECT_NEAR(2 * kAddedShortDelay, min_rtt.InMilliseconds(), 1); |
| 329 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
| 330 |
| 331 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); |
| 332 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 333 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 1); |
| 334 EXPECT_NEAR(2 * kAddedShortDelay, min_rtt.InMilliseconds(), 1); |
| 335 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
277 } | 336 } |
278 | 337 |
279 TEST_F(RtcpTest, RttWithPacketLoss) { | 338 TEST_F(RtcpTest, RttWithPacketLoss) { |
280 // Media receiver. | 339 // Media receiver. |
281 LocalRtcpTransport receiver_transport(&testing_clock_); | 340 LocalRtcpTransport receiver_transport(&testing_clock_); |
282 Rtcp rtcp_receiver(&testing_clock_, | 341 Rtcp rtcp_receiver(&testing_clock_, |
283 &mock_sender_feedback_, | 342 &mock_sender_feedback_, |
284 &receiver_transport, | 343 &receiver_transport, |
285 NULL, | 344 NULL, |
286 NULL, | 345 NULL, |
287 kRtcpReducedSize, | 346 kRtcpReducedSize, |
288 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 347 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
289 false, | 348 kSenderSsrc, |
290 kReceiverSsrc, | 349 kReceiverSsrc, |
291 kCName); | 350 kCName); |
292 | 351 |
293 // Media sender. | 352 // Media sender. |
294 LocalRtcpTransport sender_transport(&testing_clock_); | 353 LocalRtcpTransport sender_transport(&testing_clock_); |
295 Rtcp rtcp_sender(&testing_clock_, | 354 Rtcp rtcp_sender(&testing_clock_, |
296 &mock_sender_feedback_, | 355 &mock_sender_feedback_, |
297 &sender_transport, | 356 &sender_transport, |
298 NULL, | 357 NULL, |
299 NULL, | 358 NULL, |
300 kRtcpReducedSize, | 359 kRtcpReducedSize, |
301 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 360 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
302 true, | 361 kReceiverSsrc, |
303 kSenderSsrc, | 362 kSenderSsrc, |
304 kCName); | 363 kCName); |
305 | 364 |
306 receiver_transport.SetRtcpReceiver(&rtcp_sender); | 365 receiver_transport.SetRtcpReceiver(&rtcp_sender); |
307 sender_transport.SetRtcpReceiver(&rtcp_receiver); | 366 sender_transport.SetRtcpReceiver(&rtcp_receiver); |
308 | 367 |
309 rtcp_sender.SetRemoteSSRC(kReceiverSsrc); | 368 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); |
310 rtcp_receiver.SetRemoteSSRC(kSenderSsrc); | 369 rtcp_sender.SendRtcpFromRtpSender(NULL); |
311 | |
312 rtcp_receiver.SendRtcpReport(kSenderSsrc); | |
313 rtcp_sender.SendRtcpReport(kSenderSsrc); | |
314 | 370 |
315 base::TimeDelta rtt; | 371 base::TimeDelta rtt; |
316 base::TimeDelta avg_rtt; | 372 base::TimeDelta avg_rtt; |
317 base::TimeDelta min_rtt; | 373 base::TimeDelta min_rtt; |
318 base::TimeDelta max_rtt; | 374 base::TimeDelta max_rtt; |
319 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 375 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
320 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 376 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
321 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); | 377 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); |
322 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); | 378 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); |
323 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); | 379 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); |
324 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); | 380 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
325 | 381 |
326 receiver_transport.SetShortDelay(); | 382 receiver_transport.SetShortDelay(); |
327 sender_transport.SetShortDelay(); | 383 sender_transport.SetShortDelay(); |
328 receiver_transport.SetDropPackets(true); | 384 receiver_transport.SetDropPackets(true); |
329 | 385 |
330 rtcp_receiver.SendRtcpReport(kSenderSsrc); | 386 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); |
331 rtcp_sender.SendRtcpReport(kSenderSsrc); | 387 rtcp_sender.SendRtcpFromRtpSender(NULL); |
332 | 388 |
333 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 389 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
334 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, rtt.InMilliseconds(), 1); | 390 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, rtt.InMilliseconds(), 1); |
335 } | 391 } |
336 | 392 |
337 TEST_F(RtcpTest, NtpAndTime) { | 393 TEST_F(RtcpTest, NtpAndTime) { |
338 const int64 kSecondsbetweenYear1900and2010 = GG_INT64_C(40176 * 24 * 60 * 60); | 394 const int64 kSecondsbetweenYear1900and2010 = GG_INT64_C(40176 * 24 * 60 * 60); |
339 const int64 kSecondsbetweenYear1900and2030 = GG_INT64_C(47481 * 24 * 60 * 60); | 395 const int64 kSecondsbetweenYear1900and2030 = GG_INT64_C(47481 * 24 * 60 * 60); |
340 | 396 |
341 uint32 ntp_seconds_1 = 0; | 397 uint32 ntp_seconds_1 = 0; |
(...skipping 25 matching lines...) Expand all Loading... |
367 } | 423 } |
368 | 424 |
369 TEST_F(RtcpTest, WrapAround) { | 425 TEST_F(RtcpTest, WrapAround) { |
370 RtcpPeer rtcp_peer(&testing_clock_, | 426 RtcpPeer rtcp_peer(&testing_clock_, |
371 &mock_sender_feedback_, | 427 &mock_sender_feedback_, |
372 NULL, | 428 NULL, |
373 NULL, | 429 NULL, |
374 NULL, | 430 NULL, |
375 kRtcpReducedSize, | 431 kRtcpReducedSize, |
376 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 432 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
377 false, | |
378 kReceiverSsrc, | 433 kReceiverSsrc, |
| 434 kSenderSsrc, |
379 kCName); | 435 kCName); |
380 uint32 new_timestamp = 0; | 436 uint32 new_timestamp = 0; |
381 uint32 old_timestamp = 0; | 437 uint32 old_timestamp = 0; |
382 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); | 438 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); |
383 new_timestamp = 1234567890; | 439 new_timestamp = 1234567890; |
384 old_timestamp = 1234567000; | 440 old_timestamp = 1234567000; |
385 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); | 441 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); |
386 new_timestamp = 1234567000; | 442 new_timestamp = 1234567000; |
387 old_timestamp = 1234567890; | 443 old_timestamp = 1234567890; |
388 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); | 444 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); |
389 new_timestamp = 123; | 445 new_timestamp = 123; |
390 old_timestamp = 4234567890u; | 446 old_timestamp = 4234567890u; |
391 EXPECT_EQ(1, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); | 447 EXPECT_EQ(1, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); |
392 new_timestamp = 4234567890u; | 448 new_timestamp = 4234567890u; |
393 old_timestamp = 123; | 449 old_timestamp = 123; |
394 EXPECT_EQ(-1, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); | 450 EXPECT_EQ(-1, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); |
395 } | 451 } |
396 | 452 |
397 TEST_F(RtcpTest, RtpTimestampInSenderTime) { | 453 TEST_F(RtcpTest, RtpTimestampInSenderTime) { |
398 RtcpPeer rtcp_peer(&testing_clock_, | 454 RtcpPeer rtcp_peer(&testing_clock_, |
399 &mock_sender_feedback_, | 455 &mock_sender_feedback_, |
400 NULL, | 456 NULL, |
401 NULL, | 457 NULL, |
402 NULL, | 458 NULL, |
403 kRtcpReducedSize, | 459 kRtcpReducedSize, |
404 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 460 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
405 false, | |
406 kReceiverSsrc, | 461 kReceiverSsrc, |
| 462 kSenderSsrc, |
407 kCName); | 463 kCName); |
408 int frequency = 32000; | 464 int frequency = 32000; |
409 uint32 rtp_timestamp = 64000; | 465 uint32 rtp_timestamp = 64000; |
410 base::TimeTicks rtp_timestamp_in_ticks; | 466 base::TimeTicks rtp_timestamp_in_ticks; |
411 | 467 |
412 // Test fail before we get a OnReceivedLipSyncInfo. | 468 // Test fail before we get a OnReceivedLipSyncInfo. |
413 EXPECT_FALSE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, | 469 EXPECT_FALSE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, |
414 &rtp_timestamp_in_ticks)); | 470 &rtp_timestamp_in_ticks)); |
415 | 471 |
416 uint32 ntp_seconds = 0; | 472 uint32 ntp_seconds = 0; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
452 rtcp_peer.OnReceivedLipSyncInfo(rtp_timestamp, ntp_seconds, ntp_fractions); | 508 rtcp_peer.OnReceivedLipSyncInfo(rtp_timestamp, ntp_seconds, ntp_fractions); |
453 rtp_timestamp = 64000; | 509 rtp_timestamp = 64000; |
454 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, | 510 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, |
455 &rtp_timestamp_in_ticks)); | 511 &rtp_timestamp_in_ticks)); |
456 EXPECT_EQ(input_time + base::TimeDelta::FromMilliseconds(4000), | 512 EXPECT_EQ(input_time + base::TimeDelta::FromMilliseconds(4000), |
457 rtp_timestamp_in_ticks); | 513 rtp_timestamp_in_ticks); |
458 } | 514 } |
459 | 515 |
460 } // namespace cast | 516 } // namespace cast |
461 } // namespace media | 517 } // namespace media |
OLD | NEW |