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

瀏覽器相容性