webrtc RtcEventLog

创建RtcEventLog 数据捕获RtcEventLog接口。通过该接口可以实时捕获进出webrtc的RTP报文头数据、音视频配置参数、webrtc的探测数据

默认是的RtcEventLog是空的,如果要记录打印关于rtp报文的配置要在gn gen脚本执行的时候 开启 rtc_enable_protobuf  这里详见 src/build.gn脚本的364行可知:

    if (rtc_enable_protobuf) {
      defines += [ "ENABLE_RTC_EVENT_LOG" ]
      deps += [ "logging:rtc_event_log_proto" ]
    }  

在代码工程里是:logging\rtc_event_log\rtc_event_log.cc

// RtcEventLog member functions.
std::unique_ptr<RtcEventLog> RtcEventLog::Create(EncodingType encoding_type) {
#ifdef ENABLE_RTC_EVENT_LOG
  // TODO(eladalon): Known issue - there's a race over |rtc_event_log_count|.
  constexpr int kMaxLogCount = 5;
  int count = 1 + std::atomic_fetch_add(&rtc_event_log_count, 1);
  if (count > kMaxLogCount) {
    RTC_LOG(LS_WARNING) << "Denied creation of additional WebRTC event logs. "
                        << count - 1 << " logs open already.";
    std::atomic_fetch_sub(&rtc_event_log_count, 1);
    return CreateNull();
  }
  auto encoder = CreateEncoder(encoding_type);
  return rtc::MakeUnique<RtcEventLogImpl>(std::move(encoder));
#else
  return CreateNull();
#endif  // ENABLE_RTC_EVENT_LOG
}

std::unique_ptr<RtcEventLog> RtcEventLog::CreateNull() {
  return std::unique_ptr<RtcEventLog>(new RtcEventLogNullImpl());
}

}
  • 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

 

  使用内部调试工具,开启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文件。修改方式参考生成rtc_event_log2rtp_dump.exe,未实际用过。

  工具使用:
  1、rtc_event_log2rtp_dump.exe

  工具可以将捕获的dump文件中的RTP数据提取出来,但是提取后的数据还是以protobuf存储 

  命令行:rtc_event_log2rtp_dump test.rtp output.rtp  

  //output.rtp 就是程序启动以后抓取出来的文件

 // test.rtp 是转成protobuf存储

 2、rtp_analyze.exe

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

命令行是: rtp_analyze test.txt test/rtp

 

解析结果:

 

 

这个和wireshark抓包的内容是一样的,包含 时间戳 包大小 ssrc 

 

posted @ 2021-06-03 10:45  HappyCoder_1  阅读(378)  评论(0编辑  收藏  举报