webrtc-internals调试工具

news2024/12/28 5:06:29

Google 的 Chrome(87 或更高版本)WebRTC 内部工具是一套内置于 Chrome 浏览器中的调试工具;
webrtc-internals 能够查看有关视频和音频轨道、使用的编解码器以及流的一般质量的详细信息。这些知识对于解决音频和视频质量差的问题非常有帮助。
webrtc-internals 还提供有关 WebRTC 调用中使用的网络配置的详细信息,例如 STUN/ TURN服务器和 ICE 候选者。

getUserMedia/getDisplayMedia

  • 调用地址
  • 调用时间
  • 媒体约束
    在这里插入图片描述

RTCPeerConnection 监控信息

在这里插入图片描述

Event

创建一个本地描述
createOffer => createOfferOnSuccess
存入本地描述
setLocalDescription => setLocalDescriptionOnSuccess
存入远端描述
setRemoteDescription => setRemoteDescriptionOnSuccess
添加轨道
transceiverAdded
多个ICE候选通过信令传传输给远程端,以便远程端可以选择最佳的路径来建立点对点(P2P)连接
icecandidate
主要用于在NAT(网络地址转换)和防火墙后面建立端到端的连接

{
// 表示这个候选与哪个媒体流(audio或video)
sdpMid: 0, 
// 表示这个候选在SDP的m-line中的索引位置
sdpMLineIndex: 0
// 候选字符串,包含了候选的类型、优先级、IP地址、端口号等信息
candidate: candidate:3111111111 1 udp 41111111 11.11.11.11 64434 typ relay raddr 0.0.0.0 rport 0 generation 0 ufrag xdAn network-id 3
url: turn:111.111.11.11:1111?transport=udp, relayProtocol: udp
}

iceconnectionstatechange
ICE的连接状态发生变化
MDN_iceconnectionstatechange
MDN_iceConnectionState

  • new: ICE 代理正在收集地址或等待通过调用,或两者)获得远程候选地址
  • checking:ICE 代理已获得一个或多个远程候选,并正在检查本地和远程候选对以尝试找到兼容的匹配,但尚未找到允许建立对等连接的对。候选的收集可能仍在进行中
  • connected:已为连接的所有组件找到可用的本地和远程候选配对,并且已建立连接。收集可能仍在进行中,ICE 代理也可能仍在相互检查候选以寻找更好的连接。
  • completed:ICE 代理已完成候选者的收集,已检查所有对,并已找到所有组件的连接
  • failed:ICE 候选已检查所有候选对,但未能为连接的所有组件找到兼容的匹配项。但是,ICE 代理可能确实为某些组件找到了兼容的连接。
  • disconnected: 检查以确保组件仍处于连接状态 至少一个组件失败RTCPeerConnection。此测试比 和 的测试要求低failed,可能会间歇性触发,并在可靠性较低的网络上或临时断开连接时自动解决。当问题解决后,连接可能会恢复到 状态connected。
  • closed: 该 ICE 代理RTCPeerConnection已关闭并且不再处理请求。

connectionstatechange
PeerConnection的连接状态发生变化
MDN_connectionstatechange
connectionState

  • new: 该连接的ICE传输(RTCIceTransport或对象)中至少RTCDtlsTransport有一个处于该new状态,并且它们都不处于以下状态之一:connecting、checking、failed、disconnected,或者该连接的所有传输都处于该closed状态
  • connecting: 一个或多个ICE传输当前正在建立连接;也就是说,它们iceConnectionState是checking或connected,并且没有传输处于 该failed状态
  • connected: 连接使用的每个ICEconnected传输要么处于正在使用状态(状态或completed),要么处于关闭状态(状态closed);此外,至少一个传输是connected或completed
  • disconnected: 连接的ICE传输中至少有一个处于该disconnected状态,且其他传输均不处于以下状态:failed、connecting或checking
  • failed: 连接上的一个或多个ICEfailed传输处于该状态
  • closed: RTCPeerConnection已关闭

tabls

outbound-rtp(kind=audio)
// 编码器
[codec]	opus (111, minptime=10;useinbandfec=1)
// 发送总数据包
packetsSent	1009767
// 每秒发送数据包数量
[packetsSent/s]   50.41123456789
// 发送总字节数量
bytesSent     749670966
// 每秒发送字节数量比特数
[bytesSent_in_bits/s]  28291.412345789
// 每秒头部字节总数
headerBytesSent   28386787
// 每秒发送头部字节比特数
[headerBytesSent_in_bits/s]   11206.52334411
// 比特率为32,000 bps(比特每秒),即32 kbps
targetBitrate 32000
outbound-rtp(kind=video)
// 表示使用的编码器是H.264
[codec]	H264 (102, level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f)
// 发送的总数据包数量为616,516个
packetsSent	616516	
// 每秒发送的数据包数量,约为30.66个
[packetsSent/s]	30.664317713909526
// 发送的总字节数为179,434,429字节
bytesSent	179434429	
// 每秒发送的字节数转换为比特数,约为71,568.30 kbps
[bytesSent_in_bits/s]	71568.30001423245
// 发送的头部字节总数为14,852,818字节
headerBytesSent	14852818	
// 每秒发送的头部字节数转换为比特数,约为5,726.59 kbps。
[headerBytesSent_in_bits/s]	5726.59106771328
// 目标比特率为354,830 bps,即354.83 kbps
targetBitrate	354830	
// 编码的总帧数为617,019帧
framesEncoded	617019	
// 每秒编码的帧数,约为28.19帧
[framesEncoded/s]	28.191334587700172
// 编码的关键帧(I帧)数量为215帧	
keyFramesEncoded	215	
// 总编码时间为4781.073秒
totalEncodeTime	4781.073	
// 每帧编码所需的平均时间,约为11.46毫秒。
[totalEncodeTime/framesEncoded_in_ms]	11.464285714282596
// 帧的宽度为1280像素
frameWidth	1280	
// 帧的高度为720像素
frameHeight	720
// 帧率为每秒29帧	
framesPerSecond	29	
// 发送的总帧数为617,405帧
framesSent	617405	
// 每秒发送的帧数,约为29.97帧
[framesSent/s]	29.96823367234663
// 发送的大帧数为32帧	
hugeFramesSent	32
// 总的数据包发送延迟为67.48513秒
totalPacketSendDelay	67.48513
// 质量限制持续时间,包括由于带宽限制、CPU限制、无限制和其他原因导致的持续时间
qualityLimitationDurations	{"bandwidth":26.155,"cpu":0,"none":20703.08,"other":0}
// 编码器的实现是OpenH264
encoderImplementation	OpenH264
// 编码质量
qpSum		7521625
inbound-rtp(kind=audio)下行音频
// 接收到的总数据包数量为1,096,329个
packetsReceived	1096329	
// 每秒接收的数据包数量,约为50.28个
[packetsReceived/s]	50.27808810525396
// 接收的总字节数为81,050,273字节
bytesReceived	81050273
// 每秒接收的字节数转换为比特数,约为32,726.79 kbps	
[bytesReceived_in_bits/s]	32726.78658970012	
// 接收的头部字节总数为26,331,120字节
headerBytesReceived	26331120	
// 每秒接收的头部字节数转换为比特数,约为9,696.83 kbps
[headerBytesReceived_in_bits/s]	9696.825656207442
// 最后一个数据包接收的时间戳	
lastPacketReceivedTimestamp	1735197274039.8062
// 最后一个数据包接收的日期和时间	
[lastPacketReceivedTimestamp]	2024/12/26 15:14:34
// 抖动缓冲区的延迟总和	
jitterBufferDelay	56962627.2
// 抖动缓冲区的延迟平均值(以毫秒为单位)	
[jitterBufferDelay/jitterBufferEmittedCount_in_ms]	77.05882352950306
// 目标抖动缓冲区延迟	
jitterBufferTargetDelay	48588288
// 抖动缓冲区延迟与发出计数的比例(以毫秒为单位)
[jitterBufferDelay/jitterBufferEmittedCount_in_ms]	78.4000000000621	
// 另一个目标抖动缓冲区延迟值
jitterBufferTargetDelay	48628550.4	
// 抖动缓冲区的最小延迟
[jitterBufferTargetDelay/jitterBufferEmittedCount_in_ms]	60	
// 从抖动缓冲区发出的总样本数
jitterBufferMinimumDelay	48628550.4	
// 接收到的总样本数
[jitterBufferMinimumDelay/jitterBufferEmittedCount_in_ms]	60	
// 每秒接收的样本数
jitterBufferEmittedCount	1053912000
// 隐藏的样本数,通常是指由于丢包等原因导致的数据不连续,需要通过算法进行填补	
totalSamplesReceived	1055685600	
// 音频级别
[totalSamplesReceived/s]	48042.709969289725
// 总音频能量	
concealedSamples	1854928
// 音频级别的均方根值
audioLevel	0.1988891262550737	
// 样本的总持续时间
totalAudioEnergy	300.06916838604377	
// 总处理延迟
[Audio_Level_in_RMS]	0.14892546098156428	
// 处理延迟与发出计数的比例(以毫秒为单位)
totalSamplesDuration	22018.689999409253	
// 抖动缓冲区的冲洗次数
totalProcessingDelay	52478673.56832	
// 延迟的数据包中断样本数
[totalProcessingDelay/jitterBufferEmittedCount_in_ms]	70.40555102031576
// 相对数据包到达延迟	
jitterBufferFlushes	1	
// 延迟的数据包中断样本数
delayedPacketOutageSamples	152219	
// 相对数据包到达延迟
relativePacketArrivalDelay	8356.16	
// 中断次数
interruptionCount	0	
// 总中断持续时间
totalInterruptionDuration	0
inbound-rtp(kind=video)下行视频
// 使用的编码器是H.264
[codec]	H264 (102, level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f)	
// 网络抖动,表示接收数据包的时间变化,单位通常是秒
jitter	0.008	
// 丢失的数据包数量为6,294个
packetsLost	6294	
// 接收到的总数据包数量为3,361,657个
packetsReceived	3361657	
// 每秒接收的数据包数量,约为160.88个
[packetsReceived/s]	160.87532063312926	
// 接收的总字节数为3,590,296,459字节
bytesReceived	3590296459	
// 每秒接收的字节数转换为比特数,约为1,387,428.49 kbps。
[bytesReceived_in_bits/s]	1387428.4874414976
// 接收的头部字节总数为94,131,424字节	
headerBytesReceived	94131424
// 每秒接收的头部字节数转换为比特数,约为36,036.07 kbps	
[headerBytesReceived_in_bits/s]	36036.07182182096
// 接收到的重传数据包数量为29,195个	
retransmittedPacketsReceived	29195	
// 每秒接收的重传数据包数量,约为4.97个
[retransmittedPacketsReceived/s]	4.965287673862014
// 接收到的重传字节总数为31,110,354字节	
retransmittedBytesReceived	31110354
// 每秒接收的重传字节数转换为比特数,约为43,615.09 kbps	
[retransmittedBytesReceived_in_bits/s]	43615.086927203934
// 重传流的同步源标识符	
rtxSsrc	2171748361	
// 最后一个数据包接收的时间戳
lastPacketReceivedTimestamp	1735197797031.065
// 最后一个数据包接收的日期和时间
[lastPacketReceivedTimestamp]	2024/12/26 15:23:17	
// 抖动缓冲区的延迟
jitterBufferDelay	11971.191576	
// 抖动缓冲区的延迟平均值
[jitterBufferDelay/jitterBufferEmittedCount_in_ms]	24.631333333309158
// 目标抖动缓冲区延迟	
jitterBufferTargetDelay	15834.935496	
[jitterBufferTargetDelay/jitterBufferEmittedCount_in_ms]	29.960066666717466	
// 目标抖动缓冲区延迟
jitterBufferMinimumDelay	15834.935496
// 每秒接收的帧数,约为29.79帧
[jitterBufferMinimumDelay/jitterBufferEmittedCount_in_ms]	29.960066666717466
// 从抖动缓冲区发出的总样本数
jitterBufferEmittedCount	668493	
// 接收到的总帧数为668,469帧
framesReceived	668469	
// 每秒接收的帧数,约为29.79帧
[framesReceived/s]	29.791726043172087	
// 接收帧数减去解码帧数再减去丢弃帧数的差值为-24
[framesReceived-framesDecoded-framesDropped]	-24
// 帧的宽度为1280像素	
frameWidth	1280	
// 帧的高度为720像素
frameHeight	720	
// 帧率为每秒30帧
framesPerSecond	30
// 解码的总帧数为668,469帧	
framesDecoded	668469	
// 每秒解码的帧数,约为29.79帧
[framesDecoded/s]	29.791726043172087
// 解码的关键帧(I帧)数量为229帧	
keyFramesDecoded	229	
[keyFramesDecoded/s]	0
// 丢弃的帧数为24帧	
framesDropped	24	
// 总解码时间为870.105921秒
totalDecodeTime	870.105921
// 每帧解码所需的平均时间,约为2.41毫秒	
[totalDecodeTime/framesDecoded_in_ms]	2.412299999999353
// 总处理延迟	
totalProcessingDelay	12952.590836	
// 总组装时间为821.873153秒
[totalProcessingDelay/jitterBufferEmittedCount_in_ms]	27.191133333326434
// 这表示总组装时间,单位是秒	
totalAssemblyTime 	821.873153
// 每帧在组装过程中平均花费的时间	
[totalAssemblyTime/framesAssembledFromMultiplePackets_in_ms] 	1.539100000002236
// 从多个数据包中组装的帧数为668,004帧	
framesAssembledFromMultiplePackets	668004	
// 总帧间延迟
totalInterFrameDelay	22503.407	
[totalInterFrameDelay/framesDecoded_in_ms]	33.36666666667345
// 总平方帧间延迟	
totalSquaredInterFrameDelay	848.3095429981339
// 帧间延迟的标准差(以毫秒为单位)	
[interFrameDelayStDev_in_ms]	9.046116416493547
// 暂停次数为0	
pauseCount	0	
// 总暂停持续时间为0秒
totalPausesDuration	0	
// 冻结次数为126次
freezeCount	126	
// 总冻结持续时间为34.267秒
totalFreezesDuration	34.267	
// 用的解码器实现是外部解码器(D3D11VideoDecoder)
decoderImplementation	ExternalDecoder (D3D11VideoDecoder)	
// 全帧引用请求(Full Intra Request)的次数为0
firCount	0	
// 画面质量指示(Picture Loss Indication)的次数为2
pliCount	2	
// 负确认(Negative Acknowledgement)的次数为3,782
nackCount	3782
// 启用了能效解码器
powerEfficientDecoder	true	
// 最小播放延迟为0秒
minPlayoutDelay	0
拉流黑屏可以结合发送端和接收端去看

Stats graphs for outbound-rtp (kind=video)是否发送了数据
在这里插入图片描述

Stats graphs for inbound-rtp (kind=video)图看是否接受到数据
在这里插入图片描述

拉流没声音

Stats graphs for inbound-rtp (kind=audio)是否接受到数据
在这里插入图片描述
说话时audioLevel在0.01以上关闭麦克的话再0.001一下到接近于0
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2266752.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Webpack构建微前端应用

英文社区对 Webpack Module Federation 的响应非常热烈,甚至被誉为“A game-changer in JavaScript architecture”,相对而言国内对此热度并不高,这一方面是因为 MF 强依赖于 Webpack5,升级成本有点高;另一方面是国内已…

[bug]java导出csv用Microsoft Office Excel打开乱码解决

[bug]java导出csv用Microsoft Office Excel打开乱码 ‍ 现象 首先这个csv文件用macbook自带的 "Numbers表格" 软件打开是不乱码的, 但是使用者是Windows系统,他的电脑没有"Numbers表格"工具, ​​ 他用Microsoft Office Excel打开之后出现乱码,如下图…

关于分布式数据库需要了解的相关知识!!!

成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于关于分布式数据库方面的相关内容&a…

tortoisegit推送失败

tortoisegit推送失败 git.exe push --progress -- "origin" testLidar:testLidar /usr/bin/bash: gitgithub.com: No such file or directory fatal: Could not read from remote repository. Please make sure you have the correct access rights and the reposit…

moviepy将图片序列制作成视频并加载字幕 - python 实现

DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 需要更多数据资源和技术解决方案,知识星球: “DataBall - X 数据球(free)” -------------------------------------------------------------…

清空DNS 缓存

如果遇到修改了host文件,但是IP和域名的映射有问题的情况,可以尝试刷新DNS缓存。 ipconfig/flushdns win建加R建,然后输入cmd,然后回车 然后回车,或者点击确定按钮。 出现如下所示标识清空DNS 缓存成功。

2024最新鸿蒙开发面试题合集(二)-HarmonyOS NEXT Release(API 12 Release)

上一篇面试题链接:https://mp.csdn.net/mp_blog/creation/editor/144685078 1. 鸿蒙简单介绍和发展历程 HarmonyOS 是新一代的智能终端操作系统,为不同设备的智能化、互联与协同提供了统一的语言。带来简洁,流畅,连续&#xff0…

Yocto 项目 - 共享状态缓存 (Shared State Cache) 机制

引言 在嵌入式开发中,构建效率直接影响项目的开发进度和质量。Yocto 项目通过其核心工具 BitBake 提供了灵活而强大的构建能力。然而,OpenEmbedded 构建系统的传统设计是从头开始构建所有内容(Build from Scratch),这…

idea 8年使用整理

文章目录 前言idea 8年使用整理1. 覆盖application配置2. 启动的时候设置编辑空间大小,并忽略最大空间3. 查询类的关系4. 查看这个方法的引用关系5. 查看方法的调用关系5.1. 查看被调用关系5.2. 查看调用关系 6. 方法分隔线7. 选择快捷键类型8. 代码预览插件9. JReb…

04软件测试需求分析案例-用户登录

通读文档,提取信息,提出问题,整理为需求。 从需求规格说明、设计说明、配置说明等文档获取原始需求,通读原始需求,分析有哪些功能,每种功能要完成什么业务,业务该如何实现,业务逻辑…

【MySQL】踩坑笔记——保存带有换行符等特殊字符的数据,需要进行转义保存

问题描述 从DBeaver中导出了部分业务数据的 insert sql,明明在开发、测试环境都可以一把执行通过,却在预发环境执行前的语法检查失败了,提示有SQL语法错误。 这条SQL长这样,default_sql是要在odps上执行的sql语句,提…

windos挂载目录到linux

验证环境麒麟V10 1: 在windows任意目录设置共享文件夹 2:记住网络路径\LAPTOP-86JV6NT1\gantie13_sdk 在linux中替换为本机ip级相对路径 比如本级ip是192.168.23.23,linux环境需要ping通本地地址 3: sudo apt-get install cifs-utils sud…

springboot494基于java的综合小区管理系统(论文+源码)_kaic

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统综合小区管理系统信息管理难度大,容错率低&am…

数据分析篇001

目录 一、数据是什么? 二、数据能做什么? 三、数据应用四步骤 第一步---搭建数据体系 第二步---积累数据资产 第三步---完成数据分析 第四步---实现数据应用 四、数据的三种性质 变异性 规律性(以正态分布为例) 客观性…

ModbusTCP从站转Profinet主站案例

一. 案例背景 在复杂的工业自动化场景中,企业常常会采用不同品牌的设备来构建生产系统。西门子SINAMICS G120变频器以其高性能、高精度的速度和转矩控制功能,在电机驱动领域应用广泛。施耐德M580可编程逻辑控制器则以强大的逻辑控制和数据处理能力著称&…

flask后端开发(8):Flask连接MySQL数据库+ORM增删改查

目录 数据库初始化数据库连接创建数据库表添加用户查询用户更新用户删除 在Flask中,很少会使用pymysql直接写原生SQL语句去操作数据库,更多的是通过SQLAichemy提供的ORM技术,类似于操作普通Python对象一样实现数据库的增删改查操作&#xff0…

【社区投稿】自动特征auto trait的扩散规则

自动特征auto trait的扩散规则 公式化地概括,auto trait marker trait derived trait。其中,等号右侧的marker与derived是在Rustonomicon书中的引入的概念,鲜见于Rust References。所以,若略感生僻,不奇怪。 marker …

【Go】context标准库

文章目录 1. 概述1.1 什么是 Context1.2 设计原理1.3 使用场景1.4 Context 分类核心:Context接口2. 源码解读4个实现emptyCtxTODO 和 BackgroundcancelCtxWithCancelcancelCtx.propagateCancel 构建父子关联parentCancelCtx 获取父上下文中的内嵌cancelCtxcanceltimerCtxWithT…

【视觉惯性SLAM:四、相机成像模型】

相机成像模型介绍 相机成像模型是计算机视觉和图像处理中的核心内容,它描述了真实三维世界如何通过相机映射到二维图像平面。相机成像模型通常包括针孔相机的基本成像原理、数学模型,以及在实际应用中如何处理相机的各种畸变现象。 一、针孔相机成像原…

CAPL_构建基于UDS的刷写学习—04 思路的构建_第一部分

前言与导读: 基于前几篇文章我们已经梳理了HEX文件、S19文件的读取和UDS关键的0x34/0x36/0x37等服务的结构。 基于此,我们差不多就完成了前期的知识储备了,那么完成最终的目的——使用capl实现我们还需要解决以下几个问题。 1、文件如何读…