Allow printing full packets in rtc_eventlog2text.

Add command line option to print packet contents as hex in rtc_eventlog2text.

Bug: None
Change-Id: I690706cfba883ca2248332622f2c9133b7ddaf6a
Reviewed-on: https://webrtc-review.googlesource.com/20863
Commit-Queue: Björn Terelius <terelius@webrtc.org>
Reviewed-by: Elad Alon <eladalon@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20590}
This commit is contained in:
Bjorn Terelius
2017-11-07 16:32:49 +01:00
committed by Commit Bot
parent 7cfbf3a0ff
commit 2732bf5f20

View File

@ -10,6 +10,7 @@
#include <string.h>
#include <iomanip> // setfill, setw
#include <iostream>
#include <map>
#include <sstream>
@ -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<int>(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<unsigned>(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<unsigned>(*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<unsigned>(fraction_loss)
<< "\ttotal_packets=" << total_packets << std::endl;
}
event_recognized = true;