VideoFrame
Baseline
2024
*
最近利用可能
September 2024以降、この機能は最新のバージョンの端末およびブラウザーで動作します。古い端末やブラウザーでは動作しないことがあります。
* この機能の一部は、対応レベルが異なる場合があります。
VideoFrame はウェブコーデック API のインターフェイスで、動画のフレームを表します。
VideoFrame は移譲可能オブジェクトです。
解説
VideoFrame オブジェクトは様々な方法で作成したり、アクセスしたりすることができます。 MediaStreamTrackProcessor はメディアトラックを個々の VideoFrame オブジェクトに分割します。
VideoFrame は画像のソースであり、他のキャンバスソース(
SVGImageElement,
HTMLVideoElement,
HTMLCanvasElement,
ImageBitmap,
OffscreenCanvas,
他の VideoFrame)を受け入れるコンストラクターがあります。
これは、画像や動画要素からフレームを作成することができることを意味しています。
2 つ目のコンストラクターは、バイナリーピクセル表現の ArrayBuffer、TypedArray、DataView のいずれかから VideoFrame を生成します。
作成されたフレームは、例えば MediaStreamTrackGenerator インターフェイスを使って、フレームのストリームからメディアトラックを作成します。
コンストラクター
VideoFrame()-
新しい
VideoFrameオブジェクトを生成します。
インスタンスプロパティ
VideoFrame.format読取専用-
この
VideoFrameのピクセル形式を返します。 VideoFrame.codedWidth読取専用-
この
VideoFrameの幅をピクセル単位で返します。これには、表示されないパディングが含まれる可能性があります。 VideoFrame.codedHeight読取専用-
この
VideoFrameの高さをピクセル単位で返します。これには、表示されないパディングが含まれる可能性があり、比率の調整を考慮する前の値です。 VideoFrame.codedRect読取専用-
DOMRectReadOnlyで、codedWidthおよびcodedHeightに一致する幅と高さを返します。 VideoFrame.visibleRect読取専用-
DOMRectReadOnlyで、このVideoFrameのピクセルの見える矩形を記述します。 VideoFrame.displayWidth読取専用-
アスペクト比を調整して表示した場合の
VideoFrameの幅を返します。 VideoFrame.displayHeight読取専用-
アスペクト比を調整して表示した場合の
VideoFrameの高さを返します。 VideoFrame.duration読取専用-
動画の再生時間をマイクロ秒単位で示す整数を返します。
VideoFrame.timestamp読取専用-
動画のタイムスタンプをマイクロ秒単位で示す整数を返します。
VideoFrame.colorSpace読取専用-
オブジェクト
VideoColorSpaceを返します。
インスタンスメソッド
VideoFrame.allocationSize()-
メソッドに渡すオプションでフィルタリングされた
VideoFrameを保持するために必要なバイト数を返します。 VideoFrame.copyTo()-
この
VideoFrameのコンテンツをArrayBufferにコピーします。 VideoFrame.clone()-
元と同じメディアリソースを参照する新しい
VideoFrameオブジェクトを作成します。 VideoFrame.close()-
すべての状態をクリアし、メディアリソースへの参照を解放します。
例
次の例では、フレームは MediaStreamTrackProcessor から返され、エンコードされます。完全な例と、記事 WebCodecs による動画処理の詳細をご覧ください。
let frame_counter = 0;
const track = stream.getVideoTracks()[0];
const media_processor = new MediaStreamTrackProcessor(track);
const reader = media_processor.readable.getReader();
while (true) {
const result = await reader.read();
if (result.done) break;
let frame = result.value;
if (encoder.encodeQueueSize > 2) {
// Too many frames in flight, encoder is overwhelmed
// let's drop this frame.
frame.close();
} else {
frame_counter++;
const insert_keyframe = frame_counter % 150 === 0;
encoder.encode(frame, { keyFrame: insert_keyframe });
frame.close();
}
}
仕様書
| 仕様書 |
|---|
| WebCodecs> # videoframe-interface> |