RTCEncodedAudioFrame: getMetadata() 方法

Baseline 2023
新推出

自 2023 年 8 月起,此功能已在最新的裝置和瀏覽器版本中可用。此功能可能不適用於舊裝置或瀏覽器。

注意:此功能在 專用 Web Workers 中可用。

RTCEncodedAudioFrame 介面的 getMetadata() 方法返回一個物件,其中包含與該幀關聯的元資料。

這包括有關該幀的資訊,例如使用的音訊編碼、同步源和貢獻源,以及序列號(對於傳入的幀)。

語法

js
getMetadata()

引數

無。

返回值

具有以下屬性的物件:

audioLevel

一個表示此幀音訊級別的數字。該值介於 0 和 1 之間(包含),其中 1.0 表示 0 dBov(分貝相對於滿量程 (DBFS)),0 表示靜默,0.5 表示大約 6 dB SPL 變化(相對於 0 dBov)。該值透過公式 10^(-rfc_level/20) 從 RFC6464 中指定的 -127 到 0 的範圍轉換而來。如果接收到的幀資料包中不存在 RFC6464 報頭擴充套件,則 audioLevel 將為 undefined

synchronizationSource

一個正整數值,指示此幀所描述的 RTP 資料包流的同步源("ssrc")。源可以是麥克風,也可以是組合了多個源的混音器應用程式。來自同一源的所有資料包共享相同的時間源和序列空間,因此可以相對排序。請注意,值相同的兩個幀指的是同一個源。

payloadType

一個介於 0 和 127 之間的正整數值,描述 RTP 有效載荷的格式。值與格式的對映定義在 RFC3550 中,更具體地說,是在 RFC3551 的 第 6 節:有效載荷型別定義 中。

contributingSources

一個 Array,包含對該幀做出貢獻的源(ssrc)。考慮一個組合了多個使用者音訊的會議應用程式。synchronizationSource 將包含應用程式的 ssrc,而 contributingSources 將包含所有單獨音訊源的 ssrc 值。

sequenceNumber

傳入音訊幀的序列號(傳出幀不使用),可用於重建幀的原始傳送順序。這是一個介於 0 和 32767 之間的數字。請注意,雖然數字在傳送時是按順序分配的,但在達到 32767 時會溢位並重新從 0 開始。因此,要比較兩個幀序列號以確定一個是否在另一個之後,您必須使用 序列號算術

示例

這個示例 WebRTC 編碼轉換 實現展示瞭如何在 transform() 函式中獲取幀元資料並將其記錄下來。

js
addEventListener("rtctransform", (event) => {
  const transform = new TransformStream({
    async transform(encodedFrame, controller) {
      // Get the metadata and log
      const frameMetaData = encodedFrame.getMetadata();
      console.log(frameMetaData);

      // Enqueue the frame without modifying
      controller.enqueue(encodedFrame);
    },
  });
  event.transformer.readable
    .pipeThrough(transform)
    .pipeTo(event.transformer.writable);
});

來自本地麥克風的結果物件可能如下所示。請注意,由於只有一個源,因此沒有貢獻源,並且由於這是傳出幀,因此也沒有 sequenceNumber

json
{
  "payloadType": 109,
  "synchronizationSource": 1876443470
}

規範

規範
WebRTC Encoded Transform
# dom-rtcencodedaudioframe-getmetadata

瀏覽器相容性

另見