RTCInboundRtpStreamStats: qpSum 属性

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

RTCInboundRtpStreamStats 字典的 qpSum 属性表示与此 RTCInboundRtpStreamStats 对象对应的视频轨道上发送或接收的每一帧的量化参数 (QP) 值的总和。

一般来说,数字越大表示视频数据被压缩得越厉害。

注意:此值仅适用于视频媒体。

一个正整数。

描述

量化是应用有损压缩到一系列值,从而产生一个单一的量化值的过程。这个值取代了原始值的范围,从而减少了数据集中出现的不同值的数量,使得数据更易于压缩。量化过程和压缩量可以通过一个或多个参数来控制。

需要注意的是,QP 的值可能会周期性地变化——甚至可能每帧都变化——因此很难确切知道压缩的程度。最好的方法是进行估算。例如,您可以使用 RTCReceivedRtpStreamStats.framesDecoded 的值(如果您正在接收媒体,或者 RTCSentRtpStreamStats.framesEncoded 如果正在发送媒体)来获取到目前为止处理的帧数,然后从中计算平均值。请参阅下面的 计算平均量化,其中包含一个执行此操作的函数。

此外,QP 值的确切含义取决于所使用的 编解码器。例如,对于 VP8 编解码器,QP 值可以从 1 到 127 之间,并在帧头元素 "y_ac_qi" 中找到,其值在 RFC 6386, section 19.2 中定义。H.264 使用的 QP 范围为 0 到 51;在这种情况下,它是一个索引,用于派生在量化过程中使用的缩放矩阵。此外,QP 极不可能是编解码器用来调整压缩的唯一参数。有关详细信息,请参阅各个编解码器的规范。

示例

计算平均量化

下面显示的 calculateAverageQP() 函数计算给定包含 RTP 流统计信息的 RTCStatsReport 对象的平均 QP,如果该对象不描述 RTP 流,则返回 0。

js
function calculateAverageQP(stats) {
  let frameCount = 0;

  switch (stats.type) {
    case "inbound-rtp":
    case "remote-inbound-rtp":
      frameCount = stats.framesDecoded;
      break;
    case "outbound-rtp":
    case "remote-outbound-rtp":
      frameCount = stats.framesEncoded;
      break;
    default:
      return 0;
  }

  return status.qpSum / frameCount;
}

请注意,QP 值可能因编解码器而异。因此,此值只有在与同一编解码器进行比较时才可能有用。

规范

规范
WebRTC 统计 API 的标识符
# dom-rtcinboundrtpstreamstats-qpsum

浏览器兼容性