webrtc维护方法二(RtcEventLog数据捕获及解析)

一、简介

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文件夹下:

webrtc维护方法二(RtcEventLog数据捕获及解析)

  • 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存储,命令行是:

webrtc维护方法二(RtcEventLog数据捕获及解析)

 

2)rtp_analyze.exe

该工具可以将以protobuf格式存储的RTP数据,打印成文本格式。命令行是:

webrtc维护方法二(RtcEventLog数据捕获及解析)

3)txt格式转csv格式分析

rtp_analyze工具生成的文本文件打印如下,里面包含一些RTP报文头的基本信息。这时我们可以使用ultraedit或者Notepad的列模式,将文本文件转化为csv文件,进行数据分析。

webrtc维护方法二(RtcEventLog数据捕获及解析)

 

 

上一篇:webrtc远程控制环境搭建


下一篇:webrtc的codec 视频参数