Replace rtcp parser in rtc event log handlers.
RTCPUtility is going away. BUG=webrtc:5260 Review-Url: https://codereview.webrtc.org/2395383002 Cr-Commit-Position: refs/heads/master@{#14574}
This commit is contained in:
parent
05f3ec1356
commit
bf369fe3dd
@ -22,7 +22,16 @@
|
||||
#include "webrtc/logging/rtc_event_log/rtc_event_log_helper_thread.h"
|
||||
#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/byte_io.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/app.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/common_header.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_jitter_report.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/psfb.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/rtpfb.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sdes.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sender_report.h"
|
||||
#include "webrtc/system_wrappers/include/clock.h"
|
||||
#include "webrtc/system_wrappers/include/file_wrapper.h"
|
||||
#include "webrtc/system_wrappers/include/logging.h"
|
||||
@ -323,42 +332,34 @@ void RtcEventLogImpl::LogRtcpPacket(PacketDirection direction,
|
||||
rtcp_event->mutable_rtcp_packet()->set_incoming(direction == kIncomingPacket);
|
||||
rtcp_event->mutable_rtcp_packet()->set_type(ConvertMediaType(media_type));
|
||||
|
||||
RTCPUtility::RtcpCommonHeader header;
|
||||
rtcp::CommonHeader header;
|
||||
const uint8_t* block_begin = packet;
|
||||
const uint8_t* packet_end = packet + length;
|
||||
RTC_DCHECK(length <= IP_PACKET_SIZE);
|
||||
uint8_t buffer[IP_PACKET_SIZE];
|
||||
uint32_t buffer_length = 0;
|
||||
while (block_begin < packet_end) {
|
||||
if (!RtcpParseCommonHeader(block_begin, packet_end - block_begin,
|
||||
&header)) {
|
||||
if (!header.Parse(block_begin, packet_end - block_begin)) {
|
||||
break; // Incorrect message header.
|
||||
}
|
||||
uint32_t block_size = header.BlockSize();
|
||||
switch (header.packet_type) {
|
||||
case RTCPUtility::PT_SR:
|
||||
FALLTHROUGH();
|
||||
case RTCPUtility::PT_RR:
|
||||
FALLTHROUGH();
|
||||
case RTCPUtility::PT_BYE:
|
||||
FALLTHROUGH();
|
||||
case RTCPUtility::PT_IJ:
|
||||
FALLTHROUGH();
|
||||
case RTCPUtility::PT_RTPFB:
|
||||
FALLTHROUGH();
|
||||
case RTCPUtility::PT_PSFB:
|
||||
FALLTHROUGH();
|
||||
case RTCPUtility::PT_XR:
|
||||
const uint8_t* next_block = header.NextPacket();
|
||||
uint32_t block_size = next_block - block_begin;
|
||||
switch (header.type()) {
|
||||
case rtcp::SenderReport::kPacketType:
|
||||
case rtcp::ReceiverReport::kPacketType:
|
||||
case rtcp::Bye::kPacketType:
|
||||
case rtcp::ExtendedJitterReport::kPacketType:
|
||||
case rtcp::Rtpfb::kPacketType:
|
||||
case rtcp::Psfb::kPacketType:
|
||||
case rtcp::ExtendedReports::kPacketType:
|
||||
// We log sender reports, receiver reports, bye messages
|
||||
// inter-arrival jitter, third-party loss reports, payload-specific
|
||||
// feedback and extended reports.
|
||||
memcpy(buffer + buffer_length, block_begin, block_size);
|
||||
buffer_length += block_size;
|
||||
break;
|
||||
case RTCPUtility::PT_SDES:
|
||||
FALLTHROUGH();
|
||||
case RTCPUtility::PT_APP:
|
||||
FALLTHROUGH();
|
||||
case rtcp::Sdes::kPacketType:
|
||||
case rtcp::App::kPacketType:
|
||||
default:
|
||||
// We don't log sender descriptions, application defined messages
|
||||
// or message blocks of unknown type.
|
||||
|
||||
@ -29,7 +29,7 @@
|
||||
#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h"
|
||||
#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtp_utility.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/common_header.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h"
|
||||
#include "webrtc/video_receive_stream.h"
|
||||
#include "webrtc/video_send_stream.h"
|
||||
@ -392,35 +392,27 @@ EventLogAnalyzer::EventLogAnalyzer(const ParsedRtcEventLog& log)
|
||||
parsed_log_.GetRtcpPacket(i, &direction, &media_type, packet,
|
||||
&total_length);
|
||||
|
||||
RtpUtility::RtpHeaderParser rtp_parser(packet, total_length);
|
||||
RTPHeader parsed_header;
|
||||
RTC_CHECK(rtp_parser.ParseRtcp(&parsed_header));
|
||||
uint32_t ssrc = parsed_header.ssrc;
|
||||
|
||||
RTCPUtility::RTCPParserV2 rtcp_parser(packet, total_length, true);
|
||||
RTC_CHECK(rtcp_parser.IsValid());
|
||||
|
||||
RTCPUtility::RTCPPacketTypes packet_type = rtcp_parser.Begin();
|
||||
while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) {
|
||||
switch (packet_type) {
|
||||
case RTCPUtility::RTCPPacketTypes::kTransportFeedback: {
|
||||
// Currently feedback is logged twice, both for audio and video.
|
||||
// Only act on one of them.
|
||||
if (media_type == MediaType::VIDEO) {
|
||||
std::unique_ptr<rtcp::RtcpPacket> rtcp_packet(
|
||||
rtcp_parser.ReleaseRtcpPacket());
|
||||
// Currently feedback is logged twice, both for audio and video.
|
||||
// Only act on one of them.
|
||||
if (media_type == MediaType::VIDEO) {
|
||||
rtcp::CommonHeader header;
|
||||
const uint8_t* packet_end = packet + total_length;
|
||||
for (const uint8_t* block = packet; block < packet_end;
|
||||
block = header.NextPacket()) {
|
||||
RTC_CHECK(header.Parse(block, packet_end - block));
|
||||
if (header.type() == rtcp::TransportFeedback::kPacketType &&
|
||||
header.fmt() == rtcp::TransportFeedback::kFeedbackMessageType) {
|
||||
std::unique_ptr<rtcp::TransportFeedback> rtcp_packet(
|
||||
new rtcp::TransportFeedback());
|
||||
if (rtcp_packet->Parse(header)) {
|
||||
uint32_t ssrc = rtcp_packet->sender_ssrc();
|
||||
StreamId stream(ssrc, direction);
|
||||
uint64_t timestamp = parsed_log_.GetTimestamp(i);
|
||||
rtcp_packets_[stream].push_back(LoggedRtcpPacket(
|
||||
timestamp, kRtcpTransportFeedback, std::move(rtcp_packet)));
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
rtcp_parser.Iterate();
|
||||
packet_type = rtcp_parser.PacketType();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user