Index: webrtc/logging/rtc_event_log/rtc_event_log2text.cc |
diff --git a/webrtc/logging/rtc_event_log/rtc_event_log2text.cc b/webrtc/logging/rtc_event_log/rtc_event_log2text.cc |
index b2d537e3b3b0cb2a67158e89038a9126385e9825..1fa694de690d71ec081cb0fbda0538cc740eab8a 100644 |
--- a/webrtc/logging/rtc_event_log/rtc_event_log2text.cc |
+++ b/webrtc/logging/rtc_event_log/rtc_event_log2text.cc |
@@ -73,6 +73,32 @@ bool ParseSsrc(std::string str) { |
return str.empty() || (!ss.fail() && ss.eof()); |
} |
+// Struct used for storing SSRCs used in a Stream. |
+struct Stream { |
+ Stream(uint32_t ssrc, |
+ webrtc::MediaType media_type, |
+ webrtc::PacketDirection direction) |
+ : ssrc(ssrc), media_type(media_type), direction(direction) {} |
+ uint32_t ssrc; |
+ webrtc::MediaType media_type; |
+ webrtc::PacketDirection direction; |
+}; |
+ |
+// All configured streams found in the event log. |
+std::vector<Stream> global_streams; |
+ |
+// Returns the MediaType for registered SSRCs. Search from the end to use last |
+// registered types first. |
+webrtc::MediaType GetMediaType(uint32_t ssrc, |
+ webrtc::PacketDirection direction) { |
+ for (auto rit = global_streams.rbegin(); rit != global_streams.rend(); |
+ ++rit) { |
+ if (rit->ssrc == ssrc && rit->direction == direction) |
+ return rit->media_type; |
+ } |
+ return webrtc::MediaType::ANY; |
+} |
+ |
bool ExcludePacket(webrtc::PacketDirection direction, |
webrtc::MediaType media_type, |
uint32_t packet_ssrc) { |
@@ -118,11 +144,11 @@ const char* StreamInfo(webrtc::PacketDirection direction, |
void PrintSenderReport(const webrtc::rtcp::CommonHeader& rtcp_block, |
uint64_t log_timestamp, |
- webrtc::PacketDirection direction, |
- webrtc::MediaType media_type) { |
+ webrtc::PacketDirection direction) { |
webrtc::rtcp::SenderReport sr; |
if (!sr.Parse(rtcp_block)) |
return; |
+ webrtc::MediaType media_type = GetMediaType(sr.sender_ssrc(), direction); |
if (ExcludePacket(direction, media_type, sr.sender_ssrc())) |
return; |
std::cout << log_timestamp << "\t" |
@@ -133,11 +159,11 @@ void PrintSenderReport(const webrtc::rtcp::CommonHeader& rtcp_block, |
void PrintReceiverReport(const webrtc::rtcp::CommonHeader& rtcp_block, |
uint64_t log_timestamp, |
- webrtc::PacketDirection direction, |
- webrtc::MediaType media_type) { |
+ webrtc::PacketDirection direction) { |
webrtc::rtcp::ReceiverReport rr; |
if (!rr.Parse(rtcp_block)) |
return; |
+ webrtc::MediaType media_type = GetMediaType(rr.sender_ssrc(), direction); |
if (ExcludePacket(direction, media_type, rr.sender_ssrc())) |
return; |
std::cout << log_timestamp << "\t" |
@@ -147,11 +173,11 @@ void PrintReceiverReport(const webrtc::rtcp::CommonHeader& rtcp_block, |
void PrintXr(const webrtc::rtcp::CommonHeader& rtcp_block, |
uint64_t log_timestamp, |
- webrtc::PacketDirection direction, |
- webrtc::MediaType media_type) { |
+ webrtc::PacketDirection direction) { |
webrtc::rtcp::ExtendedReports xr; |
if (!xr.Parse(rtcp_block)) |
return; |
+ webrtc::MediaType media_type = GetMediaType(xr.sender_ssrc(), direction); |
if (ExcludePacket(direction, media_type, xr.sender_ssrc())) |
return; |
std::cout << log_timestamp << "\t" |
@@ -161,20 +187,20 @@ void PrintXr(const webrtc::rtcp::CommonHeader& rtcp_block, |
void PrintSdes(const webrtc::rtcp::CommonHeader& rtcp_block, |
uint64_t log_timestamp, |
- webrtc::PacketDirection direction, |
- webrtc::MediaType media_type) { |
+ webrtc::PacketDirection direction) { |
std::cout << log_timestamp << "\t" |
- << "RTCP_SDES" << StreamInfo(direction, media_type) << std::endl; |
+ << "RTCP_SDES" << StreamInfo(direction, webrtc::MediaType::ANY) |
+ << std::endl; |
RTC_NOTREACHED() << "SDES should have been redacted when writing the log"; |
} |
void PrintBye(const webrtc::rtcp::CommonHeader& rtcp_block, |
uint64_t log_timestamp, |
- webrtc::PacketDirection direction, |
- webrtc::MediaType media_type) { |
+ webrtc::PacketDirection direction) { |
webrtc::rtcp::Bye bye; |
if (!bye.Parse(rtcp_block)) |
return; |
+ webrtc::MediaType media_type = GetMediaType(bye.sender_ssrc(), direction); |
if (ExcludePacket(direction, media_type, bye.sender_ssrc())) |
return; |
std::cout << log_timestamp << "\t" |
@@ -184,13 +210,14 @@ void PrintBye(const webrtc::rtcp::CommonHeader& rtcp_block, |
void PrintRtpFeedback(const webrtc::rtcp::CommonHeader& rtcp_block, |
uint64_t log_timestamp, |
- webrtc::PacketDirection direction, |
- webrtc::MediaType media_type) { |
+ webrtc::PacketDirection direction) { |
switch (rtcp_block.fmt()) { |
case webrtc::rtcp::Nack::kFeedbackMessageType: { |
webrtc::rtcp::Nack nack; |
if (!nack.Parse(rtcp_block)) |
return; |
+ webrtc::MediaType media_type = |
+ GetMediaType(nack.sender_ssrc(), direction); |
if (ExcludePacket(direction, media_type, nack.sender_ssrc())) |
return; |
std::cout << log_timestamp << "\t" |
@@ -202,6 +229,8 @@ void PrintRtpFeedback(const webrtc::rtcp::CommonHeader& rtcp_block, |
webrtc::rtcp::Tmmbr tmmbr; |
if (!tmmbr.Parse(rtcp_block)) |
return; |
+ webrtc::MediaType media_type = |
+ GetMediaType(tmmbr.sender_ssrc(), direction); |
if (ExcludePacket(direction, media_type, tmmbr.sender_ssrc())) |
return; |
std::cout << log_timestamp << "\t" |
@@ -213,6 +242,8 @@ void PrintRtpFeedback(const webrtc::rtcp::CommonHeader& rtcp_block, |
webrtc::rtcp::Tmmbn tmmbn; |
if (!tmmbn.Parse(rtcp_block)) |
return; |
+ webrtc::MediaType media_type = |
+ GetMediaType(tmmbn.sender_ssrc(), direction); |
if (ExcludePacket(direction, media_type, tmmbn.sender_ssrc())) |
return; |
std::cout << log_timestamp << "\t" |
@@ -224,6 +255,8 @@ void PrintRtpFeedback(const webrtc::rtcp::CommonHeader& rtcp_block, |
webrtc::rtcp::RapidResyncRequest sr_req; |
if (!sr_req.Parse(rtcp_block)) |
return; |
+ webrtc::MediaType media_type = |
+ GetMediaType(sr_req.sender_ssrc(), direction); |
if (ExcludePacket(direction, media_type, sr_req.sender_ssrc())) |
return; |
std::cout << log_timestamp << "\t" |
@@ -235,6 +268,8 @@ void PrintRtpFeedback(const webrtc::rtcp::CommonHeader& rtcp_block, |
webrtc::rtcp::TransportFeedback transport_feedback; |
if (!transport_feedback.Parse(rtcp_block)) |
return; |
+ webrtc::MediaType media_type = |
+ GetMediaType(transport_feedback.sender_ssrc(), direction); |
if (ExcludePacket(direction, media_type, |
transport_feedback.sender_ssrc())) |
return; |
@@ -250,13 +285,13 @@ void PrintRtpFeedback(const webrtc::rtcp::CommonHeader& rtcp_block, |
void PrintPsFeedback(const webrtc::rtcp::CommonHeader& rtcp_block, |
uint64_t log_timestamp, |
- webrtc::PacketDirection direction, |
- webrtc::MediaType media_type) { |
+ webrtc::PacketDirection direction) { |
switch (rtcp_block.fmt()) { |
case webrtc::rtcp::Pli::kFeedbackMessageType: { |
webrtc::rtcp::Pli pli; |
if (!pli.Parse(rtcp_block)) |
return; |
+ webrtc::MediaType media_type = GetMediaType(pli.sender_ssrc(), direction); |
if (ExcludePacket(direction, media_type, pli.sender_ssrc())) |
return; |
std::cout << log_timestamp << "\t" |
@@ -268,6 +303,7 @@ void PrintPsFeedback(const webrtc::rtcp::CommonHeader& rtcp_block, |
webrtc::rtcp::Fir fir; |
if (!fir.Parse(rtcp_block)) |
return; |
+ webrtc::MediaType media_type = GetMediaType(fir.sender_ssrc(), direction); |
if (ExcludePacket(direction, media_type, fir.sender_ssrc())) |
return; |
std::cout << log_timestamp << "\t" |
@@ -279,6 +315,8 @@ void PrintPsFeedback(const webrtc::rtcp::CommonHeader& rtcp_block, |
webrtc::rtcp::Remb remb; |
if (!remb.Parse(rtcp_block)) |
return; |
+ webrtc::MediaType media_type = |
+ GetMediaType(remb.sender_ssrc(), direction); |
if (ExcludePacket(direction, media_type, remb.sender_ssrc())) |
return; |
std::cout << log_timestamp << "\t" |
@@ -324,45 +362,75 @@ int main(int argc, char* argv[]) { |
} |
for (size_t i = 0; i < parsed_stream.GetNumberOfEvents(); i++) { |
- if (!FLAGS_noconfig && !FLAGS_novideo && !FLAGS_noincoming && |
- parsed_stream.GetEventType(i) == |
- webrtc::ParsedRtcEventLog::VIDEO_RECEIVER_CONFIG_EVENT) { |
+ if (parsed_stream.GetEventType(i) == |
+ webrtc::ParsedRtcEventLog::VIDEO_RECEIVER_CONFIG_EVENT) { |
webrtc::VideoReceiveStream::Config config(nullptr); |
parsed_stream.GetVideoReceiveConfig(i, &config); |
- std::cout << parsed_stream.GetTimestamp(i) << "\tVIDEO_RECV_CONFIG" |
- << "\tssrc=" << config.rtp.remote_ssrc |
- << "\tfeedback_ssrc=" << config.rtp.local_ssrc << std::endl; |
+ |
+ global_streams.emplace_back(config.rtp.remote_ssrc, |
+ webrtc::MediaType::VIDEO, |
+ webrtc::kIncomingPacket); |
+ global_streams.emplace_back(config.rtp.local_ssrc, |
+ webrtc::MediaType::VIDEO, |
+ webrtc::kOutgoingPacket); |
+ |
+ if (!FLAGS_noconfig && !FLAGS_novideo && !FLAGS_noincoming) { |
+ std::cout << parsed_stream.GetTimestamp(i) << "\tVIDEO_RECV_CONFIG" |
+ << "\tssrc=" << config.rtp.remote_ssrc |
+ << "\tfeedback_ssrc=" << config.rtp.local_ssrc << std::endl; |
+ } |
} |
- if (!FLAGS_noconfig && !FLAGS_novideo && !FLAGS_nooutgoing && |
- parsed_stream.GetEventType(i) == |
- webrtc::ParsedRtcEventLog::VIDEO_SENDER_CONFIG_EVENT) { |
+ if (parsed_stream.GetEventType(i) == |
+ webrtc::ParsedRtcEventLog::VIDEO_SENDER_CONFIG_EVENT) { |
webrtc::VideoSendStream::Config config(nullptr); |
parsed_stream.GetVideoSendConfig(i, &config); |
- std::cout << parsed_stream.GetTimestamp(i) << "\tVIDEO_SEND_CONFIG"; |
- std::cout << "\tssrcs="; |
- for (const auto& ssrc : config.rtp.ssrcs) |
- std::cout << ssrc << ','; |
- std::cout << "\trtx_ssrcs="; |
- for (const auto& ssrc : config.rtp.rtx.ssrcs) |
- std::cout << ssrc << ','; |
- std::cout << std::endl; |
+ |
+ for (uint32_t ssrc : config.rtp.ssrcs) { |
+ global_streams.emplace_back(ssrc, webrtc::MediaType::VIDEO, |
+ webrtc::kOutgoingPacket); |
+ } |
+ for (uint32_t ssrc : config.rtp.rtx.ssrcs) { |
+ global_streams.emplace_back(ssrc, webrtc::MediaType::VIDEO, |
+ webrtc::kOutgoingPacket); |
+ } |
+ |
+ if (!FLAGS_noconfig && !FLAGS_novideo && !FLAGS_nooutgoing) { |
+ std::cout << parsed_stream.GetTimestamp(i) << "\tVIDEO_SEND_CONFIG"; |
+ std::cout << "\tssrcs="; |
+ for (const auto& ssrc : config.rtp.ssrcs) |
+ std::cout << ssrc << ','; |
+ std::cout << "\trtx_ssrcs="; |
+ for (const auto& ssrc : config.rtp.rtx.ssrcs) |
+ std::cout << ssrc << ','; |
+ std::cout << std::endl; |
+ } |
} |
- if (!FLAGS_noconfig && !FLAGS_noaudio && !FLAGS_noincoming && |
- parsed_stream.GetEventType(i) == |
- webrtc::ParsedRtcEventLog::AUDIO_RECEIVER_CONFIG_EVENT) { |
+ if (parsed_stream.GetEventType(i) == |
+ webrtc::ParsedRtcEventLog::AUDIO_RECEIVER_CONFIG_EVENT) { |
webrtc::AudioReceiveStream::Config config; |
parsed_stream.GetAudioReceiveConfig(i, &config); |
- std::cout << parsed_stream.GetTimestamp(i) << "\tAUDIO_RECV_CONFIG" |
- << "\tssrc=" << config.rtp.remote_ssrc |
- << "\tfeedback_ssrc=" << config.rtp.local_ssrc << std::endl; |
+ global_streams.emplace_back(config.rtp.remote_ssrc, |
+ webrtc::MediaType::AUDIO, |
+ webrtc::kIncomingPacket); |
+ global_streams.emplace_back(config.rtp.local_ssrc, |
+ webrtc::MediaType::AUDIO, |
+ webrtc::kOutgoingPacket); |
+ if (!FLAGS_noconfig && !FLAGS_noaudio && !FLAGS_noincoming) { |
+ std::cout << parsed_stream.GetTimestamp(i) << "\tAUDIO_RECV_CONFIG" |
+ << "\tssrc=" << config.rtp.remote_ssrc |
+ << "\tfeedback_ssrc=" << config.rtp.local_ssrc << std::endl; |
+ } |
} |
- if (!FLAGS_noconfig && !FLAGS_noaudio && !FLAGS_nooutgoing && |
- parsed_stream.GetEventType(i) == |
- webrtc::ParsedRtcEventLog::AUDIO_SENDER_CONFIG_EVENT) { |
+ if (parsed_stream.GetEventType(i) == |
+ webrtc::ParsedRtcEventLog::AUDIO_SENDER_CONFIG_EVENT) { |
webrtc::AudioSendStream::Config config(nullptr); |
parsed_stream.GetAudioSendConfig(i, &config); |
- std::cout << parsed_stream.GetTimestamp(i) << "\tAUDIO_SEND_CONFIG" |
- << "\tssrc=" << config.rtp.ssrc << std::endl; |
+ global_streams.emplace_back(config.rtp.ssrc, webrtc::MediaType::AUDIO, |
+ webrtc::kOutgoingPacket); |
+ if (!FLAGS_noconfig && !FLAGS_noaudio && !FLAGS_nooutgoing) { |
+ std::cout << parsed_stream.GetTimestamp(i) << "\tAUDIO_SEND_CONFIG" |
+ << "\tssrc=" << config.rtp.ssrc << std::endl; |
+ } |
} |
if (!FLAGS_nortp && |
parsed_stream.GetEventType(i) == webrtc::ParsedRtcEventLog::RTP_EVENT) { |
@@ -378,6 +446,7 @@ int main(int argc, char* argv[]) { |
webrtc::RtpUtility::RtpHeaderParser rtp_parser(header, header_length); |
webrtc::RTPHeader parsed_header; |
rtp_parser.Parse(&parsed_header); |
+ media_type = GetMediaType(parsed_header.ssrc, direction); |
if (ExcludePacket(direction, media_type, parsed_header.ssrc)) |
continue; |
@@ -409,26 +478,25 @@ int main(int argc, char* argv[]) { |
uint64_t log_timestamp = parsed_stream.GetTimestamp(i); |
switch (rtcp_block.type()) { |
case webrtc::rtcp::SenderReport::kPacketType: |
- PrintSenderReport(rtcp_block, log_timestamp, direction, media_type); |
+ PrintSenderReport(rtcp_block, log_timestamp, direction); |
break; |
case webrtc::rtcp::ReceiverReport::kPacketType: |
- PrintReceiverReport(rtcp_block, log_timestamp, direction, |
- media_type); |
+ PrintReceiverReport(rtcp_block, log_timestamp, direction); |
break; |
case webrtc::rtcp::Sdes::kPacketType: |
- PrintSdes(rtcp_block, log_timestamp, direction, media_type); |
+ PrintSdes(rtcp_block, log_timestamp, direction); |
break; |
case webrtc::rtcp::ExtendedReports::kPacketType: |
- PrintXr(rtcp_block, log_timestamp, direction, media_type); |
+ PrintXr(rtcp_block, log_timestamp, direction); |
break; |
case webrtc::rtcp::Bye::kPacketType: |
- PrintBye(rtcp_block, log_timestamp, direction, media_type); |
+ PrintBye(rtcp_block, log_timestamp, direction); |
break; |
case webrtc::rtcp::Rtpfb::kPacketType: |
- PrintRtpFeedback(rtcp_block, log_timestamp, direction, media_type); |
+ PrintRtpFeedback(rtcp_block, log_timestamp, direction); |
break; |
case webrtc::rtcp::Psfb::kPacketType: |
- PrintPsFeedback(rtcp_block, log_timestamp, direction, media_type); |
+ PrintPsFeedback(rtcp_block, log_timestamp, direction); |
break; |
default: |
break; |