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 "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/rtcp_sender.h" | 8 #include "media/cast/rtcp/rtcp_sender.h" |
9 #include "media/cast/rtcp/test_rtcp_packet_builder.h" | 9 #include "media/cast/rtcp/test_rtcp_packet_builder.h" |
10 #include "testing/gmock/include/gmock/gmock.h" | 10 #include "testing/gmock/include/gmock/gmock.h" |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 sender_info.rtp_timestamp = kRtpTimestamp; | 70 sender_info.rtp_timestamp = kRtpTimestamp; |
71 sender_info.send_packet_count = kSendPacketCount; | 71 sender_info.send_packet_count = kSendPacketCount; |
72 sender_info.send_octet_count = kSendOctetCount; | 72 sender_info.send_octet_count = kSendOctetCount; |
73 | 73 |
74 // Sender report + c_name. | 74 // Sender report + c_name. |
75 TestRtcpPacketBuilder p; | 75 TestRtcpPacketBuilder p; |
76 p.AddSr(kSendingSsrc, 0); | 76 p.AddSr(kSendingSsrc, 0); |
77 p.AddSdesCname(kSendingSsrc, kCName); | 77 p.AddSdesCname(kSendingSsrc, kCName); |
78 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); | 78 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); |
79 | 79 |
80 rtcp_sender_->SendRtcp(RtcpSender::kRtcpSr, | 80 rtcp_sender_->SendRtcpFromRtpSender(RtcpSender::kRtcpSr, |
81 &sender_info, | 81 &sender_info, |
82 NULL, | 82 NULL, |
83 0, | 83 NULL); |
84 NULL, | |
85 NULL, | |
86 NULL); | |
87 | 84 |
88 EXPECT_EQ(1, test_transport_.packet_count()); | 85 EXPECT_EQ(1, test_transport_.packet_count()); |
89 } | 86 } |
90 | 87 |
91 TEST_F(RtcpSenderTest, RtcpReceiverReport) { | 88 TEST_F(RtcpSenderTest, RtcpReceiverReport) { |
92 // Empty receiver report + c_name. | 89 // Empty receiver report + c_name. |
93 TestRtcpPacketBuilder p1; | 90 TestRtcpPacketBuilder p1; |
94 p1.AddRr(kSendingSsrc, 0); | 91 p1.AddRr(kSendingSsrc, 0); |
95 p1.AddSdesCname(kSendingSsrc, kCName); | 92 p1.AddSdesCname(kSendingSsrc, kCName); |
96 test_transport_.SetExpectedRtcpPacket(p1.Packet(), p1.Length()); | 93 test_transport_.SetExpectedRtcpPacket(p1.Packet(), p1.Length()); |
97 | 94 |
98 rtcp_sender_->SendRtcp(RtcpSender::kRtcpRr, | 95 rtcp_sender_->SendRtcpFromRtpReceiver(RtcpSender::kRtcpRr, |
99 NULL, | 96 NULL, NULL, NULL, NULL); |
100 NULL, | |
101 0, | |
102 NULL, | |
103 NULL, | |
104 NULL); | |
105 | 97 |
106 EXPECT_EQ(1, test_transport_.packet_count()); | 98 EXPECT_EQ(1, test_transport_.packet_count()); |
107 | 99 |
108 // Receiver report with report block + c_name. | 100 // Receiver report with report block + c_name. |
109 TestRtcpPacketBuilder p2; | 101 TestRtcpPacketBuilder p2; |
110 p2.AddRr(kSendingSsrc, 1); | 102 p2.AddRr(kSendingSsrc, 1); |
111 p2.AddRb(kMediaSsrc); | 103 p2.AddRb(kMediaSsrc); |
112 p2.AddSdesCname(kSendingSsrc, kCName); | 104 p2.AddSdesCname(kSendingSsrc, kCName); |
113 test_transport_.SetExpectedRtcpPacket(p2.Packet(), p2.Length()); | 105 test_transport_.SetExpectedRtcpPacket(p2.Packet(), p2.Length()); |
114 | 106 |
115 RtcpReportBlock report_block; | 107 RtcpReportBlock report_block; |
116 // Initialize remote_ssrc to a "clearly illegal" value. | 108 // Initialize remote_ssrc to a "clearly illegal" value. |
117 report_block.remote_ssrc = 0xDEAD; | 109 report_block.remote_ssrc = 0xDEAD; |
118 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. | 110 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. |
119 report_block.fraction_lost = kLoss >> 24; | 111 report_block.fraction_lost = kLoss >> 24; |
120 report_block.cumulative_lost = kLoss; // 24 bits valid. | 112 report_block.cumulative_lost = kLoss; // 24 bits valid. |
121 report_block.extended_high_sequence_number = | 113 report_block.extended_high_sequence_number = kExtendedMax; |
122 kExtendedMax; | 114 report_block.jitter = kTestJitter; |
123 report_block.jitter = kJitter; | |
124 report_block.last_sr = kLastSr; | 115 report_block.last_sr = kLastSr; |
125 report_block.delay_since_last_sr = kDelayLastSr; | 116 report_block.delay_since_last_sr = kDelayLastSr; |
126 | 117 |
127 rtcp_sender_->SendRtcp(RtcpSender::kRtcpRr, | 118 rtcp_sender_->SendRtcpFromRtpReceiver(RtcpSender::kRtcpRr, &report_block, |
128 NULL, | 119 NULL, NULL, NULL); |
129 &report_block, | |
130 0, | |
131 NULL, | |
132 NULL, | |
133 NULL); | |
134 | 120 |
135 EXPECT_EQ(2, test_transport_.packet_count()); | 121 EXPECT_EQ(2, test_transport_.packet_count()); |
136 } | 122 } |
137 | 123 |
138 TEST_F(RtcpSenderTest, RtcpSenderReportWithDlrr) { | 124 TEST_F(RtcpSenderTest, RtcpSenderReportWithDlrr) { |
139 RtcpSenderInfo sender_info; | 125 RtcpSenderInfo sender_info; |
140 sender_info.ntp_seconds = kNtpHigh; | 126 sender_info.ntp_seconds = kNtpHigh; |
141 sender_info.ntp_fraction = kNtpLow; | 127 sender_info.ntp_fraction = kNtpLow; |
142 sender_info.rtp_timestamp = kRtpTimestamp; | 128 sender_info.rtp_timestamp = kRtpTimestamp; |
143 sender_info.send_packet_count = kSendPacketCount; | 129 sender_info.send_packet_count = kSendPacketCount; |
144 sender_info.send_octet_count = kSendOctetCount; | 130 sender_info.send_octet_count = kSendOctetCount; |
145 | 131 |
146 // Sender report + c_name + dlrr. | 132 // Sender report + c_name + dlrr. |
147 TestRtcpPacketBuilder p1; | 133 TestRtcpPacketBuilder p1; |
148 p1.AddSr(kSendingSsrc, 0); | 134 p1.AddSr(kSendingSsrc, 0); |
149 p1.AddSdesCname(kSendingSsrc, kCName); | 135 p1.AddSdesCname(kSendingSsrc, kCName); |
150 p1.AddXrHeader(kSendingSsrc); | 136 p1.AddXrHeader(kSendingSsrc); |
151 p1.AddXrDlrrBlock(kSendingSsrc); | 137 p1.AddXrDlrrBlock(kSendingSsrc); |
152 test_transport_.SetExpectedRtcpPacket(p1.Packet(), p1.Length()); | 138 test_transport_.SetExpectedRtcpPacket(p1.Packet(), p1.Length()); |
153 | 139 |
154 RtcpDlrrReportBlock dlrr_rb; | 140 RtcpDlrrReportBlock dlrr_rb; |
155 dlrr_rb.last_rr = kLastRr; | 141 dlrr_rb.last_rr = kLastRr; |
156 dlrr_rb.delay_since_last_rr = kDelayLastRr; | 142 dlrr_rb.delay_since_last_rr = kDelayLastRr; |
157 | 143 |
158 rtcp_sender_->SendRtcp(RtcpSender::kRtcpSr | RtcpSender::kRtcpDlrr, | 144 rtcp_sender_->SendRtcpFromRtpSender( |
159 &sender_info, | 145 RtcpSender::kRtcpSr | RtcpSender::kRtcpDlrr, |
160 NULL, | 146 &sender_info, |
161 0, | 147 &dlrr_rb, |
162 &dlrr_rb, | 148 NULL); |
163 NULL, | |
164 NULL); | |
165 | 149 |
166 EXPECT_EQ(1, test_transport_.packet_count()); | 150 EXPECT_EQ(1, test_transport_.packet_count()); |
167 } | 151 } |
168 | 152 |
169 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtr) { | 153 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtr) { |
170 // Receiver report with report block + c_name. | 154 // Receiver report with report block + c_name. |
171 TestRtcpPacketBuilder p; | 155 TestRtcpPacketBuilder p; |
172 p.AddRr(kSendingSsrc, 1); | 156 p.AddRr(kSendingSsrc, 1); |
173 p.AddRb(kMediaSsrc); | 157 p.AddRb(kMediaSsrc); |
174 p.AddSdesCname(kSendingSsrc, kCName); | 158 p.AddSdesCname(kSendingSsrc, kCName); |
175 p.AddXrHeader(kSendingSsrc); | 159 p.AddXrHeader(kSendingSsrc); |
176 p.AddXrRrtrBlock(); | 160 p.AddXrRrtrBlock(); |
177 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); | 161 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); |
178 | 162 |
179 RtcpReportBlock report_block; | 163 RtcpReportBlock report_block; |
180 // Initialize remote_ssrc to a "clearly illegal" value. | 164 // Initialize remote_ssrc to a "clearly illegal" value. |
181 report_block.remote_ssrc = 0xDEAD; | 165 report_block.remote_ssrc = 0xDEAD; |
182 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. | 166 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. |
183 report_block.fraction_lost = kLoss >> 24; | 167 report_block.fraction_lost = kLoss >> 24; |
184 report_block.cumulative_lost = kLoss; // 24 bits valid. | 168 report_block.cumulative_lost = kLoss; // 24 bits valid. |
185 report_block.extended_high_sequence_number = | 169 report_block.extended_high_sequence_number = |
186 kExtendedMax; | 170 kExtendedMax; |
187 report_block.jitter = kJitter; | 171 report_block.jitter = kTestJitter; |
188 report_block.last_sr = kLastSr; | 172 report_block.last_sr = kLastSr; |
189 report_block.delay_since_last_sr = kDelayLastSr; | 173 report_block.delay_since_last_sr = kDelayLastSr; |
190 | 174 |
191 RtcpReceiverReferenceTimeReport rrtr; | 175 RtcpReceiverReferenceTimeReport rrtr; |
192 rrtr.ntp_seconds = kNtpHigh; | 176 rrtr.ntp_seconds = kNtpHigh; |
193 rrtr.ntp_fraction = kNtpLow; | 177 rrtr.ntp_fraction = kNtpLow; |
194 | 178 |
195 rtcp_sender_->SendRtcp(RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr, | 179 rtcp_sender_->SendRtcpFromRtpReceiver( |
196 NULL, | 180 RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr, |
197 &report_block, | 181 &report_block, |
198 0, | 182 &rrtr, |
199 NULL, | 183 NULL, |
200 &rrtr, | 184 NULL); |
201 NULL); | |
202 | 185 |
203 EXPECT_EQ(1, test_transport_.packet_count()); | 186 EXPECT_EQ(1, test_transport_.packet_count()); |
204 } | 187 } |
205 | 188 |
206 TEST_F(RtcpSenderTest, RtcpReceiverReportWithCast) { | 189 TEST_F(RtcpSenderTest, RtcpReceiverReportWithCast) { |
207 // Receiver report with report block + c_name. | 190 // Receiver report with report block + c_name. |
208 TestRtcpPacketBuilder p; | 191 TestRtcpPacketBuilder p; |
209 p.AddRr(kSendingSsrc, 1); | 192 p.AddRr(kSendingSsrc, 1); |
210 p.AddRb(kMediaSsrc); | 193 p.AddRb(kMediaSsrc); |
211 p.AddSdesCname(kSendingSsrc, kCName); | 194 p.AddSdesCname(kSendingSsrc, kCName); |
212 p.AddCast(kSendingSsrc, kMediaSsrc); | 195 p.AddCast(kSendingSsrc, kMediaSsrc); |
213 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); | 196 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); |
214 | 197 |
215 RtcpReportBlock report_block; | 198 RtcpReportBlock report_block; |
216 // Initialize remote_ssrc to a "clearly illegal" value. | 199 // Initialize remote_ssrc to a "clearly illegal" value. |
217 report_block.remote_ssrc = 0xDEAD; | 200 report_block.remote_ssrc = 0xDEAD; |
218 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. | 201 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. |
219 report_block.fraction_lost = kLoss >> 24; | 202 report_block.fraction_lost = kLoss >> 24; |
220 report_block.cumulative_lost = kLoss; // 24 bits valid. | 203 report_block.cumulative_lost = kLoss; // 24 bits valid. |
221 report_block.extended_high_sequence_number = kExtendedMax; | 204 report_block.extended_high_sequence_number = kExtendedMax; |
222 report_block.jitter = kJitter; | 205 report_block.jitter = kTestJitter; |
223 report_block.last_sr = kLastSr; | 206 report_block.last_sr = kLastSr; |
224 report_block.delay_since_last_sr = kDelayLastSr; | 207 report_block.delay_since_last_sr = kDelayLastSr; |
225 | 208 |
226 RtcpCastMessage cast_message(kMediaSsrc); | 209 RtcpCastMessage cast_message(kMediaSsrc); |
227 cast_message.ack_frame_id_ = kAckFrameId; | 210 cast_message.ack_frame_id_ = kAckFrameId; |
228 PacketIdSet missing_packets; | 211 PacketIdSet missing_packets; |
229 cast_message.missing_frames_and_packets_[ | 212 cast_message.missing_frames_and_packets_[ |
230 kLostFrameId] = missing_packets; | 213 kLostFrameId] = missing_packets; |
231 | 214 |
232 missing_packets.insert(kLostPacketId1); | 215 missing_packets.insert(kLostPacketId1); |
233 missing_packets.insert(kLostPacketId2); | 216 missing_packets.insert(kLostPacketId2); |
234 missing_packets.insert(kLostPacketId3); | 217 missing_packets.insert(kLostPacketId3); |
235 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = | 218 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = |
236 missing_packets; | 219 missing_packets; |
237 | 220 |
238 rtcp_sender_->SendRtcp(RtcpSender::kRtcpRr | RtcpSender::kRtcpCast, | 221 rtcp_sender_->SendRtcpFromRtpReceiver( |
239 NULL, | 222 RtcpSender::kRtcpRr | RtcpSender::kRtcpCast, |
240 &report_block, | 223 &report_block, |
241 0, | 224 NULL, |
242 NULL, | 225 &cast_message, |
243 NULL, | 226 NULL); |
244 &cast_message); | |
245 | 227 |
246 EXPECT_EQ(1, test_transport_.packet_count()); | 228 EXPECT_EQ(1, test_transport_.packet_count()); |
247 } | 229 } |
248 | |
249 TEST_F(RtcpSenderTest, RtcpReceiverReportWithIntraFrameRequest) { | |
250 // Receiver report with report block + c_name. | |
251 TestRtcpPacketBuilder p; | |
252 p.AddRr(kSendingSsrc, 1); | |
253 p.AddRb(kMediaSsrc); | |
254 p.AddSdesCname(kSendingSsrc, kCName); | |
255 p.AddPli(kSendingSsrc, kMediaSsrc); | |
256 test_transport_.SetExpectedRtcpPacket(p.Packet(), p.Length()); | |
257 | |
258 RtcpReportBlock report_block; | |
259 // Initialize remote_ssrc to a "clearly illegal" value. | |
260 report_block.remote_ssrc = 0xDEAD; | |
261 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. | |
262 report_block.fraction_lost = kLoss >> 24; | |
263 report_block.cumulative_lost = kLoss; // 24 bits valid. | |
264 report_block.extended_high_sequence_number = | |
265 kExtendedMax; | |
266 report_block.jitter = kJitter; | |
267 report_block.last_sr = kLastSr; | |
268 report_block.delay_since_last_sr = kDelayLastSr; | |
269 | |
270 rtcp_sender_->SendRtcp(RtcpSender::kRtcpRr | RtcpSender::kRtcpPli, | |
271 NULL, | |
272 &report_block, | |
273 kMediaSsrc, | |
274 NULL, | |
275 NULL, | |
276 NULL); | |
277 | |
278 EXPECT_EQ(1, test_transport_.packet_count()); | |
279 } | |
280 | 230 |
281 } // namespace cast | 231 } // namespace cast |
282 } // namespace media | 232 } // namespace media |
OLD | NEW |