OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 19 matching lines...) Expand all Loading... |
30 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sdes.h" | 30 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sdes.h" |
31 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sender_report.h" | 31 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sender_report.h" |
32 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sli.h" | 32 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sli.h" |
33 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbn.h" | 33 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbn.h" |
34 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr.h" | 34 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr.h" |
35 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h" | 35 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h" |
36 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" | 36 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" |
37 | 37 |
38 namespace { | 38 namespace { |
39 | 39 |
| 40 DEFINE_bool(noconfig, true, "Excludes stream configurations."); |
40 DEFINE_bool(noincoming, false, "Excludes incoming packets."); | 41 DEFINE_bool(noincoming, false, "Excludes incoming packets."); |
41 DEFINE_bool(nooutgoing, false, "Excludes outgoing packets."); | 42 DEFINE_bool(nooutgoing, false, "Excludes outgoing packets."); |
42 // TODO(terelius): Note that the media type doesn't work with outgoing packets. | 43 // TODO(terelius): Note that the media type doesn't work with outgoing packets. |
43 DEFINE_bool(noaudio, false, "Excludes audio packets."); | 44 DEFINE_bool(noaudio, false, "Excludes audio packets."); |
44 // TODO(terelius): Note that the media type doesn't work with outgoing packets. | 45 // TODO(terelius): Note that the media type doesn't work with outgoing packets. |
45 DEFINE_bool(novideo, false, "Excludes video packets."); | 46 DEFINE_bool(novideo, false, "Excludes video packets."); |
46 // TODO(terelius): Note that the media type doesn't work with outgoing packets. | 47 // TODO(terelius): Note that the media type doesn't work with outgoing packets. |
47 DEFINE_bool(nodata, false, "Excludes data packets."); | 48 DEFINE_bool(nodata, false, "Excludes data packets."); |
48 DEFINE_bool(nortp, false, "Excludes RTP packets."); | 49 DEFINE_bool(nortp, false, "Excludes RTP packets."); |
49 DEFINE_bool(nortcp, false, "Excludes RTCP packets."); | 50 DEFINE_bool(nortcp, false, "Excludes RTCP packets."); |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 uint64_t log_timestamp, | 122 uint64_t log_timestamp, |
122 webrtc::PacketDirection direction, | 123 webrtc::PacketDirection direction, |
123 webrtc::MediaType media_type) { | 124 webrtc::MediaType media_type) { |
124 webrtc::rtcp::SenderReport sr; | 125 webrtc::rtcp::SenderReport sr; |
125 if (!sr.Parse(rtcp_block)) | 126 if (!sr.Parse(rtcp_block)) |
126 return; | 127 return; |
127 if (ExcludePacket(direction, media_type, sr.sender_ssrc())) | 128 if (ExcludePacket(direction, media_type, sr.sender_ssrc())) |
128 return; | 129 return; |
129 std::cout << log_timestamp << "\t" | 130 std::cout << log_timestamp << "\t" |
130 << "RTCP_SR" << StreamInfo(direction, media_type) | 131 << "RTCP_SR" << StreamInfo(direction, media_type) |
131 << "\tSSRC=" << sr.sender_ssrc() | 132 << "\tssrc=" << sr.sender_ssrc() |
132 << "\ttimestamp=" << sr.rtp_timestamp() << std::endl; | 133 << "\ttimestamp=" << sr.rtp_timestamp() << std::endl; |
133 } | 134 } |
134 | 135 |
135 void PrintReceiverReport(const webrtc::rtcp::CommonHeader& rtcp_block, | 136 void PrintReceiverReport(const webrtc::rtcp::CommonHeader& rtcp_block, |
136 uint64_t log_timestamp, | 137 uint64_t log_timestamp, |
137 webrtc::PacketDirection direction, | 138 webrtc::PacketDirection direction, |
138 webrtc::MediaType media_type) { | 139 webrtc::MediaType media_type) { |
139 webrtc::rtcp::ReceiverReport rr; | 140 webrtc::rtcp::ReceiverReport rr; |
140 if (!rr.Parse(rtcp_block)) | 141 if (!rr.Parse(rtcp_block)) |
141 return; | 142 return; |
142 if (ExcludePacket(direction, media_type, rr.sender_ssrc())) | 143 if (ExcludePacket(direction, media_type, rr.sender_ssrc())) |
143 return; | 144 return; |
144 std::cout << log_timestamp << "\t" | 145 std::cout << log_timestamp << "\t" |
145 << "RTCP_RR" << StreamInfo(direction, media_type) | 146 << "RTCP_RR" << StreamInfo(direction, media_type) |
146 << "\tSSRC=" << rr.sender_ssrc() << std::endl; | 147 << "\tssrc=" << rr.sender_ssrc() << std::endl; |
147 } | 148 } |
148 | 149 |
149 void PrintXr(const webrtc::rtcp::CommonHeader& rtcp_block, | 150 void PrintXr(const webrtc::rtcp::CommonHeader& rtcp_block, |
150 uint64_t log_timestamp, | 151 uint64_t log_timestamp, |
151 webrtc::PacketDirection direction, | 152 webrtc::PacketDirection direction, |
152 webrtc::MediaType media_type) { | 153 webrtc::MediaType media_type) { |
153 webrtc::rtcp::ExtendedReports xr; | 154 webrtc::rtcp::ExtendedReports xr; |
154 if (!xr.Parse(rtcp_block)) | 155 if (!xr.Parse(rtcp_block)) |
155 return; | 156 return; |
156 if (ExcludePacket(direction, media_type, xr.sender_ssrc())) | 157 if (ExcludePacket(direction, media_type, xr.sender_ssrc())) |
157 return; | 158 return; |
158 std::cout << log_timestamp << "\t" | 159 std::cout << log_timestamp << "\t" |
159 << "RTCP_XR" << StreamInfo(direction, media_type) | 160 << "RTCP_XR" << StreamInfo(direction, media_type) |
160 << "\tSSRC=" << xr.sender_ssrc() << std::endl; | 161 << "\tssrc=" << xr.sender_ssrc() << std::endl; |
161 } | 162 } |
162 | 163 |
163 void PrintSdes(const webrtc::rtcp::CommonHeader& rtcp_block, | 164 void PrintSdes(const webrtc::rtcp::CommonHeader& rtcp_block, |
164 uint64_t log_timestamp, | 165 uint64_t log_timestamp, |
165 webrtc::PacketDirection direction, | 166 webrtc::PacketDirection direction, |
166 webrtc::MediaType media_type) { | 167 webrtc::MediaType media_type) { |
167 std::cout << log_timestamp << "\t" | 168 std::cout << log_timestamp << "\t" |
168 << "RTCP_SDES" << StreamInfo(direction, media_type) << std::endl; | 169 << "RTCP_SDES" << StreamInfo(direction, media_type) << std::endl; |
169 RTC_NOTREACHED() << "SDES should have been redacted when writing the log"; | 170 RTC_NOTREACHED() << "SDES should have been redacted when writing the log"; |
170 } | 171 } |
171 | 172 |
172 void PrintBye(const webrtc::rtcp::CommonHeader& rtcp_block, | 173 void PrintBye(const webrtc::rtcp::CommonHeader& rtcp_block, |
173 uint64_t log_timestamp, | 174 uint64_t log_timestamp, |
174 webrtc::PacketDirection direction, | 175 webrtc::PacketDirection direction, |
175 webrtc::MediaType media_type) { | 176 webrtc::MediaType media_type) { |
176 webrtc::rtcp::Bye bye; | 177 webrtc::rtcp::Bye bye; |
177 if (!bye.Parse(rtcp_block)) | 178 if (!bye.Parse(rtcp_block)) |
178 return; | 179 return; |
179 if (ExcludePacket(direction, media_type, bye.sender_ssrc())) | 180 if (ExcludePacket(direction, media_type, bye.sender_ssrc())) |
180 return; | 181 return; |
181 std::cout << log_timestamp << "\t" | 182 std::cout << log_timestamp << "\t" |
182 << "RTCP_BYE" << StreamInfo(direction, media_type) | 183 << "RTCP_BYE" << StreamInfo(direction, media_type) |
183 << "\tSSRC=" << bye.sender_ssrc() << std::endl; | 184 << "\tssrc=" << bye.sender_ssrc() << std::endl; |
184 } | 185 } |
185 | 186 |
186 void PrintRtpFeedback(const webrtc::rtcp::CommonHeader& rtcp_block, | 187 void PrintRtpFeedback(const webrtc::rtcp::CommonHeader& rtcp_block, |
187 uint64_t log_timestamp, | 188 uint64_t log_timestamp, |
188 webrtc::PacketDirection direction, | 189 webrtc::PacketDirection direction, |
189 webrtc::MediaType media_type) { | 190 webrtc::MediaType media_type) { |
190 std::cout << "Rtp feedback found"; | |
191 switch (rtcp_block.fmt()) { | 191 switch (rtcp_block.fmt()) { |
192 case webrtc::rtcp::Nack::kFeedbackMessageType: { | 192 case webrtc::rtcp::Nack::kFeedbackMessageType: { |
193 webrtc::rtcp::Nack nack; | 193 webrtc::rtcp::Nack nack; |
194 if (!nack.Parse(rtcp_block)) | 194 if (!nack.Parse(rtcp_block)) |
195 return; | 195 return; |
196 if (ExcludePacket(direction, media_type, nack.sender_ssrc())) | 196 if (ExcludePacket(direction, media_type, nack.sender_ssrc())) |
197 return; | 197 return; |
198 std::cout << log_timestamp << "\t" | 198 std::cout << log_timestamp << "\t" |
199 << "RTCP_NACK" << StreamInfo(direction, media_type) | 199 << "RTCP_NACK" << StreamInfo(direction, media_type) |
200 << "\tSSRC=" << nack.sender_ssrc() << std::endl; | 200 << "\tssrc=" << nack.sender_ssrc() << std::endl; |
201 break; | 201 break; |
202 } | 202 } |
203 case webrtc::rtcp::Tmmbr::kFeedbackMessageType: { | 203 case webrtc::rtcp::Tmmbr::kFeedbackMessageType: { |
204 webrtc::rtcp::Tmmbr tmmbr; | 204 webrtc::rtcp::Tmmbr tmmbr; |
205 if (!tmmbr.Parse(rtcp_block)) | 205 if (!tmmbr.Parse(rtcp_block)) |
206 return; | 206 return; |
207 if (ExcludePacket(direction, media_type, tmmbr.sender_ssrc())) | 207 if (ExcludePacket(direction, media_type, tmmbr.sender_ssrc())) |
208 return; | 208 return; |
209 std::cout << log_timestamp << "\t" | 209 std::cout << log_timestamp << "\t" |
210 << "RTCP_TMMBR" << StreamInfo(direction, media_type) | 210 << "RTCP_TMMBR" << StreamInfo(direction, media_type) |
211 << "\tSSRC=" << tmmbr.sender_ssrc() << std::endl; | 211 << "\tssrc=" << tmmbr.sender_ssrc() << std::endl; |
212 break; | 212 break; |
213 } | 213 } |
214 case webrtc::rtcp::Tmmbn::kFeedbackMessageType: { | 214 case webrtc::rtcp::Tmmbn::kFeedbackMessageType: { |
215 webrtc::rtcp::Tmmbn tmmbn; | 215 webrtc::rtcp::Tmmbn tmmbn; |
216 if (!tmmbn.Parse(rtcp_block)) | 216 if (!tmmbn.Parse(rtcp_block)) |
217 return; | 217 return; |
218 if (ExcludePacket(direction, media_type, tmmbn.sender_ssrc())) | 218 if (ExcludePacket(direction, media_type, tmmbn.sender_ssrc())) |
219 return; | 219 return; |
220 std::cout << log_timestamp << "\t" | 220 std::cout << log_timestamp << "\t" |
221 << "RTCP_TMMBN" << StreamInfo(direction, media_type) | 221 << "RTCP_TMMBN" << StreamInfo(direction, media_type) |
222 << "\tSSRC=" << tmmbn.sender_ssrc() << std::endl; | 222 << "\tssrc=" << tmmbn.sender_ssrc() << std::endl; |
223 break; | 223 break; |
224 } | 224 } |
225 case webrtc::rtcp::RapidResyncRequest::kFeedbackMessageType: { | 225 case webrtc::rtcp::RapidResyncRequest::kFeedbackMessageType: { |
226 webrtc::rtcp::RapidResyncRequest sr_req; | 226 webrtc::rtcp::RapidResyncRequest sr_req; |
227 if (!sr_req.Parse(rtcp_block)) | 227 if (!sr_req.Parse(rtcp_block)) |
228 return; | 228 return; |
229 if (ExcludePacket(direction, media_type, sr_req.sender_ssrc())) | 229 if (ExcludePacket(direction, media_type, sr_req.sender_ssrc())) |
230 return; | 230 return; |
231 std::cout << log_timestamp << "\t" | 231 std::cout << log_timestamp << "\t" |
232 << "RTCP_SRREQ" << StreamInfo(direction, media_type) | 232 << "RTCP_SRREQ" << StreamInfo(direction, media_type) |
233 << "\tSSRC=" << sr_req.sender_ssrc() << std::endl; | 233 << "\tssrc=" << sr_req.sender_ssrc() << std::endl; |
234 break; | 234 break; |
235 } | 235 } |
236 case webrtc::rtcp::TransportFeedback::kFeedbackMessageType: { | 236 case webrtc::rtcp::TransportFeedback::kFeedbackMessageType: { |
237 webrtc::rtcp::TransportFeedback transport_feedback; | 237 webrtc::rtcp::TransportFeedback transport_feedback; |
238 if (!transport_feedback.Parse(rtcp_block)) | 238 if (!transport_feedback.Parse(rtcp_block)) |
239 return; | 239 return; |
240 if (ExcludePacket(direction, media_type, | 240 if (ExcludePacket(direction, media_type, |
241 transport_feedback.sender_ssrc())) | 241 transport_feedback.sender_ssrc())) |
242 return; | 242 return; |
243 std::cout << log_timestamp << "\t" | 243 std::cout << log_timestamp << "\t" |
244 << "RTCP_NEWFB" << StreamInfo(direction, media_type) | 244 << "RTCP_NEWFB" << StreamInfo(direction, media_type) |
245 << "\tSSRC=" << transport_feedback.sender_ssrc() << std::endl; | 245 << "\tssrc=" << transport_feedback.sender_ssrc() << std::endl; |
246 break; | 246 break; |
247 } | 247 } |
248 default: | 248 default: |
249 RTC_DCHECK(false); | |
250 break; | 249 break; |
251 } | 250 } |
252 } | 251 } |
253 | 252 |
254 void PrintPsFeedback(const webrtc::rtcp::CommonHeader& rtcp_block, | 253 void PrintPsFeedback(const webrtc::rtcp::CommonHeader& rtcp_block, |
255 uint64_t log_timestamp, | 254 uint64_t log_timestamp, |
256 webrtc::PacketDirection direction, | 255 webrtc::PacketDirection direction, |
257 webrtc::MediaType media_type) { | 256 webrtc::MediaType media_type) { |
258 switch (rtcp_block.fmt()) { | 257 switch (rtcp_block.fmt()) { |
259 case webrtc::rtcp::Pli::kFeedbackMessageType: { | 258 case webrtc::rtcp::Pli::kFeedbackMessageType: { |
260 webrtc::rtcp::Pli pli; | 259 webrtc::rtcp::Pli pli; |
261 if (!pli.Parse(rtcp_block)) | 260 if (!pli.Parse(rtcp_block)) |
262 return; | 261 return; |
263 if (ExcludePacket(direction, media_type, pli.sender_ssrc())) | 262 if (ExcludePacket(direction, media_type, pli.sender_ssrc())) |
264 return; | 263 return; |
265 std::cout << log_timestamp << "\t" | 264 std::cout << log_timestamp << "\t" |
266 << "RTCP_PLI" << StreamInfo(direction, media_type) | 265 << "RTCP_PLI" << StreamInfo(direction, media_type) |
267 << "\tSSRC=" << pli.sender_ssrc() << std::endl; | 266 << "\tssrc=" << pli.sender_ssrc() << std::endl; |
268 break; | 267 break; |
269 } | 268 } |
270 case webrtc::rtcp::Sli::kFeedbackMessageType: { | 269 case webrtc::rtcp::Sli::kFeedbackMessageType: { |
271 webrtc::rtcp::Sli sli; | 270 webrtc::rtcp::Sli sli; |
272 if (!sli.Parse(rtcp_block)) | 271 if (!sli.Parse(rtcp_block)) |
273 return; | 272 return; |
274 if (ExcludePacket(direction, media_type, sli.sender_ssrc())) | 273 if (ExcludePacket(direction, media_type, sli.sender_ssrc())) |
275 return; | 274 return; |
276 std::cout << log_timestamp << "\t" | 275 std::cout << log_timestamp << "\t" |
277 << "RTCP_SLI" << StreamInfo(direction, media_type) | 276 << "RTCP_SLI" << StreamInfo(direction, media_type) |
278 << "\tSSRC=" << sli.sender_ssrc() << std::endl; | 277 << "\tssrc=" << sli.sender_ssrc() << std::endl; |
279 break; | 278 break; |
280 } | 279 } |
281 case webrtc::rtcp::Rpsi::kFeedbackMessageType: { | 280 case webrtc::rtcp::Rpsi::kFeedbackMessageType: { |
282 webrtc::rtcp::Rpsi rpsi; | 281 webrtc::rtcp::Rpsi rpsi; |
283 if (!rpsi.Parse(rtcp_block)) | 282 if (!rpsi.Parse(rtcp_block)) |
284 return; | 283 return; |
285 if (ExcludePacket(direction, media_type, rpsi.sender_ssrc())) | 284 if (ExcludePacket(direction, media_type, rpsi.sender_ssrc())) |
286 return; | 285 return; |
287 std::cout << log_timestamp << "\t" | 286 std::cout << log_timestamp << "\t" |
288 << "RTCP_RPSI" << StreamInfo(direction, media_type) | 287 << "RTCP_RPSI" << StreamInfo(direction, media_type) |
289 << "\tSSRC=" << rpsi.sender_ssrc() << std::endl; | 288 << "\tssrc=" << rpsi.sender_ssrc() << std::endl; |
290 break; | 289 break; |
291 } | 290 } |
292 case webrtc::rtcp::Fir::kFeedbackMessageType: { | 291 case webrtc::rtcp::Fir::kFeedbackMessageType: { |
293 webrtc::rtcp::Fir fir; | 292 webrtc::rtcp::Fir fir; |
294 if (!fir.Parse(rtcp_block)) | 293 if (!fir.Parse(rtcp_block)) |
295 return; | 294 return; |
296 if (ExcludePacket(direction, media_type, fir.sender_ssrc())) | 295 if (ExcludePacket(direction, media_type, fir.sender_ssrc())) |
297 return; | 296 return; |
298 std::cout << log_timestamp << "\t" | 297 std::cout << log_timestamp << "\t" |
299 << "RTCP_FIR" << StreamInfo(direction, media_type) | 298 << "RTCP_FIR" << StreamInfo(direction, media_type) |
300 << "\tSSRC=" << fir.sender_ssrc() << std::endl; | 299 << "\tssrc=" << fir.sender_ssrc() << std::endl; |
301 break; | 300 break; |
302 } | 301 } |
303 case webrtc::rtcp::Remb::kFeedbackMessageType: { | 302 case webrtc::rtcp::Remb::kFeedbackMessageType: { |
304 webrtc::rtcp::Remb remb; | 303 webrtc::rtcp::Remb remb; |
305 if (!remb.Parse(rtcp_block)) | 304 if (!remb.Parse(rtcp_block)) |
306 return; | 305 return; |
307 if (ExcludePacket(direction, media_type, remb.sender_ssrc())) | 306 if (ExcludePacket(direction, media_type, remb.sender_ssrc())) |
308 return; | 307 return; |
309 std::cout << log_timestamp << "\t" | 308 std::cout << log_timestamp << "\t" |
310 << "RTCP_REMB" << StreamInfo(direction, media_type) | 309 << "RTCP_REMB" << StreamInfo(direction, media_type) |
311 << "\tSSRC=" << remb.sender_ssrc() << std::endl; | 310 << "\tssrc=" << remb.sender_ssrc() << std::endl; |
312 break; | 311 break; |
313 } | 312 } |
314 default: | 313 default: |
315 break; | 314 break; |
316 } | 315 } |
317 } | 316 } |
318 | 317 |
319 } // namespace | 318 } // namespace |
320 | 319 |
321 // This utility will print basic information about each packet to stdout. | 320 // This utility will print basic information about each packet to stdout. |
(...skipping 20 matching lines...) Expand all Loading... |
342 if (!FLAGS_ssrc.empty()) | 341 if (!FLAGS_ssrc.empty()) |
343 RTC_CHECK(ParseSsrc(FLAGS_ssrc)) << "Flag verification has failed."; | 342 RTC_CHECK(ParseSsrc(FLAGS_ssrc)) << "Flag verification has failed."; |
344 | 343 |
345 webrtc::ParsedRtcEventLog parsed_stream; | 344 webrtc::ParsedRtcEventLog parsed_stream; |
346 if (!parsed_stream.ParseFile(input_file)) { | 345 if (!parsed_stream.ParseFile(input_file)) { |
347 std::cerr << "Error while parsing input file: " << input_file << std::endl; | 346 std::cerr << "Error while parsing input file: " << input_file << std::endl; |
348 return -1; | 347 return -1; |
349 } | 348 } |
350 | 349 |
351 for (size_t i = 0; i < parsed_stream.GetNumberOfEvents(); i++) { | 350 for (size_t i = 0; i < parsed_stream.GetNumberOfEvents(); i++) { |
| 351 if (!FLAGS_noconfig && !FLAGS_novideo && !FLAGS_noincoming && |
| 352 parsed_stream.GetEventType(i) == |
| 353 webrtc::ParsedRtcEventLog::VIDEO_RECEIVER_CONFIG_EVENT) { |
| 354 webrtc::VideoReceiveStream::Config config(nullptr); |
| 355 parsed_stream.GetVideoReceiveConfig(i, &config); |
| 356 std::cout << parsed_stream.GetTimestamp(i) << "\tVIDEO_RECV_CONFIG" |
| 357 << "\tssrc=" << config.rtp.remote_ssrc |
| 358 << "\tfeedback_ssrc=" << config.rtp.local_ssrc << std::endl; |
| 359 } |
| 360 if (!FLAGS_noconfig && !FLAGS_novideo && !FLAGS_nooutgoing && |
| 361 parsed_stream.GetEventType(i) == |
| 362 webrtc::ParsedRtcEventLog::VIDEO_SENDER_CONFIG_EVENT) { |
| 363 webrtc::VideoSendStream::Config config(nullptr); |
| 364 parsed_stream.GetVideoSendConfig(i, &config); |
| 365 std::cout << parsed_stream.GetTimestamp(i) << "\tVIDEO_SEND_CONFIG"; |
| 366 std::cout << "\tssrcs="; |
| 367 for (const auto& ssrc : config.rtp.ssrcs) |
| 368 std::cout << ssrc << ','; |
| 369 std::cout << "\trtx_ssrcs="; |
| 370 for (const auto& ssrc : config.rtp.rtx.ssrcs) |
| 371 std::cout << ssrc << ','; |
| 372 std::cout << std::endl; |
| 373 } |
| 374 if (!FLAGS_noconfig && !FLAGS_noaudio && !FLAGS_noincoming && |
| 375 parsed_stream.GetEventType(i) == |
| 376 webrtc::ParsedRtcEventLog::AUDIO_RECEIVER_CONFIG_EVENT) { |
| 377 webrtc::AudioReceiveStream::Config config; |
| 378 parsed_stream.GetAudioReceiveConfig(i, &config); |
| 379 std::cout << parsed_stream.GetTimestamp(i) << "\tAUDIO_RECV_CONFIG" |
| 380 << "\tssrc=" << config.rtp.remote_ssrc |
| 381 << "\tfeedback_ssrc=" << config.rtp.local_ssrc << std::endl; |
| 382 } |
| 383 if (!FLAGS_noconfig && !FLAGS_noaudio && !FLAGS_nooutgoing && |
| 384 parsed_stream.GetEventType(i) == |
| 385 webrtc::ParsedRtcEventLog::AUDIO_SENDER_CONFIG_EVENT) { |
| 386 webrtc::AudioSendStream::Config config(nullptr); |
| 387 parsed_stream.GetAudioSendConfig(i, &config); |
| 388 std::cout << parsed_stream.GetTimestamp(i) << "\tAUDIO_SEND_CONFIG" |
| 389 << "\tssrc=" << config.rtp.ssrc << std::endl; |
| 390 } |
352 if (!FLAGS_nortp && | 391 if (!FLAGS_nortp && |
353 parsed_stream.GetEventType(i) == webrtc::ParsedRtcEventLog::RTP_EVENT) { | 392 parsed_stream.GetEventType(i) == webrtc::ParsedRtcEventLog::RTP_EVENT) { |
354 size_t header_length; | 393 size_t header_length; |
355 size_t total_length; | 394 size_t total_length; |
356 uint8_t header[IP_PACKET_SIZE]; | 395 uint8_t header[IP_PACKET_SIZE]; |
357 webrtc::PacketDirection direction; | 396 webrtc::PacketDirection direction; |
358 webrtc::MediaType media_type; | 397 webrtc::MediaType media_type; |
359 parsed_stream.GetRtpHeader(i, &direction, &media_type, header, | 398 parsed_stream.GetRtpHeader(i, &direction, &media_type, header, |
360 &header_length, &total_length); | 399 &header_length, &total_length); |
361 | 400 |
362 // Parse header to get SSRC and RTP time. | 401 // Parse header to get SSRC and RTP time. |
363 webrtc::RtpUtility::RtpHeaderParser rtp_parser(header, header_length); | 402 webrtc::RtpUtility::RtpHeaderParser rtp_parser(header, header_length); |
364 webrtc::RTPHeader parsed_header; | 403 webrtc::RTPHeader parsed_header; |
365 rtp_parser.Parse(&parsed_header); | 404 rtp_parser.Parse(&parsed_header); |
366 | 405 |
367 if (ExcludePacket(direction, media_type, parsed_header.ssrc)) | 406 if (ExcludePacket(direction, media_type, parsed_header.ssrc)) |
368 continue; | 407 continue; |
369 | 408 |
370 std::cout << parsed_stream.GetTimestamp(i) << "\tRTP" | 409 std::cout << parsed_stream.GetTimestamp(i) << "\tRTP" |
371 << StreamInfo(direction, media_type) | 410 << StreamInfo(direction, media_type) |
372 << "\tSSRC=" << parsed_header.ssrc | 411 << "\tssrc=" << parsed_header.ssrc |
373 << "\ttimestamp=" << parsed_header.timestamp << std::endl; | 412 << "\ttimestamp=" << parsed_header.timestamp << std::endl; |
374 } | 413 } |
375 if (!FLAGS_nortcp && | 414 if (!FLAGS_nortcp && |
376 parsed_stream.GetEventType(i) == | 415 parsed_stream.GetEventType(i) == |
377 webrtc::ParsedRtcEventLog::RTCP_EVENT) { | 416 webrtc::ParsedRtcEventLog::RTCP_EVENT) { |
378 size_t length; | 417 size_t length; |
379 uint8_t packet[IP_PACKET_SIZE]; | 418 uint8_t packet[IP_PACKET_SIZE]; |
380 webrtc::PacketDirection direction; | 419 webrtc::PacketDirection direction; |
381 webrtc::MediaType media_type; | 420 webrtc::MediaType media_type; |
382 parsed_stream.GetRtcpPacket(i, &direction, &media_type, packet, &length); | 421 parsed_stream.GetRtcpPacket(i, &direction, &media_type, packet, &length); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
416 PrintPsFeedback(rtcp_block, log_timestamp, direction, media_type); | 455 PrintPsFeedback(rtcp_block, log_timestamp, direction, media_type); |
417 break; | 456 break; |
418 default: | 457 default: |
419 break; | 458 break; |
420 } | 459 } |
421 } | 460 } |
422 } | 461 } |
423 } | 462 } |
424 return 0; | 463 return 0; |
425 } | 464 } |
OLD | NEW |