【webrtc debug tools】 rtc_event_log_to_text

一、rtc_event_log 简介

在学习分析webrtc的过程中,发现其内部提供了一个实时数据捕获接口RtcEventLog。通过该接口可以实时捕获进出webrtc的RTP报文头数据、音视频配置参数、webrtc的探测数据等。其内容实现可参考RtcEventLogImpl类的定义。其文件所在路径 logging/rtc_event_log/rtc_event_log_impl.h / cc。

在android demo中也可以发现平台层api也有rtc_event_log的对应实现RtcEventLog。其使用方式代码如下

java 复制代码
  public void start(final File outputFile) {
    if (state == RtcEventLogState.STARTED) {
      Log.e(TAG, "RtcEventLog has already started.");
      return;
    }
    final ParcelFileDescriptor fileDescriptor;
    try {
      fileDescriptor = ParcelFileDescriptor.open(outputFile,
          ParcelFileDescriptor.MODE_READ_WRITE | ParcelFileDescriptor.MODE_CREATE
              | ParcelFileDescriptor.MODE_TRUNCATE);
    } catch (IOException e) {
      Log.e(TAG, "Failed to create a new file", e);
      return;
    }

    // Passes ownership of the file to WebRTC.
    boolean success =
        peerConnection.startRtcEventLog(fileDescriptor.detachFd(), OUTPUT_FILE_MAX_BYTES);
    if (!success) {
      Log.e(TAG, "Failed to start RTC event log.");
      return;
    }
    state = RtcEventLogState.STARTED;
    Log.d(TAG, "RtcEventLog started.");
  }

然而你在打开写入的log文件后,你会发现一通乱码无法阅读,那是因为webrtc内部使用protobuf协议,以二进制的格式存储这批数据。那怎么办?此时我们需要借助webrtc系统自带的工具。

二、rtc_event tools

webrtc以源码的方式提供了一系列自带的工具,其中就有 rtc_event_log_to_text 和 event_log_visualizer,我们需要先自己编译构建出来,编译前置条件请参考 探讨如何在AS上构建webrtc(1)再谈webrtc的下载&编译

bash 复制代码
gn gen out/tools --verbose \
--args='rtc_include_tests=true rtc_build_examples=false rtc_build_tools=true rtc_enable_protobuf=true treat_warnings_as_errors=false ' \
--extra-gn-switches='-v'

ninja -C out/tools

编译指令如上,必须设置rtc_include_tests=true、rtc_enable_protobuf=true这两项。等构建完成后就可以在out/tools目录下找到rtc_event_log_to_text等一系列工具。之后使用命令把proto格式的log文件,转化成可以人类可阅读的txt文本。

bash 复制代码
tools/rtc_event_log_to_text   event_log_20250221_0945_37.log     event_log_0945_totext.txt

内容格式大致如下:

还可以使用如下指令工具 event_log_visualizer 将事件日志转换成简易的图表。(需要依赖python3 pyplotlib)

bash 复制代码
tools/event_log_visualizer    event_log_20250221_0945_37.log  | python3

三、启用消息日志

但对于初学者来说,事件日志可能难于捡取到有用的信息,常用的自定义打印跟踪日志更易于使用。那么如何开启?

对于Android平台为例,我们在全局配置PeerConnectionFactory的时候,可以向webrtc注入logger,这样就可以捕获到webrtc运行时的消息日志了。

java 复制代码
PeerConnectionFactory.InitializationOptions initializationOptions = PeerConnectionFactory
        .InitializationOptions.builder(ApplicaitonContext())
        .setEnableInternalTracer(true) //启用内部跟踪器。内部跟踪器用于WebRTC组件的调试和性能分析
        .setInjectableLogger(new MyInjectableLogger(), Logging.Severity.LS_INFO) //设置可注入的日志记录器
        .createInitializationOptions();

PeerConnectionFactory.initialize(initializationOptions);




public class MyInjectableLogger implements Loggable {

    @Override
    public void onLogMessage(String msg, Logging.Severity severity, String tag) { }
}

That's it。欢迎补充。

相关推荐
O。O蛋黄酥啊3 天前
实时语音 Agent 开发完全指南:从 ASR/TTS 到 WebRTC/VAD 的链路拆解
大模型·webrtc·语音识别·tts·asr
海水冷却4 天前
WebRTC 视频通话:从裸写信令到 30 分钟上线
音视频·webrtc
PiaoKe___4 天前
云手机底层架构与工程实践:从 KVM/容器到 WebRTC 串流
智能手机·架构·webrtc
znnnk4 天前
【网络优化】减少B站直播卡顿的上行占用:AdGuard nowebrtc规则 / WebRTC Control 实测
服务器·网络·webrtc·直播·bilibili·adguard
平行云PVT4 天前
国产信创实时云渲染解决方案:如何实现数字孪生与三维应用云化部署?
unity·webrtc·unreal engine·实时云渲染·国产信创·摩尔线程·砺算科技
福大大架构师每日一题6 天前
mediamtx v1.21.2发布:UDP、JWT、RTSP、RTMP、HLS、WebRTC全面修复,稳定性与安全性再提升
网络协议·udp·webrtc
草根大哥8 天前
08-横向扩容与突发高并发:加机器到底买到了什么
运维·webrtc·srt·横向扩容·whip·自建cdn
草根大哥8 天前
07-P2P 直连与节点池调度
webrtc·p2p·srt·whip·whep·自建cdn
草根大哥8 天前
06-可观测性:端到端延迟、稳定性与画质
webrtc·srt·whip·自建cdn·ppcdn
大文说跨境8 天前
用 Python 自动化检测浏览器环境指纹:WebRTC 泄露、Canvas 哈希与时区一致性校验
python·自动化·webrtc