webrtc-internals调试工具

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
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MT6765核心板_MTK6765安卓核心板规格参数_联发科MTK模块开发

MTK6765安卓核心板是基于联发科高效八核处理器平台开发的一款强大硬件解决方案。这款核心板的核心是采用12纳米工艺打造的MTK6765 CPU,具备四个主频高达2.3GHz的CORTEX-A53核心和四个主频为1.8GHz的CORTEX-A53核心,提供了卓越的处理性能。用户可以根据需…

Linux Shell 脚本编程基础知识篇—shell 运算命令详解

ℹ️大家好,我是练小杰,本文继续Linux shell脚本编程的基础知识内容,接着讲算术运算命令的详细操作~~ 复习:【shell简介以及基本操作】 更多Linux 相关内容请点击👉“Linux专栏”~ 文章目录 let运算命令的用法let 的高…

Nginx单向链表 ngx_list_t

目录 基本概述 数据结构 接口描述 具体实现 ngx_list_create ngx_list_init ngx_list_push 使用案例 整理自 nginx 1.9.2 源码 和 《深入理解 Nginx:模块开发与架构解析》 基本概述 Nginx 中的 ngx_list_t 是一个单向链表容器,链表中的每一个节…

KVM虚拟机管理脚本

思路: 在/opt/kvm下创建一个磁盘文件,做差异镜像,创建一个虚拟机配置文件,做虚拟机模版 [rootnode01 ~]# ls /opt/kvm/ vm_base.qcow2 vm_base.xml创建虚拟机的步骤:首先创建虚拟机的差异镜像,然后复制虚…

芯片Tapeout power signoff 之IR Drop Redhawk Ploc文件格式及其意义

数字IC后端工程师在芯片流程最后阶段都会使用redhawk或voltus进行设计的IR Drop功耗signoff分析。必须确保静态,动态ir drop都符合signoff标准。 在做redhawk ir drop分析前,我们需要提供一个redhawk ploc供电点坐标。 数字IC设计后端实现前期预防IR D…

流批一体向量化计算引擎 Flex 在蚂蚁的探索和实践

编者按:Flex是蚂蚁数据部自研的一款流批一体的向量化引擎,Flex是Fink和Velox的全称,也是Flexible的前缀,被赋予了灵活可插拔的寓意。本文将重点从向量化技术背景、Flex架构方案和未来规划三个方面展开论述。 作者介绍:…

Pytorch | 利用I-FGSSM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用I-FGSSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集I-FGSSM介绍I-FGSSM代码实现I-FGSSM算法实现攻击效果 代码汇总ifgssm.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器: Pytorch | 从零构建AlexNet对CIFAR10进行分类 Pytorch…

全面Kafka监控方案:从配置到指标

文章目录 1.1.监控配置1.2.监控工具1.3.性能指标系统相关指标GC相关指标JVM相关指标Topic相关指标Broker相关指标 1.4.性能指标说明1.5.重要指标说明 1.1.监控配置 开启JMX服务端口:kafka基本分为broker、producer、consumer三个子项,每一项的启动都需要…

HTML制作一个普通的背景换肤案例2024版

一&#xff0c;完整的代码&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>换肤</t…

《计算机组成及汇编语言原理》阅读笔记:p86-p115

《计算机组成及汇编语言原理》学习第 6 天&#xff0c;p86-p115 总结&#xff0c;总计 20 页。 一、技术总结 1.if statement 2.loop 在许多编程语言中&#xff0c;有类种循环&#xff1a;一种是在程序开头检测条件(test the condition),另一种是在程序末尾检测条件。 3.C…

CSS(三)盒子模型

目录 Content Padding Border Margin 盒子模型计算方式 使用 box-sizing 属性控制盒子模型的计算 所有的HTML元素都可以看作像下图这样一个矩形盒子&#xff1a; 这个模型包括了四个区域&#xff1a;content&#xff08;内容区域&#xff09;、padding&#xff08;内边距…

MySQL外键类型与应用场景总结:优缺点一目了然

前言&#xff1a; MySQL的外键简介&#xff1a;在 MySQL 中&#xff0c;外键 (Foreign Key) 用于建立和强制表之间的关联&#xff0c;确保数据的一致性和完整性。外键的作用主要是限制和维护引用完整性 (Referential Integrity)。 主要体现在引用操作发生变化时的处理方式&…

MySQL从入门到入土---MySQL表的约束 (内含实践)---详细版

目录 引入&#xff1a; null 与not null default&#xff1a; comment列描述 &#xff1a; not null 和 default&#xff1a; zerofill &#xff1a; 主键&#xff1a;primary key 复合主键&#xff1a; 自增长:auto_increment 唯一键&#xff1a;unique key 外键&a…

基于NodeMCU的物联网窗帘控制系统设计

最终效果 基于NodeMCU的物联网窗帘控制系统设计 项目介绍 该项目是“物联网实验室监测控制系统设计&#xff08;仿智能家居&#xff09;”项目中的“家电控制设计”中的“窗帘控制”子项目&#xff0c;最前者还包括“物联网设计”、“环境监测设计”、“门禁系统设计计”和“小…

Webpack在Vue CLI中的应用

webpack 作为目前最流行的项目打包工具&#xff0c;被广泛使用于项目的构建和开发过程中&#xff0c;其实说它是打包工具有点大材小用了&#xff0c;我个人认为它是一个集前端自动化、模块化、组件化于一体的可拓展系统&#xff0c;你可以根据自己的需要来进行一系列的配置和安…

java日志框架:slf4j、jul(java.util.logging)、 log4j、 logback

SLF4J--抽象接口 SLF4J (Simple Logging Facade for Java) 是一个为各种 Java 日志框架提供简单统一接口的库。它的主要目的是将应用程序代码与具体的日志实现解耦&#xff0c;使得在不修改应用程序代码的情况下&#xff0c;可以轻松地切换不同的日志框架。 jul-to-slft4j.ja…

命令行之巅:Linux Shell编程的至高艺术(中)

文章一览 前言一、输入/输出及重定向命令1.1 输入/输出命令1.1.1 read命令1.1.2 echo命令 1.2 输入/输出重定向1.3 重定向深入讲解1.4 Here Document1.4.1 /dev/null 文件 二、shell特殊字符和命令语法2.1 引号2.1.1 双引号2.1.2 单引号2.1.3 倒引号 2.2 注释、管道线和后台命令…

一文理解机器学习中二分类任务的评价指标 AUPRC 和 AUROC

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 在机器学习的二分类任务中&#xff0c;评估模型性能是至关重要的一步。两种常用的评价指标是 Precision-Recall Curve 下的面积 (AUPRC) 和 Receiver Operating Characteristic Curve 下的面积 (AUROC)…

Visual Studio Code(VS Code)配置C/C++环境

一、Visual Studio Code安装 Visual Studio Code&#xff0c;下文中简称为VS Code的详细安装方法请参考VSCode安装教程&#xff08;超详细&#xff09;-CSDN博客 二、MinGW编译器下载与配置 1、MinGW介绍 MinGW(Minimalist GNU for Windows)是一款用于Windows 平台的轻…

少儿编程在线培训系统:客户服务与学习支持

2.1 VUE技术 VUE它是由HTML代码&#xff0c;配上嵌入在HTML代码里面的Java代码组成的应用于服务器端的语言&#xff0c;使用VUE进行开发能够更加容易区分网页逻辑以及网页设计内容&#xff0c;让程序员开发思路更加清晰化&#xff0c;VUE在设计组件时&#xff0c;它是可以重用的…