一、简介
webrtc提供了一个实时数据捕获RtcEventLog接口。通过该接口可以实时捕获进出webrtc的RTP报文头数据、音视频配置参数、webrtc的探测数据等。详细可参考RtcEventLogImpl类定义。
void LogVideoReceiveStreamConfig(const rtclog::StreamConfig& config) override;
void LogVideoSendStreamConfig(const rtclog::StreamConfig& config) override;
void LogAudioReceiveStreamConfig(const rtclog::StreamConfig& config) override;
void LogAudioSendStreamConfig(const rtclog::StreamConfig& config) override;
void LogRtpHeader(PacketDirection direction,
const uint8_t* header,
size_t packet_length) override;
void LogRtpHeader(PacketDirection direction,
const uint8_t* header,
size_t packet_length,
int probe_cluster_id) override;
void LogRtcpPacket(PacketDirection direction,
const uint8_t* packet,
size_t length) override;
void LogAudioPlayout(uint32_t ssrc) override;
void LogLossBasedBweUpdate(int32_t bitrate_bps,
uint8_t fraction_loss,
int32_t total_packets) override;
void LogDelayBasedBweUpdate(int32_t bitrate_bps,
BandwidthUsage detector_state) override;
void LogAudioNetworkAdaptation(
const AudioEncoderRuntimeConfig& config) override;
void LogProbeClusterCreated(int id,
int bitrate_bps,
int min_probes,
int min_bytes) override;
void LogProbeResultSuccess(int id, int bitrate_bps) override;
void LogProbeResultFailure(int id,
ProbeFailureReason failure_reason) override;
二、实现
1、数据存储格式
webrtc使用protobuf协议存储这些数据,关于protobuf协议相关介绍,可以参见谷歌官网链接:
Protocol Buffers:https://developers.google.com/protocol-buffers
所以要想启动RtcEventLog数据捕获,需要在webrtc编译选项中开启rtc_enable_protobuf=true开关。
2、代码架构
rtc_event_log核心代码集中在webrtc\logging\rtc_event_log文件夹下:
- 1)数据存储接口及实现文件
rtc_event_log.cc
rtc_event_log.h
rtc_event_log.proto
rtc_event_log_factory.cc
rtc_event_log_factory.h
rtc_event_log_factory_interface.h
rtc_event_log.proto为数据存储格式接口,我们可以根据项目需要,在rtc_event_log.proto里面增加本项目私有接口。
- 2)数据解析工具实现文件
rtc_event_log2rtp_dump.cc
rtc_event_log2stats.cc
rtc_event_log2text.cc
rtc_event_log_parser.cc
rtc_event_log_parser.h
也许这个仅仅是webrtc的一个内部使用的调试工具,开启rtc_enable_protobuf=true rtc_include_tests=true后,只能生成一个rtc_event_log2rtp_dump.exe文件。可以将捕获数据中的RTP报文头信息打印出来。
要想生成rtc_event_log2stats.exe/rtc_event_log2text需要修改/src/webrtc/BUILD.gn和/src/webrtc/logging/BUILD.gn两处Makefile文件。并且该功能需要进一步优化。目前打印信息比较凌乱。
三、工具使用
要分析捕获的dump文件需要使用两个工具:
1)rtc_event_log2rtp_dump.exe
该工具可以将捕获的dump文件中的RTP数据提取出来,但是提取后的数据还是以protobuf存储,命令行是:
2)rtp_analyze.exe
该工具可以将以protobuf格式存储的RTP数据,打印成文本格式。命令行是:
3)txt格式转csv格式分析
rtp_analyze工具生成的文本文件打印如下,里面包含一些RTP报文头的基本信息。这时我们可以使用ultraedit或者Notepad的列模式,将文本文件转化为csv文件,进行数据分析。