-
trackIdentifier,类型为 DOMString
-
MediaStreamTrack
的 id 属性的值。
-
mid,类型为
DOMString
-
如果拥有此流的 RTCRtpTransceiver
具有一个不为 null 的
mid
值,
则这是该值;否则此成员 MUST NOT
存在。
-
remoteId,
类型为 DOMString
-
remoteId
用于查找同一 SSRC 的远端
RTCRemoteOutboundRtpStreamStats
对象。
-
framesDecoded
-
对于音频,MUST NOT 存在。它表示
此 RTP stream 中正确解码的帧总数,即如果没有丢弃帧时
会显示的帧。
-
keyFramesDecoded,类型为 unsigned long
-
对于音频,MUST NOT 存在。它表示
此 RTP 媒体流中成功解码的关键帧总数,例如
VP8 [RFC6386] 中的 key
frames,或 H.264 [RFC6184] 中的 IDR-frames。
这是
framesDecoded
的一个子集。
framesDecoded - keyFramesDecoded 得到
已解码 delta frames 的数量。
-
framesRendered
-
对于音频,MUST NOT 存在。它表示
已渲染的帧总数。它在一帧被渲染之后立即递增。
-
framesDropped,类型为 unsigned
long
-
对于音频,MUST NOT 存在。对于此接收器的轨道,
在解码前丢弃或因帧错过其显示期限而丢弃的帧总数。该测量
在接收器创建时开始,并且是 [RFC7004]
附录 A (g) 中定义的累积度量。
-
frameWidth,类型为 unsigned
long
-
对于音频,MUST NOT 存在。表示最后解码帧的
宽度。在第一帧解码之前,此成员 MUST NOT 存在。
-
frameHeight,类型为 unsigned
long
-
对于音频,MUST NOT 存在。表示最后解码帧的
高度。在第一帧解码之前,此成员 MUST NOT 存在。
-
framesPerSecond,类型为 double
-
对于音频,MUST NOT 存在。上一秒内
解码的帧数。
-
qpSum,类型为 unsigned
long
long
-
对于音频,MUST NOT 存在。由此
接收器解码的帧的 QP 值之和。帧计数位于 framesDecoded
中。
QP 值的定义取决于编解码器;对于 VP8,QP 值是
帧头中作为语法元素 y_ac_qi 携带的值,并在
[RFC6386] 第 19.2 节中定义。
其范围是 0..127。
请注意,QP 值只是所使用量化器值的指示;许多
格式都有在帧内改变量化器值的方法。
-
totalDecodeTime,类型为 double
-
对于音频,MUST NOT 存在。
解码此流的 framesDecoded
帧所花费的总秒数。平均解码时间可以通过用此
值除以 framesDecoded
来计算。
解码一帧所花的时间是
将一帧送入解码器与解码器返回该帧的已解码
数据之间经过的时间。
-
totalInterFrameDelay,类型为 double
-
对于音频,MUST NOT 存在。
连续渲染帧之间的帧间延迟之和(单位为秒),
在一帧被渲染之后立即记录。帧间延迟方差可
根据 totalInterFrameDelay、
totalSquaredInterFrameDelay
和 framesRendered
按以下公式计算:
(totalSquaredInterFrameDelay
- totalInterFrameDelay^2/
framesRendered)/framesRendered。
-
totalSquaredInterFrameDelay,类型为 double
-
对于音频,MUST NOT 存在。
连续渲染帧之间的帧间延迟平方和(单位为秒),
在一帧被渲染之后立即记录。关于如何计算帧间延迟方差,
详见 totalInterFrameDelay。
-
pauseCount,类型为
unsigned long
-
对于音频,MUST NOT 存在。
统计此接收器经历的视频暂停总次数。
如果自最后渲染帧以来经过的时间超过 5 秒,
则认为视频处于暂停状态。pauseCount
在这种暂停之后渲染一帧时递增。
-
totalPausesDuration,类型为
double
-
对于音频,MUST NOT 存在。
暂停的总持续时间(关于暂停的定义,见 pauseCount),
单位为秒。该值在一帧被渲染时更新。
-
freezeCount,类型为
unsigned long
-
对于音频,MUST NOT 存在。
统计此接收器经历的视频冻结总次数。
如果帧持续时间,即两个连续渲染帧之间的时间间隔,
等于或超过
Max(3 * avg_frame_duration_ms, avg_frame_duration_ms + 150),
则它是一次冻结,其中 avg_frame_duration_ms 是最近 30 个渲染
帧的持续时间的线性平均值。
-
totalFreezesDuration,类型为
double
-
对于音频,MUST NOT 存在。
被认为冻结的渲染帧的总持续时间(关于
freeze 的定义,见 freezeCount),
单位为秒。该值
在一帧被渲染时更新。
-
lastPacketReceivedTimestamp,类型为 DOMHighResTimeStamp
-
表示为此 SSRC 接收最后一个包时的时间戳。
这不同于 timestamp,后者表示
本地端点生成
统计信息的时间。
-
,类型为 unsigned long long
-
为此 SSRC
接收的 RTP 头和填充字节总数。
这包括重传。
这不包括 IP 或 UDP 等传输层头的大小。
headerBytesReceived + bytesReceived 等于在传输上
作为 payload 接收的字节数。
-
packetsDiscarded,类型为 unsigned long long
-
由于过晚或过早到达而被 jitter buffer 丢弃的 RTP 包的累计数量,
即这些包不会被播放。由于包重复而丢弃的 RTP 包
不会在此度量中报告 [XRBLOCK-STATS]。
按 [RFC7002]
第 3.2 节和附录 A.a 中定义的方式计算。
-
fecBytesReceived,类型为 unsigned long long
-
为此 SSRC 接收的 RTP FEC 字节总数,
仅包括 payload
字节。
这是 bytesReceived
的一个子集。如果协商了使用不同
ssrc
的 FEC 机制,则 FEC 包会通过
单独的 SSRC 发送,但仍在此处计入。
-
fecPacketsReceived,类型为 unsigned long long
-
为此 SSRC 接收的
RTP FEC 包总数。如果协商了
使用不同 ssrc
的 FEC 机制,则 FEC 包会通过
单独的 SSRC 发送,但仍在此处计入。
当接收与媒体包带内传输的 FEC 包时
(例如使用 Opus),此计数器也可以递增。
-
fecPacketsDiscarded,类型为 unsigned long long
-
为此 SSRC 接收的、
其纠错 payload 被应用丢弃的 RTP FEC 包总数。
这可能发生于:1. FEC 包保护的所有源包
都已接收或已由单独的 FEC 包恢复;或 2. FEC 包到达过晚,
即在恢复窗口之外,并且丢失的 RTP 包已经在
播放期间被跳过。这是 fecPacketsReceived
的一个子集。
-
bytesReceived,类型为 unsigned
long long
-
为此 SSRC 接收的字节总数。这包括
重传。
按 [RFC3550]
第 6.4.1 节中定义的方式计算。
-
firCount,类型为 unsigned
long
-
对于音频,MUST NOT 存在。统计
此接收器发送的 Full Intra Request (FIR) 包总数,
如 [RFC5104]
第 4.3.1 节中所定义。不统计 [RFC2032] 中指出的
RTCP FIR,它已被 [RFC4587] 废弃。
-
pliCount,类型为 unsigned
long
-
对于音频,MUST NOT 存在。统计
此接收器发送的 Picture Loss Indication (PLI)
包总数,如 [RFC4585]
第 6.3.1 节中所定义。
-
totalProcessingDelay,类型为 double
-
它是每个 audio
sample 或视频帧从
第一个 RTP 包被接收的时间(接收时间戳)到
对应样本或帧被解码的时间(解码时间戳)所花费时间的总和,单位为秒。
此时 audio
sample 或视频帧已准备好由 MediaStreamTrack 播放。这里的准备好播放通常指
audio sample 或视频帧已由
解码器完全解码之后。
鉴于其中涉及的复杂性,到达时间或接收时间戳会尽可能
接近网络层测量,而解码时间戳会在
完整样本或帧被解码后立即测量。
对于音频,同一 RTP 包中会接收多个样本,所有样本
将共享相同的接收时间戳和不同的解码时间戳。
对于视频,一帧会通过多个 RTP 包接收,在这种
情况下,包含该帧的最早时间戳被计为接收时间戳,
而解码时间戳对应于完整帧被解码的时间。
此度量不会因未解码的帧而递增,
即 framesDropped。
平均处理延迟可以通过将 totalProcessingDelay
除以
视频的 framesDecoded
(或音频的 provisional stats spec totalSamplesDecoded)来计算。
-
nackCount,类型为 unsigned
long
-
统计此接收器发送的 Negative ACKnowledgement (NACK) 包总数,
如 [RFC4585]
第 6.2.1 节中所定义。
-
estimatedPlayoutTimestamp,类型为 DOMHighResTimeStamp
-
这是此接收器轨道的估计播放时间。播放时间是
最后一个可播放的 audio sample 或视频帧的
NTP 时间戳,该样本或帧具有已知
时间戳(来自将 RTP 时间戳映射到 NTP
时间戳的 RTCP SR 包),
并用其准备好播放后经过的时间进行外推。这是发送方 NTP 时钟时间中的轨道
“当前时间”,即使当前没有音频播放也可以存在。
这可用于估计来自同一来源的两个
轨道之间音频和视频不同步的程度,audioInboundRtpStats.estimatedPlayoutTimestamp
-
videoInboundRtpStats.estimatedPlayoutTimestamp。
-
jitterBufferDelay,类型为 double
-
jitter buffer 的用途是将 RTP 包重新组合为帧(对于
视频)
并实现平滑播放。这里描述的模型假设样本或帧
仍处于压缩状态且尚未被解码。
它是每个 audio
sample 或视频帧从
第一个包被 jitter buffer 接收的时间(进入时间戳)到
其离开 jitter buffer 的时间(发出时间戳)所花费时间的总和,单位为秒。
对于音频,多个样本属于同一个 RTP 包,因此它们将
具有相同的
进入时间戳但具有不同的 jitter buffer 发出时间戳。
对于视频,帧可能通过多个 RTP 包接收,因此
进入时间戳
是进入 jitter buffer 的该帧最早的包,而发出
时间戳是
整个帧离开 jitter buffer 的时间。
此度量在样本或帧离开且完成其在缓冲区中的时间时递增(并
递增 jitterBufferEmittedCount)。
平均 jitter buffer
延迟可以通过将 jitterBufferDelay
除以
jitterBufferEmittedCount
来计算。
-
jitterBufferTargetDelay,类型为 double
-
每当 jitter buffer 发出一个
样本时,此值会增加目标 jitter buffer 延迟。所添加的目标是
在该样本从
jitter buffer 发出时的目标延迟,单位为秒。要获得平均目标延迟,
除以
jitterBufferEmittedCount。
-
jitterBufferEmittedCount,类型为 unsigned long long
-
已从 jitter buffer 输出的 audio sample 或视频帧总数
(递增 jitterBufferDelay)。
-
jitterBufferMinimumDelay,类型为 double
-
jitter buffer 延迟可能会因各种原因增加到更高的
值,例如
为了实现 AV 同步,或者因为在 RTCRtpReceiver 上设置了
jitterBufferTarget。
使用其中一种机制时,跟踪本来可以达到的最小
jitter buffer 延迟可能很有用,这样 WebRTC 客户端就可以
跟踪所添加的额外延迟量。
此度量的工作方式与 jitterBufferTargetDelay
相同,
但它不受增加 jitter buffer 目标延迟的
外部机制影响,例如
jitterBufferTarget(见上方链接)、
AV sync 或任何其他机制。此度量纯粹基于网络
特征,
如 jitter 和丢包,并且可视为在没有
外部因素影响时可获得的最小 jitter buffer 延迟。
该度量会在每次 jitterBufferEmittedCount
更新时更新。
-
totalSamplesReceived,类型为 unsigned long long
-
对于视频,MUST NOT 存在。此
RTP stream 上已接收的样本总数。这包括 concealedSamples。
-
concealedSamples,类型为 unsigned long long
-
对于视频,MUST NOT 存在。作为 concealed sample 的
样本总数。concealed sample 是在播放之前被本地生成的合成样本
替换的样本。必须进行 conceal 的样本示例
包括来自丢失包的样本(在 packetsLost
中报告),或来自到达
太晚而无法播放的包的样本(在 packetsDiscarded
中报告)。
-
silentConcealedSamples,类型为 unsigned long long
-
对于视频,MUST NOT 存在。所插入的
“silent” concealed samples 的总数。播放 silent samples 会产生静音或舒适噪声。
这是 concealedSamples
的一个子集。
-
concealmentEvents,类型为 unsigned long long
-
对于视频,MUST NOT 存在。concealment events 的数量。
每当在一个非 concealed sample 之后合成 concealed sample 时,此计数器递增。
也就是说,多个连续 concealed samples 会使 concealedSamples
计数增加多次,
但它们是一个 concealment event。
-
insertedSamplesForDeceleration,类型为 unsigned long long
-
对于视频,MUST NOT 存在。当播放
变慢时,此计数器会增加
接收样本数与播放样本数之间的差值。
如果通过插入样本实现播放变慢,则这将是插入
样本的数量。
-
removedSamplesForAcceleration,类型为 unsigned long long
-
对于视频,MUST NOT 存在。当播放
加快时,此计数器会增加
接收样本数与播放样本数之间的差值。
如果通过移除样本实现加速,则这将是被移除
样本的计数。
-
audioLevel,
类型为 double
-
对于视频,MUST NOT 存在。表示接收轨道的
音频电平。对于本地附加轨道的音频
电平,请改见 RTCAudioSourceStats。
该值介于 0..1(线性)之间,其中 1.0 表示 0 dBov,0 表示
静音,0.5 大约表示相对于 0 dBov 的声压
级变化 6 dBSPL。
audioLevel
会在某个小时间间隔内求平均,使用
totalAudioEnergy
下描述的算法。
所使用的间隔是实现定义的。
-
totalAudioEnergy,类型为 double
-
对于视频,MUST NOT 存在。表示接收轨道的
音频能量。对于本地附加轨道的
音频能量,请改见
RTCAudioSourceStats。
此值 MUST 按如下方式计算:对于每个被接收的
audio sample
(并因此由 totalSamplesReceived
计数),
将该样本的值除以最高强度可编码值、平方后再
乘以该样本的持续时间(秒)并累加。换言之,
duration * Math.pow(energy/maxEnergy, 2)。
这可用于获得与 audioLevel
使用相同单位的均方根(RMS)值,
如 [RFC6464]
中所定义。
可以使用公式
Math.sqrt(totalAudioEnergy/totalSamplesDuration) 将其转换为这些单位。
也可以使用两次不同
getStats()
调用的值之差执行此计算,以计算
任意所需时间间隔内的平均音频电平。换言之,执行
Math.sqrt((energy2 -
energy1)/(duration2 - duration1))。
例如,如果产生了 RMS 为 0.5(满量程为 1.0)的 10ms 音频包,
则应向
totalAudioEnergy
添加 0.5 * 0.5 * 0.01 = 0.0025。
如果接收到另一个 RMS 为 0.1 的 10ms 包,
则同样应向
totalAudioEnergy
添加 0.0001。
然后,
Math.sqrt(totalAudioEnergy/totalSamplesDuration) 变为
Math.sqrt(0.0026/0.02) = 0.36,这与
对连续 20ms 音频片段执行 RMS 计算所获得的值相同。
如果使用多个音频声道,则
样本的音频能量指任一
声道的最高能量。
-
totalSamplesDuration,类型为 double
-
对于视频,MUST NOT 存在。表示接收轨道的
音频持续时间。对于本地附加轨道的
音频持续时间,请改见
RTCAudioSourceStats。
表示已接收的所有样本的总持续时间(秒)
(并因此由 totalSamplesReceived
计数)。
可与
totalAudioEnergy
一起用于计算
不同时间间隔内的平均音频电平。
-
framesReceived,类型为 unsigned
long
-
对于音频,MUST NOT 存在。表示
此 RTP stream 上接收到的完整帧总数。
此度量在完整帧被接收时递增。
-
decoderImplementation,类型为 DOMString
-
除非允许
暴露硬件,否则 MUST NOT 存在。
对于音频,MUST NOT 存在。标识所使用的
解码器实现。
这对于诊断互操作性问题很有用。
-
playoutId
的类型为 DOMString
-
对于视频,MUST NOT 存在。
如果正在进行音频播放,则它用于查找
对应的 RTCAudioPlayoutStats。
-
powerEfficientDecoder,类型为 boolean
-
除非允许
暴露硬件,否则 MUST NOT 存在。
对于音频,MUST NOT 存在。
用户代理是否认为当前使用的解码器是电源
高效的。这 SHOULD 反映配置是否导致硬件加速,
但用户
代理在决定该配置是否被认为电源高效时 MAY 考虑其他信息。
-
framesAssembledFromMultiplePackets,类型为
unsigned long
-
对于音频,MUST NOT 存在。
它表示此 RTP stream 中由多个 RTP 包组成且正确解码的
帧总数。对于此类帧,
totalAssemblyTime
会递增。平均帧组装时间可以通过将
totalAssemblyTime
除以 framesAssembledFromMultiplePackets
来计算。
-
totalAssemblyTime,类型为 double
-
对于音频,MUST NOT 存在。
每个视频帧从
第一个 RTP 包被接收的时间(接收时间戳)到
该帧的最后一个 RTP 包被接收的时间所花费时间的总和,单位为秒。
仅针对由多个 RTP 包组成的帧递增。
鉴于其中涉及的复杂性,到达时间或接收时间戳会尽可能
接近网络层测量。此度量不会因
未解码的帧而递增,即 framesDropped
或因其他原因
解码失败的帧(如果有)。仅针对由多个 RTP 包组成的帧递增。
-
retransmittedPacketsReceived,类型为 unsigned long long
-
为此 SSRC 接收的重传包总数。这是
packetsReceived
的一个子集。
如果未协商 RTX,
则无法识别重传包,并且此成员 MUST
NOT 存在。
-
retransmittedBytesReceived,类型为 unsigned long long
-
为此 SSRC 接收的
重传字节总数,仅包括
payload 字节。这是 bytesReceived
的一个子集。
如果未协商 RTX,则无法识别重传包,并且此成员 MUST NOT 存在。
-
rtxSsrc
的类型为 unsigned long
-
如果在单独的 RTP
stream 上为重传协商了 RTX,则这是
与此流的 ssrc
关联的 RTX stream 的 SSRC。
如果未协商 RTX,则此值 MUST NOT 存在。
-
fecSsrc
的类型为 unsigned long
-
如果协商了使用单独 RTP stream 的 FEC 机制,
则这是与此流的 ssrc
关联的 FEC stream 的 SSRC。
如果未协商 FEC,或 FEC 使用相同的 RTP stream,
则此值 MUST NOT
存在。
-
totalCorruptionProbability,类型为 double
-
对于音频,MUST NOT 存在。表示
为此 SSRC 所做的所有损坏
概率测量的累计和,关于此属性 SHOULD 何时存在,见 corruptionMeasurements。
添加到 totalCorruptionProbability
的每个测量值 MUST 处于 [0.0, 1.0] 范围内,
其中值 0.0 表示系统估计处理后的帧中
没有或几乎没有
损坏。类似地,值 1.0 表示处理后的帧中
几乎肯定存在
可见损坏。介于两者之间的值表示
可能存在某些可见损坏,但例如其幅度可能较低,或
仅存在于帧的一小部分中。
注
损坏可能性值是估计值,而非保证。即使
估计值为
0.0,也可能存在损坏(即它是假阴性),例如只有
帧中非常小的区域受影响。类似地,即使估计值为 1.0,
也可能
不存在损坏(即它是假阳性),例如如果存在
QP 远高于帧平均值的 macroblocks。
就像 PSNR 测量等也存在边界情况一样,这些度量应主要
用作统计分析的基础,而不应作为
逐帧层面的绝对真相。
-
totalSquaredCorruptionProbability,类型为
double
-
对于音频,MUST NOT 存在。表示
为此 SSRC 所做的所有损坏
概率测量平方的累计和,关于此属性 SHOULD
何时存在,见
corruptionMeasurements。
-
corruptionMeasurements,类型为 unsigned long long
-
对于音频,MUST NOT 存在。当用户
代理能够进行损坏
概率测量时,此计数器会为每次此类测量递增,并且
totalCorruptionProbability
和 totalSquaredCorruptionProbability
会分别用此测量值及测量值的平方进行
聚合。
如果 RTP 包中存在
corruption-detection 头扩展,则损坏
概率测量 MUST 存在。