【webrtc debug tools】 rtc_event_log_to_text

server/2025/3/15 4:04:03/

一、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。其使用方式代码如下

  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的下载&编译

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文本。

tools/rtc_event_log_to_text   event_log_20250221_0945_37.log     event_log_0945_totext.txt

内容格式大致如下:

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

tools/event_log_visualizer    event_log_20250221_0945_37.log  | python3

三、启用消息日志

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

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

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 {@Overridepublic void onLogMessage(String msg, Logging.Severity severity, String tag) { }
}

That‘s it。欢迎补充。


http://www.ppmy.cn/server/175054.html

相关文章

ArcGIS水文水资源水环境应用实战:从入门到精通!ArcGIS水文分析及流域特征提取;湖泊水库水环境监测及评价;河道水污染预测与水环境容量计算等

随着水资源日益紧缺和水环境问题日益突出,水文水资源领域面临着前所未有的挑战。ArcGIS 作为强大的地理信息系统平台,凭借其强大的空间分析、数据管理和可视化能力,在水文水资源领域发挥着越来越重要的作用。本文将结合最新技术,探…

TCP网络协议

TCP粘包 1. TCP在接收数据时,多包数据粘在了一起 2. 原因: 1. TCP发送数据时,没有及时发走,会根据缓冲区数据的情况进行重新组包; 2. TCP接收方,没有及时读走缓冲区数据,导致缓冲区大量数…

C#中继承的核心定义‌

1. 继承的核心定义‌ ‌继承‌ 是面向对象编程(OOP)的核心特性之一,允许一个类(称为‌子类/派生类‌)基于另一个类(称为‌父类/基类‌)构建,自动获得父类的成员(字段、属…

基于SpringBoot的医院管理系统(源码+论文+部署教程)

运行环境 医院管理系统运行环境如下: • 前端:Vue • 后端:Java • IDE工具:IntelliJ IDEA(可自行更换) • 技术栈:SpringBoot Vue MySQL 主要功能 医院管理系统主要包医院含前台界面和…

服务端渲染(SSR)

服务端渲染(Server-Side Rendering,SSR)是一种将网页内容在服务器端生成并发送到客户端的技术。与传统的客户端渲染(Client-Side Rendering,CSR)相比,SSR 在性能、SEO 和用户体验方面具有显著优…

接口测试工具:postman详解

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 Postman 是一款功能强大的 API 开发和测试工具,以下是一些高级用法的详细介绍和操作步骤。 一、环境和全局变量 环境变量允许你设置特定于环境&#…

5.1 程序调试

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的 本节中为了演示方便,使用的代码如下: 【例 5.1】【项目:code5-001】程序的调试。 static void Ma…

鸿蒙开发者社区资源的重要性

鸿蒙系统,作为华为公司自主研发的操作系统,旨在为各类智能设备提供统一的平台。它不仅支持手机、平板电脑等移动设备,还涵盖了物联网(IoT)设备和其他智能家居产品。鸿蒙系统的开发环境和工具链对于开发者来说至关重要&…