RTCEncodedAudioFrame
基線 2023 *
新推出
注意:此功能在 專用 Web Workers 中可用。
RTCEncodedAudioFrame 是 WebRTC API 的一部分,代表 WebRTC 接收器或傳送器管道中的一個已編碼音訊幀,可以使用 WebRTC Encoded Transform 進行修改。
該介面提供了方法和屬性來獲取幀的元資料,從而確定其格式和在幀序列中的順序。data 屬性提供對編碼幀資料的緩衝區訪問,這些資料可能已加密或被轉換器修改。
例項屬性
RTCEncodedAudioFrame.timestamp只讀 已棄用 非標準-
返回幀開始取樣的時間戳。
RTCEncodedAudioFrame.data-
返回包含已編碼幀資料的緩衝區。
例項方法
RTCEncodedAudioFrame.getMetadata()-
返回與幀關聯的元資料。
示例
此程式碼段展示了一個在 Worker 中處理 rtctransform 事件的處理器,該處理器實現了一個 TransformStream,並將已編碼幀從 event.transformer.readable 透過它管道傳輸到 event.transformer.writable(event.transformer 是 RTCRtpScriptTransform 的 worker 端對應項)。
如果將轉換器插入音訊流,則每當在 event.transformer.readable 上排隊新幀時,都會呼叫 transform() 方法,並傳入一個 RTCEncodedAudioFrame。transform() 方法展示瞭如何讀取它,使用虛構的加密函式進行修改,然後將其排隊到控制器(這最終將其管道傳輸到 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 |
瀏覽器相容性
載入中…