diff --git a/logging/rtc_event_log/rtc_event_log2text.cc b/logging/rtc_event_log/rtc_event_log2text.cc index 91f7b18767..9292fd3e4e 100644 --- a/logging/rtc_event_log/rtc_event_log2text.cc +++ b/logging/rtc_event_log/rtc_event_log2text.cc @@ -10,6 +10,7 @@ #include +#include // setfill, setw #include #include #include @@ -60,6 +61,10 @@ DEFINE_bool(playout, true, "Use --noplayout to exclude audio playout events."); DEFINE_bool(ana, true, "Use --noana to exclude ANA events."); DEFINE_bool(probe, true, "Use --noprobe to exclude probe events."); +DEFINE_bool(print_full_packets, + false, + "Print the full RTP headers and RTCP packets in hex."); + // TODO(terelius): Allow a list of SSRCs. DEFINE_string(ssrc, "", @@ -301,7 +306,9 @@ void PrintRtpFeedback(const webrtc::ParsedRtcEventLog& parsed_stream, return; std::cout << log_timestamp << "\t" << "RTCP_NEWFB" << StreamInfo(direction, media_type) - << "\tssrc=" << transport_feedback.sender_ssrc() << std::endl; + << "\tsender_ssrc=" << transport_feedback.sender_ssrc() + << "\tmedia_ssrc=" << transport_feedback.media_ssrc() + << std::endl; break; } default: @@ -489,6 +496,18 @@ int main(int argc, char* argv[]) { static_cast(parsed_header.extension.audioLevel); } std::cout << std::endl; + if (FLAG_print_full_packets) { + // TODO(terelius): Rewrite this file to use printf instead of cout. + std::cout << "\t\t" << std::hex; + char prev_fill = std::cout.fill('0'); + for (size_t i = 0; i < header_length; i++) { + std::cout << std::setw(2) << static_cast(header[i]); + if (i % 4 == 3) + std::cout << " "; // Separator between 32-bit words. + } + std::cout.fill(prev_fill); + std::cout << std::dec << std::endl; + } } event_recognized = true; break; @@ -508,6 +527,7 @@ int main(int argc, char* argv[]) { ptrdiff_t remaining_blocks_size = packet_end - next_block; RTC_DCHECK_GT(remaining_blocks_size, 0); if (!rtcp_block.Parse(next_block, remaining_blocks_size)) { + RTC_LOG(LS_WARNING) << "Failed to parse RTCP"; break; } @@ -541,6 +561,19 @@ int main(int argc, char* argv[]) { default: break; } + if (FLAG_print_full_packets) { + std::cout << "\t\t" << std::hex; + char prev_fill = std::cout.fill('0'); + for (const uint8_t* p = next_block; p < rtcp_block.NextPacket(); + p++) { + std::cout << std::setw(2) << static_cast(*p); + ptrdiff_t chars_printed = p - next_block; + if (chars_printed % 4 == 3) + std::cout << " "; // Separator between 32-bit words. + } + std::cout.fill(prev_fill); + std::cout << std::dec << std::endl; + } } } event_recognized = true; @@ -566,8 +599,8 @@ int main(int argc, char* argv[]) { parsed_stream.GetLossBasedBweUpdate(i, &bitrate_bps, &fraction_loss, &total_packets); std::cout << parsed_stream.GetTimestamp(i) << "\tBWE(LOSS_BASED)" - << "\tbitrate_bps=" << bitrate_bps - << "\tfraction_loss=" << fraction_loss + << "\tbitrate_bps=" << bitrate_bps << "\tfraction_loss=" + << static_cast(fraction_loss) << "\ttotal_packets=" << total_packets << std::endl; } event_recognized = true;