RTCEncodedAudioFrame

基線 2023 *
新推出

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

* 此特性的某些部分可能存在不同級別的支援。

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

RTCEncodedAudioFrameWebRTC API 的一部分,代表 WebRTC 接收器或傳送器管道中的一個已編碼音訊幀,可以使用 WebRTC Encoded Transform 進行修改。

該介面提供了方法和屬性來獲取幀的元資料,從而確定其格式和在幀序列中的順序。data 屬性提供對編碼幀資料的緩衝區訪問,這些資料可能已加密或被轉換器修改。

例項屬性

RTCEncodedAudioFrame.timestamp 只讀 已棄用 非標準

返回幀開始取樣的時間戳。

RTCEncodedAudioFrame.data

返回包含已編碼幀資料的緩衝區。

例項方法

RTCEncodedAudioFrame.getMetadata()

返回與幀關聯的元資料。

示例

此程式碼段展示了一個在 Worker 中處理 rtctransform 事件的處理器,該處理器實現了一個 TransformStream,並將已編碼幀從 event.transformer.readable 透過它管道傳輸到 event.transformer.writableevent.transformerRTCRtpScriptTransform 的 worker 端對應項)。

如果將轉換器插入音訊流,則每當在 event.transformer.readable 上排隊新幀時,都會呼叫 transform() 方法,並傳入一個 RTCEncodedAudioFrametransform() 方法展示瞭如何讀取它,使用虛構的加密函式進行修改,然後將其排隊到控制器(這最終將其管道傳輸到 event.transformer.writable,然後再傳回 WebRTC 管道)。

js
addEventListener("rtctransform", (event) => {
  const transform = new TransformStream({
    async transform(encodedFrame, controller) {
      // Reconstruct the original frame.
      const view = new DataView(encodedFrame.data);

      // Construct a new buffer
      const newData = new ArrayBuffer(encodedFrame.data.byteLength);
      const newView = new DataView(newData);

      // Encrypt frame bytes using the encryptFunction() method (not shown)
      for (let i = 0; i < encodedFrame.data.byteLength; ++i) {
        const encryptedByte = encryptFunction(~view.getInt8(i));
        newView.setInt8(i, encryptedByte);
      }

      encodedFrame.data = newData;
      controller.enqueue(encodedFrame);
    },
  });
  event.transformer.readable
    .pipeThrough(transform)
    .pipeTo(event.transformer.writable);
});

請注意,更完整的示例可在 使用 WebRTC Encoded Transforms 中找到。

規範

規範
WebRTC Encoded Transform
# rtcencodedaudioframe

瀏覽器相容性

另見