RTCEncodedVideoFrame
基線 2023 *
新推出
注意:此功能在 專用 Web Workers 中可用。
RTCEncodedVideoFrame 是 WebRTC API 的一部分,用於表示 WebRTC 接收器或傳送器管道中的一個編碼影片幀,可以透過 WebRTC 編碼轉換 進行修改。
例項屬性
RTCEncodedVideoFrame.type只讀-
返回當前幀是關鍵幀、增量幀還是空幀。
RTCEncodedVideoFrame.timestamp只讀 已棄用 非標準-
返回取樣開始時幀的時間戳。
RTCEncodedVideoFrame.data-
返回包含編碼幀資料的緩衝區。
例項方法
RTCEncodedVideoFrame.getMetadata()-
返回與幀關聯的元資料。
描述
原始影片資料以幀序列的形式生成,其中每一幀都是畫素值的二維陣列。影片編碼器將此原始輸入轉換為原始資料的壓縮表示形式,以便傳輸和儲存。一種常見的方法是傳送包含足夠資訊以在相對較低的速率重現整個影像的“關鍵幀”,並在關鍵幀之間傳送許多小得多的“增量幀”,這些幀僅編碼自前一幀以來的更改。
有許多不同的編解碼器,例如 H.264、VP8 和 VP9,每種編解碼器都有不同的編碼過程和配置,在壓縮效率和影片質量之間提供不同的權衡。
RTCEncodedVideoFrame 代表由特定影片編碼器編碼的單個幀。type 屬性指示該幀是“關鍵”幀還是“增量”幀,您可以使用 getMetadata() 方法獲取有關編碼方法的其他詳細資訊。data 屬性提供對該幀編碼影像資料的訪問,然後可以在傳送或接收幀時對其進行修改(“轉換”)。
示例
此程式碼片段展示了 Worker 中 rtctransform 事件的處理程式,該處理程式實現了一個 TransformStream,並將編碼幀從 event.transformer.readable 管道傳輸到 event.transformer.writable(event.transformer 是 RTCRtpScriptTransform 的 Worker 端對應物 RTCRtpScriptTransformer)。
如果將轉換器插入影片流,則在 event.transformer.readable 上排隊新幀時,transform() 方法會使用 RTCEncodedVideoFrame 進行呼叫。transform() 方法展示瞭如何讀取此幀,透過反轉位進行修改,然後將其排隊到控制器(這最終將其透過管道傳輸到 event.transformer.writable,然後再傳回 WebRTC 管道)。
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);
// Negate all bits in the incoming frame
for (let i = 0; i < encodedFrame.data.byteLength; ++i) {
newView.setInt8(i, ~view.getInt8(i));
}
encodedFrame.data = newData;
controller.enqueue(encodedFrame);
},
});
event.transformer.readable
.pipeThrough(transform)
.pipeTo(event.transformer.writable);
});
請注意,使用 WebRTC 編碼轉換中提供了更完整的示例。
規範
| 規範 |
|---|
| WebRTC Encoded Transform # rtcencodedvideoframe |
瀏覽器相容性
載入中…