Webrtc Statistics Dictionary
标签: 了解
Webrtc Statistics Dictionary:
enum RTCStatsType {
"codec", // RTCPeerConnection流当前正在使用的编解码器
"inbound-rtp", // 收到的RTP流统计信息
"outbound-rtp", // 发送的RTP流统计信息
"remote-inbound-rtp", // 对端收到的RTP流统计信息
"remote-outbound-rtp", // 对端发送的RTP流统计信息
"media-source", // 发送到编码器的媒体信息
"csrc", // RTP流CSRC
"peer-connection", // RTCPeerConnection对象相关的统计信息
"data-channel", // RTCDataChannel 相关的统计信息
"stream", // 媒体轨道统计信息包含与特定MediaStream相关的统计信息
"track", // 媒体轨道统计信息
"transceiver", // RTCRtpTransceiver
"sender", // 媒体级指标相关的统计信息
"receiver", // 特定接收器相关的统计数据和相应的媒体级指标
"transport", // 媒体传输统计信息
"sctp-transport", // RTCSctpTransport 对象相关的 SCTP 传输统计信息
"candidate-pair", // ICE候选对统计信息
"local-candidate", // ICE 本地候选统计信息
"remote-candidate", // ICE 远程候选统计信息
"certificate", // RTCIceTransport 使用的证书的信息
"ice-server" // 有关与ICE服务器的连接的信息
};
RTCStatsType Dictionary
"codec" RTCStats
RTCCodecStats
"inbound-rtp" RTCStats
RTCRtpStreamStats
RTCReceivedRtpStreamStats
RTCInboundRtpStreamStats
"outbound-rtp" RTCStats
RTCRtpStreamStats
RTCSentRtpStreamStats
RTCOutboundRtpStreamStats
"remote-inbound-rtp" RTCStats
RTCRtpStreamStats
RTCReceivedRtpStreamStats
RTCRemoteInboundRtpStreamStats
"remote-outbound-rtp" RTCStats
RTCRtpStreamStats
RTCSentRtpStreamStats
RTCRemoteOutboundRtpStreamStats
"media-source" RTCStats
RTCMediaSourceStats
RTCAudioSourceStats
RTCVideoSourceStats
"csrc" RTCStats
RTCRtpContributingSourceStats
"peer-connection" RTCStats
RTCPeerConnectionStats
"data-channel" RTCStats
RTCDataChannelStats
"transceiver" RTCStats
RTCRtpTransceiverStats
"sender" RTCStats
RTCMediaHandlerStats
RTCAudioSenderStats
RTCVideoSenderStats
"receiver" RTCStats
RTCMediaHandlerStats
"transport" RTCStats
RTCTransportStats
"sctp-transport" RTCStats
RTCSctpTransportStats
"candidate-pair" RTCStats
RTCIceCandidatePairStats
"local-candidate" RTCStats
RTCIceCandidateStats
"remote-candidate" RTCStats
RTCIceCandidateStats
"certificate" RTCStats
RTCCertificateStats
"ice-server" RTCStats
RTCIceServerStats
TCRtpStreamStats:适用于任何 RTP 流任何端的统计信息 RTCReceivedRtpStreamStats:在 RTP 流的接收端测量的统计数据,已知是因为它们在本地测量或通过 RTCP 接收器报告 (RR) 或扩展报告 (XR) 块传输。 RTCInboundRtpStreamStats:只能在 RTP 流的本地接收端测量的统计信息。 RTCRemoteInboundRtpStreamStats:与 RTP 流的远程接收端相关的统计信息 - 通常通过将本地数据与通过 RTCP RR 或 XR 块接收的数据相结合来计算。 RTCSentRtpStreamStats:在 RTP 流的发送端测量的统计数据,已知是因为它们是在本地测量的,或者因为它们是通过 RTCP 接收的,通常在 RTCP 发送者报告 (SR) 中 RTCOutboundRtpStreamStats:本地测量的统计数据。 RTCRemoteOutboundRtpStreamStats:与 RTP 流的远程发送端相关的统计信息,通常基于 RTCP SR 计算
dictionary RTCRtpStreamStats : RTCStats {
required unsigned long ssrc; // 同步源标识符,每个[RFC3550]的无符号整数值
required DOMString kind; // “音频”或“视频, 匹配”MediaStreamTrack的kind属性
DOMString transportId; // 唯一标识符与此RTP流相关联的RTCTransportStats
DOMString codecId; // 唯一标识符与RTP流关联的RTCCodecStats的对象相关联
};
enum RTCCodecType {
"encode",
"decode",
};
dictionary RTCCodecStats : RTCStats {
required unsigned long ; // RTP编码或解码中使用的有效载荷类型
RTCCodecType codecType; // 编码或解码 取决于此对象是否表示实现准备进行编码或解码的媒体格式
// 如果字典成员不存在,则意味着该媒体格式既可以编码也可以解码
required DOMString transportId; // 使用此编解码器的传输的唯一标识符,可用于查找相应的RTCTransportStats对象
required DOMString mimeType; // 编解码器MIME媒体类型/子类型。 例如:video/vp8或等效文件
unsigned long clockRate; // 媒体采样率
unsigned long channels; // 通道数,立体声使用2,其他大多数情况下都没有
DOMString sdpFmtpLine; // SDP中的a=fmtp行对应于编解码器,即在PT后面的冒号之后。 这由第 5.7 节中的 [JSEP] 定义。
};
dictionary RTCReceivedRtpStreamStats : RTCRtpStreamStats {
unsigned long long packetsReceived; // SSRC接收的RTP数据包总数
long long packetsLost; // SSRC丢失的RTP数据包总数
double jitter; // SSRC数据包抖动,以秒为单位测量
unsigned long long packetsDiscarded; // 由于迟到或早到而被抖动缓冲区丢弃的RTP数据包的累积数量
unsigned long long packetsRepaired; // 应用错误恢复机制 [XRBLOCK-STATS]后修复的丢失RTP数据包的累积数量
unsigned long long burstPacketsLost; // 丢失突发期间丢失的RTP数据包的累积数量
unsigned long long burstPacketsDiscarded; // 在丢弃突发期间丢弃的RTP数据包的累积数量
unsigned long burstLossCount; // 丢失RTP数据包的累积突发数
unsigned long burstDiscardCount; // 丢弃的RTP数据包的累积突发数
double burstLossRate; // 突发期间丢失的RTP数据包占突发中预期的RTP数据包总数的比例
double burstDiscardRate; // 突发期间丢弃的RTP数据包占突发中预期的RTP数据包总数的比例
double gapLossRate; // 在间隙期间丢失的 RTP 数据包的比例
double gapDiscardRate; // 在间隙期间丢弃的 RTP 数据包的比例
unsigned long framesDropped; // 只存在于视频,在解码之前丢弃或丢弃的帧总数
unsigned long partialFramesLost; // 只存在于视频,丢失的部分帧的累积数量
unsigned long fullFramesLost; // 只存在于视频,丢失的完整帧的累积数量
};
dictionary RTCInboundRtpStreamStats : RTCReceivedRtpStreamStats { // RTP 媒体流的测量指标
required DOMString receiverId; // 查找接收此流的RTCAudioReceiverStats或RTCVideoReceiverStats 对象的统计ID
DOMString remoteId; // 用于查找同一 SSRC 的远程 RTCRemoteOutboundRtpStreamStats 对象
unsigned long framesDecoded; // RTP 流正确解码的帧总数,即如果没有丢帧将显示的帧数。
unsigned long keyFramesDecoded; // 只存在于视频。 它表示关键帧的总数
unsigned long frameWidth; // 只存在于视频。 表示最后解码帧的宽度
unsigned long frameHeight; // 只存在于视频。 表示最后解码帧的高度
unsigned long frameBitDepth; // 只存在于视频。 表示最后一个编码帧的每个像素的位深度。典型值为 24、30 或 36 位
double framesPerSecond; // 只存在于视频。 最后一秒的编码帧数。这可能低于媒体源帧速率
unsigned long long qpSum; // 只存在于视频。 此接收器解码的帧的 QP 值的总和。 帧数以framesDecoded 为单位
double totalDecodeTime; // 解码此流的 framesDecoded 帧所花费的总秒数,
// 以通过将此值除以framesDecoded 来计算平均解码时间
// 解码一帧所需的时间是向解码器馈送一帧和解码器返回该帧的解码数据之间经过的时间
double totalInterFrameDelay; // 连续解码的帧之间的帧间延迟总和(以秒为单位)
// (totalSquaredInterFrameDelay -
// totalInterFrameDelay^2/framesDecoded)/framesDecoded
// 从totalInterFrameDelay、totalSquaredInterFrameDelay
// 和framesDecoded 计算帧间延迟方差
double totalSquaredInterFrameDelay;// 连续解码的帧之间的平方帧间延迟的总和(以秒为单位)
boolean voiceActivityFlag; // 只存在于音频。 其帧被传送到 RTCRtpReceiver 的 MediaStreamTrack
// 以进行播放的最后一个 RTP 数据包是否包含语音活动,取决于扩展标头中 V 位的存在
DOMHighResTimeStamp lastPacketReceivedTimestamp;// 表示接收到此 SSRC 的最后一个数据包的时间戳
double averageRtcpInterval; // 两个连续复合 RTCP 数据包之间的平均 RTCP 间隔
unsigned long long headerBytesReceived; // 为此SSRC接收的RTP标头和填充字节的总数。这不包括传输层标头的大小
unsigned long long fecPacketsReceived; // 为此SSRC接收的RTP FEC数据包总数,
// 当使用媒体数据包(例如,使用 Opus)在带内接收 FEC 数据包时,此计数器也可以增加
unsigned long long fecPacketsDiscarded; // 为该SSRC接收的RTP FEC数据包总数,其中应用程序丢弃了纠错有效负载
unsigned long long bytesReceived; // SSRC接收的总字节数
unsigned long long packetsFailedDecryption; // 程序未能解密的 RTP 数据包的累积数量
unsigned long long packetsDuplicated; // 由于重复而丢弃的累积数据包数。 重复的数据包不计入丢弃的数据包中
record<USVString, unsigned long long> perDscpPacketsReceived;
//为此SSRC接收的数据包总数,DSCP被标识为字符串形式的十进制整数
unsigned long nackCount; // 计算此接收器发送的图片丢失指示 (PLI) 数据包的总数
unsigned long firCount; // 只存在于视频。 计算此接收器发送的完整帧内请求 (FIR) 数据包的总数
unsigned long pliCount; // 只存在于视频。 计算此接收器发送的图片丢失指示 (PLI) 数据包的总数
unsigned long sliCount; // 只存在于视频。 计算此接收器发送的切片丢失指示 (SLI) 数据包的总数
double totalProcessingDelay; // 每个音频样本或视频帧从收到第一个 RTP 数据包的时间(接收时间戳)
// 到解码相应样本或帧的时间(解码的时间戳)所用时间的总和
DOMHighResTimeStamp estimatedPlayoutTimestamp; // 这是此接收器曲目的估计播放时间。
// 播放时间是具有已知时间戳的最后一个可播放音频样本或视频帧的
// NTP 时间戳(从 RTCP SR 数据包将 RTP 时间戳映射到 NTP 时间戳)
double jitterBufferDelay; // 抖动缓冲区的目的是将 RTP 数据包重新组合成帧(在视频的情况下)并平滑播放。
// 此处描述的模型假设样本或帧仍处于压缩状态且尚未解码。
// 它是每个音频样本或视频帧从抖动缓冲区接收到第一个数据包的时间
//(摄取时间戳)到它退出抖动缓冲区的时间(发出时间戳)所用时间的总和,以秒为单位
// 在音频的情况下,多个样本属于同一个 RTP 数据包
// 因此它们将具有相同的摄取时间戳,但不同的抖动缓冲区发出时间戳
// 在视频的情况下,帧可能是通过多个 RTP 数据包接收的,
// 因此摄取时间戳是进入抖动缓冲区的最早数据包,发射时间戳是整个帧退出抖动缓冲区的时间
// 该指标在样本或帧退出时增加,在缓冲区中完成它们的时间
// (并增加 jitterBufferEmittedCount)
// 平均抖动缓冲延迟可以通过将 jitterBufferDelay 与
// jitterBufferEmittedCount 相除来计算
unsigned long long jitterBufferEmittedCount; // 来自抖动缓冲区的音频样本或视频帧的总数(增加 jitterBufferDelay)
unsigned long long totalSamplesReceived; // 只存在于音频。在此 RTP 流上接收到的样本总数
unsigned long long totalSamplesDecoded; // 只存在于音频。在此 RTP 流上解码的样本总数
unsigned long long samplesDecodedWithSilk; // 仅存在于音频且音频编解码器为Opus时。Opus 编解码器的 SILK 部分解码的样本总数。
unsigned long long samplesDecodedWithCelt; // 仅存在于音频且音频编解码器为Opus时。Opus 编解码器的 CELT 部分解码的样本总数
unsigned long long concealedSamples; // 只存在于音频,隐藏样本的样本总数
unsigned long long silentConcealedSamples; // 只存在于音频,插入的“无声”隐藏样本总数,播放静音样本会导致静音或舒适噪
unsigned long long concealmentEvents; // 只存在于音频,隐藏事件的数量。
unsigned long long insertedSamplesForDeceleration;
// 只存在于音频,当播放速度减慢时,此计数器会根据接收到的样本数与播放的样本数之间的差异而增加
unsigned long long removedSamplesForAcceleration;
// 只存在于音频,当播放加速时,此计数器增加接收的样本数与播放的样本数之间的差值
double audioLevel; // 只存在于音频。有关本地附加轨道的音频级别,请参阅 RTCAudioSourceStats。
// 该值介于 0..1(线性)之间,其中 1.0 表示 0 dBov,0 表示静音,
// 0.5 表示声压级从 0 dBov 开始大约 6 dBSPL 变化。
// 使用 totalAudioEnergy 中描述的算法,在某个小区间内平均 audioLevel。
// 使用的间隔取决于实现。
double totalAudioEnergy; // 只存在于音频。表示接收轨道的音频能量。有关本地附加轨道的音频能量,
// 请参阅 RTCAudioSourceStats
// 对于接收到的每个音频样本(因此按 totalSamplesReceived 计数)
// 将样本值除以最高强度的可编码值,平方, 然后乘以以秒为单位的样本持续时间。
// 换句话说,持续时间 * Math.pow(energy/maxEnergy, 2)。
// 这可用于获得与 audioLevel 使用相同单位的均方根 (RMS) 值,如 [RFC6464] 中所定义。
// 可以使用公式
// Math.sqrt(totalAudioEnergy/totalSamplesDuration) 将其转换为这些单位。
// 也可以使用两个不同 getStats() 调用的值之间的差异来执行此计算,
// 以便计算任何所需时间间隔内的平均音频电平。
// 换句话说,做 Math.sqrt((energy2 - energy1)/(duration2 - duration1))。
// 例如,如果生成一个 10 毫秒的音频数据包,其 RMS 为 0.5(超出 1.0),
// 则应将 0.5 * 0.5 * 0.01 = 0.0025 添加到 totalAudioEnergy。
// 如果接收到另一个 RMS 为 0.1 的 10ms 数据包,
// 这应该类似地将 0.0001 添加到 totalAudioEnergy。然后,
// Math.sqrt(totalAudioEnergy/totalSamplesDuration) 变为
// Math.sqrt(0.0026/0.02) = 0.36,
// 这与通过对连续 20 毫秒音频段进行 RMS 计算获得的值相同。
// 如果使用多个音频通道,则样本的音频能量是指任一通道的最高能量。
double totalSamplesDuration; // 只存在于音频。 表示接收轨道的音频持续时间。
// 有关本地附加轨道的音频持续时间,请参阅 RTCAudioSourceStats
unsigned long ramesReceived; // 只存在于视频。 表示在此 RTP 流上接收到的完整帧的总数
DOMString decoderImplementation; // 标识使用的解码器实现
};
dictionary RTCRemoteInboundRtpStreamStats : RTCReceivedRtpStreamStats {
DOMString localId; // 查找RTCOutboundRtpStreamStats
double roundTripTime; // 此 SSRC 的估计往返时间基于 RTCP 接收器报告 (RR) 中的 RTCP 时间戳,以秒为单位
double totalRoundTripTime; // 表示自会话开始以来所有往返时间测量的累积总和(以秒为单位)
double fractionLost; // 为此 SSRC 报告的部分丢包率
unsigned long long reportsReceived; // SSRC 接收的 RTCP RR 块的总数
unsigned long long roundTripTimeMeasurements;// SSRC 接收的包含有效往返时间的 RTCP RR 块的总数
};
dictionary RTCSentRtpStreamStats : RTCRtpStreamStats {
unsigned long packetsSent; // SRC发送的RTP数据包总数。这包括重传
unsigned long long bytesSent; // 为此SSRC发送的总字节数。这包括重传
};
dictionary RTCOutboundRtpStreamStats : RTCSentRtpStreamStats {
unsigned long rtxSsrc; // ssrc
DOMString mediaSourceId; // stats 对象的标识符
DOMString senderId; // RTCAudioSenderStats 或 RTCVideoSenderStats 对象的统计ID
DOMString remoteId; // 用于查找同一SSRC的远程 RTCRemoteInboundRtpStreamStats对象
DOMString rid; // 如果已设置,则公开此 RTP 流的rid 编码参数,否则未定义
DOMHighResTimeStamp lastPacketSentTimestamp; // 表示为此 SSRC 发送最后一个数据包的时间戳
unsigned long long headerBytesSent; // 为此 SSRC 发送的 RTP 标头和填充字节的总数。 这不包括传输层标头的大小
// 例如 IP 或 UDP headerBytesSent + bytesSent等于通过传输作为有效负载发送的字节数
// 例如 IP 或 UDP headerBytesSent + bytesSent等于通过传输作为有效负载发送的字节数
unsigned long packetsDiscardedOnSend; // 由于套接字错误而被丢弃的此 SSRC 的 RTP 数据包总数
unsigned long long bytesDiscardedOnSend; // 由于套接字错误而被丢弃的此 SSRC 的总字节数
unsigned long fecPacketsSent; // 为此 SSRC 发送的 RTP FEC 数据包总数
unsigned long long retransmittedPacketsSent; // 为此 SSRC 重新传输的数据包总数
unsigned long long retransmittedBytesSent; // 为此 SSRC 重传的字节总数,仅包括有效载荷字节
double targetBitrate; // 编码器目标比特率
unsigned long long totalEncodedBytesTarget; // 每次对帧进行编码时,该值都会增加目标帧大小(以字节为单位)
unsigned long frameWidth; // 最后一个编码帧的宽度, 编码帧的分辨率可能低于编码源
unsigned long frameHeight; // 最后一个编码帧的高度, 编码帧的分辨率可能低于编码源
unsigned long frameBitDepth; // 每个像素的位深度24、30、36
double framesPerSecond; // 最后一秒解码的帧数
unsigned long framesSent; // RTP 流上发送的帧总数
unsigned long hugeFramesSent; // 表示此RTP流发送的huge帧总数.根据定义,huge帧编码大小至少是帧平均大小的2.5倍
unsigned long framesEncoded; // RTP 媒体流成功编码的帧总数
unsigned long keyFramesEncoded; // 关键帧的总数
unsigned long framesDiscardedOnSend; // 由于套接字错误而为此 SSRC 丢弃的视频帧总数,即在将数据包交给套接字时发生套接字错误
// 这可能由于各种原因而发生,包括缓冲区已满或没有可用内存。
unsigned long long qpSum; // 发送方编码的帧的QP值的总和
unsigned long long totalSamplesSent; // RTP流发送的样本总数
unsigned long long samplesEncodedWithSilk; // 仅存在于音频且音频编解码器为Opus时,Opus编解码器的SILK部分编码的样本总数
unsigned long long samplesEncodedWithCelt; // 仅存在于音频且音频编解码器为 Opus 时。 Opus 编解码器的 CELT 部分编码的样本总数
boolean voiceActivityFlag; // 只存在于音频,根据[RFC6464]中定义的扩展报头中 V 位的存在
// 最后发送的RTP数据包是否包含语音活动
double totalEncodeTime; // 编码此流的framesEncoded 帧所花费的总秒数。
// 可以通过将此值除以framesEncoded 来计算平均编码时间。
// 编码一帧所需的时间是向编码器提供一帧和编码器返回该帧的编码数据之间经过的时间。
// 这不包括打包结果数据可能花费的任何额外时间
double totalPacketSendDelay; // 总数据包发送延迟
double averageRtcpInterval; // 两个连续复合RTCP数据包之间的平均 RTCP间隔。这是在发送复合 RTCP 报告时由发送端点计算的。
// 复合数据包必须至少包含一个RTCP RR 或 SR 块和一个带有 CNAME 项的 SDES 数据
RTCQualityLimitationReason qualityLimitationReason;
// 只存在于视频。 当前限制分辨率和/或帧率的原因,如果不受限制,则为“无”。
record<DOMString, double> qualityLimitationDurations;
// 只存在于视频。 此流在每个质量限制状态中花费的总时间(以秒为单位)的记录
unsigned long qualityLimitationResolutionChanges;
// 质量限制解决方案变更
record<USVString, unsigned long long> perDscpPacketsSent;
// 只存在于视频。由于质量受限而更改分辨率的次数,计数器最初为零,并在分辨率上升或下降时增加。
// 例如,如果将720p轨道作为480p发送一段时间,然后恢复为720p,
// 则qualityLimitationResolutionChanges的值为 2。
unsigned long nackCount; // 计算此发送方收到的否定确认 (NACK) 数据包的总数
unsigned long firCount; // 只存在于视频。 计算此发送方收到的完整帧内请求 (FIR) 数据包的总数
unsigned long pliCount; // 只存在于视频。 计算此发送方收到的图片丢失指示 (PLI) 数据包的总数
unsigned long sliCount; // 只存在于视频。 计算此发送方收到的切片丢失指示 (SLI) 数据包的总数
DOMString encoderImplementation; // 标识使用的编码器实现
};
enum RTCQualityLimitationReason {
"none", // 分辨率和/或帧率不受限制
"cpu", // 由于CPU负载,分辨率和/或帧率主要受到限制
"bandwidth", // 由于带宽估计期间的拥塞线索,分辨率和/或帧率主要受到限制。
// 典型的拥塞控制算法使用到达间隔时间、往返时间、数据包或其他拥塞线索来执行带宽估计
"other", // 分辨率和/或帧率主要由于上述以外的原因而受到限制
};
dictionary RTCRemoteOutboundRtpStreamStats : RTCSentRtpStreamStats {
DOMString localId; // 用于查找同一SSRC的本地RTCInboundRtpStreamStats对象
DOMHighResTimeStamp remoteTimestamp; // 表示远端发送这些统计信息的远程时间戳。这与时间戳不同,时间戳表示本端生成或接收统计信息的时间
unsigned long long reportsSent; // SSRC 发送的 RTCP SR 块的总数
double roundTripTime; // rtt往返时间
double totalRoundTripTime; // 总往返时间
unsigned long long roundTripTimeMeasurements;// 往返时间测量,SSRC 接收的 RTCP 发送方报告 (SR) 块的总数
};
dictionary RTCMediaSourceStats : RTCStats { // 媒体源-帧速率和分辨率
required DOMString trackIdentifier; // MediaStreamTrack的id属性值
required DOMString kind; // MediaStreamTrack的kind属性的值。 这是“音频”或“视频”。
// 如果它是“音频”, 那么这个stats对象的类型是RTCAudioSourceStats。
// 如果它是“video”, 那么这个stats对象的类型是RTCVideoSourceStats
boolean relayedSource; // 源是远程的,例如如果它是通过 RTCPeerConnection 来自另一个主机,则为true。否则为假
};
dictionary RTCAudioSourceStats : RTCMediaSourceStats {
double audioLevel; // 媒体源的音频电平,0-1,其中1.0表示0 dBov,0表示静音,0.5表示声压级从0 dBov开始大约6dBSPL变化
double totalAudioEnergy; // 总音频能量
double totalSamplesDuration; // 媒体源的音频持续时间
double echoReturnLoss; // 回声返回损失,仅当 MediaStreamTrack 来自应用了回声消除的麦克风时才存在。 以分贝计算
double echoReturnLossEnhancement; // 回波回波损耗增强,仅当 MediaStreamTrack 来自应用了回声消除的麦克风时才存在。 以分贝计算
};
dictionary RTCVideoSourceStats : RTCMediaSourceStats {
unsigned long width; // 宽
unsigned long height; // 高
unsigned long bitDepth; // 位深
unsigned long frames; // 总帧数
double framesPerSecond; // 最后一秒的编码帧数。这可能低于媒体源帧速率
};
dictionary RTCRtpContributingSourceStats : RTCStats {
required unsigned long contributorSsrc; // stats对象表示的贡献源的SSRC标识符,32位无符号整数
required DOMString inboundRtpStreamId; // 入站的RTP流ID
unsigned long packetsContributedTo; // 此贡献源贡献的 RTP 数据包总数
double audioLevel; // 此源贡献的最后接收到 RTP数据包包含[RFC6465]混音器到客户端音频级别标头扩展, 0-1
};
dictionary RTCPeerConnectionStats : RTCStats {
unsigned long dataChannelsOpened; // 表示在其生命周期内进入“打开”状态的唯一RTCDataChannel的数量
unsigned long dataChannelsClosed; // 表示在其生命周期内离开“打开”状态的唯一RTCDataChannel的数量
unsigned long dataChannelsRequested; // RTCPeerConnection 上成功的createDataChannel()调用返回的唯一RTCDataChannel的数量
unsigned long dataChannelsAccepted; // 在RTCPeerConnection上的ondatachannel事件中发出信号的唯一RTCDataChannel的数量
};
dictionary RTCRtpTransceiverStats : RTCStats {
required DOMString senderId; // RTCRtpTransceiver关联的RTCRtpSender的stats对象的标识符
required DOMString receiverId; // 与此stats对象表示的RTCRtpTransceiver关联的RTCRtpReceiver的stats对象的标识符
DOMString mid; // 如果这个stats对象表示的RTCRtpTransceiver有一个不为空的中间值,这就是那个值,否则这个成员不存在
};
dictionary RTCMediaHandlerStats : RTCStats {
DOMString trackIdentifier; // 轨道的id属性
boolean ended; // 反映轨道的结束状态
required DOMString kind; // “音频”或“视频”。 这反映了MediaStreamTrack的kind属性
};
dictionary RTCVideoHandlerStats : RTCMediaHandlerStats {
};
dictionary RTCVideoSenderStats : RTCVideoHandlerStats {
DOMString mediaSourceId; // 媒体源ID
};
dictionary RTCVideoReceiverStats : RTCVideoHandlerStats {
};
dictionary RTCAudioHandlerStats : RTCMediaHandlerStats {
};
dictionary RTCAudioSenderStats : RTCAudioHandlerStats {
DOMString mediaSourceId;
};
dictionary RTCDataChannelStats : RTCStats {
DOMString label; // RTCDataChannel 对象的标签值
DOMString rotocol; // RTCDataChannel 对象的协议值
unsigned short dataChannelIdentifier; // RTCDataChannel 对象的id属性
required RTCDataChannelState state; // RTCDataChannel 对象的readyState值
unsigned long messagesSent; // 表示发送的 API“消息”事件总数
unsigned long long bytesSent; // 表示在此 RTCDataChannel 上发送的有效负载字节总数,即,不包括标头或填充
unsigned long messagesReceived; // 表示收到的 API“消息”事件总数
unsigned long long bytesReceived; // 表示在此RTCDataChannel上接收的总字节数,即不包括头或填充
};
dictionary RTCTransportStats : RTCStats { // RTCTransportStats对象表示与RTCDtlsTransport及其底层RTCIceTransport对应的统计信息
unsigned long long packetsSent; // 表示通过此传输发送的数据包总数
unsigned long long packetsReceived; // 表示在此传输上接收的数据包总数
unsigned long long bytesSent; // 表示在此RTCIceTransport上发送的有效载荷字节总数,
// 即不包括标头、填充或ICE连接检查。
unsigned long long bytesReceived; // 表示在此RTCIceTransport上接收的有效载荷字节总数,
// 即不包括标头、填充或ICE 连接检查
DOMString rtcpTransportStatsId; // 如果RTP和RTCP未复用,则这是提供RTCP组件统计信息的传输ID,
// 并且此记录仅包含RTP组件统计信息
RTCIceRole iceRole; // ICE角色
DOMString iceLocalUsernameFragment; // 设置为此RTCIceTransport的消息验证程序中使用的本地用户名片段的当前值。
// 它可能会在 setLocalDescription()和ICE重启时更新。
required RTCDtlsTransportState dtlsState; // 设置为底层 RTCDtlsTransport的state属性的当前值。
RTCIceTransportState iceState; // 设置为底层 RTCIceTransport 的 state 属性的当前值。
DOMString selectedCandidatePairId; // 它是与被检查的对象相关联的唯一标识符,
// 以生成与此传输相关联的RTCIceCandidatePairStats
DOMString localCertificateId; // 对于协商 DTLS 的组件,提供本地证书
DOMString remoteCertificateId; // 对于协商 DTLS 的组件,提供远程证书
DOMString tlsVersion; // TLS版本,仅在 DTLS 协商完成后才存在
DOMString dtlsCipher; // 用于DTLS传输的密码套件的描述性名称,
// 如IANA密码套件注册表[IANA-TLS-CIPHERS]的“描述”列中所定义
DOMString srtpCipher; // 用于SRTP传输的保护配置文件的描述性名称
DOMString tlsGroup; // TSL组
unsigned long selectedCandidatePairChanges; // 此传输的选定候选对已更改的次数
};
dictionary RTCSctpTransportStats : RTCStats {
DOMString transportId; // 被检查以生成支持SCTP传输的DTLSTransport和ICETransport的
// RTCTransportStats的对象的标识符
double smoothedRoundTripTime; // 最新平滑的往返时间值
unsigned long congestionWindow; // 最新的拥塞窗口
unsigned long receiverWindow; // 最新的接收器窗口
unsigned long mtu; // 最新的最大传输单元
unsigned long unackData; // 未确认的DATA块的数量
};
dictionary RTCIceCandidateStats : RTCStats {
required DOMString transportId; // 传输标识
DOMString? address; // 它是候选地址,允许使用IPv4地址、IPv6地址和完全限定域名
long port; // 候选人的端口号
DOMString protocol; // 协议传输的有效值是“udp”和“tcp”之一
required RTCIceCandidateType candidateType; // 候选人类型
long priority; // 优先级
DOMString url; // 对于本地候选人,这是从中获取候选人的ICE服务器的URL
DOMString relayProtocol; // 它是端点用于与TURN服务器通信的协议。这仅适用于本地候选人。
// 有效值为“udp”、“tcp”或“tls
};
dictionary RTCIceCandidatePairStats : RTCStats {
required DOMString transportId; // 传输标识
required DOMString localCandidateId; // 本地候选人ID
required DOMString remoteCandidateId; // 远端候选人状态
required RTCStatsIceCandidatePairState state; // 代表一对本地和远程候选者的清单状态
boolean nominated; // 与更新部分中描述的提名标志相关
unsigned long long packetsSent; // 在此候选对上发送的数据包总数
unsigned long long packetsReceived; // 在此候选对上接收到的数据包总数
unsigned long long bytesSent; // 此候选对上发送的有效载荷字节总数
unsigned long long bytesReceived; // 在此候选对上接收的有效载荷字节总数
DOMHighResTimeStamp lastPacketSentTimestamp; // 在此特定候选对上发送最后一个数据包的时间戳,不包括STUN数据包
DOMHighResTimeStamp lastPacketReceivedTimestamp;// 在此特定候选对上接收到最后一个数据包的时间戳,不包括 STUN 数据包
DOMHighResTimeStamp firstRequestTimestamp; // 在此特定候选对上发送第一个STUN请求的时间戳
DOMHighResTimeStamp lastRequestTimestamp; // 在此特定候选对上发送最后一个STUN请求的时间戳 (lastRequestTimestamp - firstRequestTimestamp) / requestsSent
DOMHighResTimeStamp lastResponseTimestamp; // 此特定候选对上收到最后一个STUN响应的时间戳
double totalRoundTripTime; // 自会话开始以来所有往返时间测量的总和(以秒为单位)
double currentRoundTripTime; // 以秒为单位的最新往返时间,由两个STUN连接检查[STUN-PATH-CHAR]计算得出
double availableOutgoingBitrate; // 可用传出比特率-由底层拥塞控制通过使用此候选对组合所有传出 RTP 流的可用比特率来计算的。
// 比特率测量不计算 IP 或其他传输层(如 TCP 或 UDP)的大小
double availableIncomingBitrate; // 可用输入比特率-由底层拥塞控制通过使用此候选对组合所有传入 RTP 流的可用比特率来计算的。
// 比特率测量不计算 IP 或其他传输层(如 TCP 或 UDP)的大小
unsigned long circuitBreakerTriggerCount; // 触发断路器的次数
unsigned long long requestsReceived; // 收到的连接检查请求总数(包括重传)
unsigned long long requestsSent; // 发送的连接检查请求总数(不包括重传)
unsigned long long responsesReceived; // 收到的连接检查响应总数
unsigned long long responsesSent; // 发送的连接检查响应总数
unsigned long long retransmissionsReceived; // 收到的连接检查请求重传总数
unsigned long long retransmissionsSent; // 发送的连接检查请求重传总数
unsigned long long consentRequestsSent; // 发送的同意请求总数
DOMHighResTimeStamp consentExpiredTimestamp; // 最新的有效STUN绑定响应过期的时间戳
unsigned long packetsDiscardedOnSend; // 由于套接字错误而被丢弃的此候选对的数据包总数
unsigned long long bytesDiscardedOnSend; // 由于套接字错误而被丢弃的此候选对的总字节数
unsigned long long requestBytesSent; // 为连通性检查发送的总字节数
unsigned long long consentRequestBytesSent; // 为同意请求发送的总字节数
unsigned long long responseBytesSent; // 为连通性检查响应发送的总字节数
};
enum RTCStatsIceCandidatePairState {
"frozen",
"waiting",
"in-progress",
"failed",
"succeeded"
};
dictionary RTCCertificateStats : RTCStats {
required DOMString fingerprint; // 证书的指纹
required DOMString fingerprintAlgorithm; // 用于计算证书指纹的哈希函数
required DOMString base64Certificate; // 证书的DER编码的base-64
DOMString issuerCertificateId; // 包含证书链中下一个证书的stats对象
};
dictionary RTCIceServerStats : RTCStats {
required DOMString url; // ICE服务器的URL
long port; // 客户端使用的端口号
DOMString relayProtocol; // 端点用于与ICE服务器通信的协议
unsigned long totalRequestsSent; // 已发送到此服务器的请求总数
unsigned long totalResponsesReceived; // 从该服务器收到的响应总数
double totalRoundTripTime; // 在收到响应的情况下已发送的所有请求的 RTT 总和
};
dictionary RTCMediaStreamStats : RTCStats { // 由于发送方、接收方和收发器统计对象更适合描述现代 RTCPeerConnection 模型(统一计划)
// 因此整个字典已于 2019 年 9 月过时。
DOMString streamIdentifier; // stream.id 属性
sequence<DOMString> trackIds; // stats 对象的id,并不是TrackID
};
dictionary RTCSenderVideoTrackAttachmentStats : RTCVideoSenderStats {
};
dictionary RTCSenderAudioTrackAttachmentStats : RTCAudioSenderStats {
};
dictionary RTCReceiverVideoTrackAttachmentStats : RTCVideoReceiverStats {};
dictionary RTCReceiverAudioTrackAttachmentStats : RTCAudioReceiverStats {};
partial dictionary RTCCodecStats {
// 已于 2019 年 8 月移RTCInboundRtpStreamStats.RTCInboundRtpStreamStats/decoderImplementation}}
DOMString implementation; // 和 RTCOutboundRtpStreamStats.encoderImplementation
};
partial dictionary RTCIceCandidateStats {
boolean deleted = false; // 此字段已过时,因为如果删除 ICE 候选对象,它将不再出现在 getStats() 中
boolean isRemote; // false 表示这代表本地候选人; true 表示这代表远程候选人
};
partial dictionary RTCIceCandidatePairStats {
double totalRtt; // 该字段在 2016 年 12 月更名为 totalRoundTripTime
double currentRtt; // 该字段于 2016 年 12 月更名为 currentRoundTripTime
unsigned long long priority; // 该字段在2018年2月被删除,因为它不能用 53 位表示。如果需要,可以按照 [RFC5245] 第 5.7.2 节中的定义重新计算
};
partial dictionary RTCRtpStreamStats {
DOMString mediaType; // 表示接收轨道的 stats 对象的标识符RTCReceiverAudioTrackAttachmentStats 或
// RTCReceiverVideoTrackAttachmentStats,该字段于 2020 年 4 月被淘汰
double averageRTCPInterval;
};
partial dictionary RTCOutboundRtpStreamStats {
DOMString trackId; // stats 对象的标识符
};
partial dictionary RTCMediaHandlerStats {
RTCPriorityType priority; // 表示已为曲目设置的优先级
boolean remoteSource; // 如果轨道附件在 RTCRtpSender 上,则为 false,
// 如果轨道附件在 RTCRtpReceiver 上,则为 true,2020 年 4 月过时
};
partial dictionary RTCAudioHandlerStats {
double audioLevel; // 已于 2019 年 6 月移至 RTCAudioReceiverStats 和 RTCAudioSourceStats
double totalAudioEnergy; // 已于 2019 年 6 月移至 RTCAudioReceiverStats 和 RTCAudioSourceStats
double totalSamplesDuration; // 已于 2019 年 6 月移至 RTCAudioReceiverStats 和 RTCAudioSourceStats
boolean voiceActivityFlag; // 该字段已于 2019 年 8 月移至 RTCOutboundRtpStreamStats 和 RTCInboundRtpStreamStats
};
partial dictionary RTCAudioSenderStats {
unsigned long long totalSamplesSent; // 这已于 2019 年 8 月移至 RTCOutboundRtpStreamStats
double echoReturnLoss; // 这已于 2019 年 8 月移至 RTCAudioSourceStats
double echoReturnLossEnhancement; // 这已于 2019 年 8 月移至 RTCAudioSourceStats
};
partial dictionary RTCAudioReceiverStats { // 已于 2019 年 8 月移至 RTCInboundRtpStreamStats
DOMHighResTimeStamp estimatedPlayoutTimestamp;
double jitterBufferDelay;
unsigned long long jitterBufferEmittedCount;
unsigned long long totalSamplesReceived;
unsigned long long concealedSamples;
unsigned long long silentConcealedSamples;
unsigned long long concealmentEvents;
unsigned long long insertedSamplesForDeceleration;
unsigned long long removedSamplesForAcceleration;
double audioLevel;
double totalAudioEnergy;
double totalSamplesDuration;
};
partial dictionary RTCVideoHandlerStats {
unsigned long frameWidth; // 已于 2019 年 8 月移至 RTCOutboundRtpStreamStats 和 RTCInboundRtpStreamStats
unsigned long frameHeight; // 已于 2019 年 8 月移至 RTCOutboundRtpStreamStats 和 RTCInboundRtpStreamStats
double ramesPerSecond; // 2019 年 5 月被 RTCVideoSourceStats.framesPerSecond 取代,代表轨道的帧速率
// 2019 年 8 月移至 RTCInboundRtpStreamStats,表示解码帧速率
// 2019年8月,RTCOutboundRtpStreamStats中还增加了framesPerSecond,代表编码帧率(可能低于源帧率)
};
partial dictionary RTCVideoSenderStats {
unsigned long keyFramesSent; // 2019 年 6 月被 RTCOutboundRtpStreamStats 中的 keyFramesEncoded 替换
unsigned long framesCaptured; // 2019 年 5 月被 RTCVideoSourceStats.frames 取代
unsigned long framesSent; // 2019 年 8 月移至 RTCOutboundRtpStreamStats
unsigned long hugeFramesSent; // 2019 年 8 月移至 RTCOutboundRtpStreamStats
};
partial dictionary RTCVideoReceiverStats {
unsigned long keyFramesReceived; // 2019 年 6 月被 RTCInboundRtpStreamStats 中的 keyFramesDecoded 替换
DOMHighResTimeStamp estimatedPlayoutTimestamp; // 2019 年 8 月移至 RTCInboundRtpStreamStats
double jitterBufferDelay; // 2019 年 8 月移至 RTCInboundRtpStreamStats
unsigned long long jitterBufferEmittedCount; // 2019 年 8 月移至 RTCInboundRtpStreamStats
unsigned long framesReceived; // 2019 年 8 月移至 RTCInboundRtpStreamStats
unsigned long framesDecoded; // 2019 年 8 月移至 RTCInboundRtpStreamStats
unsigned long framesDropped; // 2019 年 8 月移至 RTCInboundRtpStreamStats
unsigned long partialFramesLost; // 2019 年 8 月移至 RTCInboundRtpStreamStats
unsigned long fullFramesLost; // 2019 年 8 月移至 RTCInboundRtpStreamStats
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
编辑 (opens new window)
上次更新: 2022/07/11, 09:43:09