Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
Since October 2024, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
requestVideoFrameCallback() は HTMLVideoElement インターフェイスのメソッドで、新しい映像フレームが合成エンジンに送信された際に実行されるコールバック関数を登録します。これにより、開発者は各映像フレームに対して効率的な操作を行うことができます。
requestVideoFrameCallback() のよくある使用例としては、映像処理やキャンバスへの描画、映像分析、外部オーディオソースとの同期などがあります。 フレームごとの処理は、timeupdate イベントが発生するたびに現在の映像表示上で操作を実行することで、効率や精度が低い方法で行われていました。 この方法では、実際の映像フレームへのアクセスはできませんでした。
requestVideoFrameCallback() は、Window.requestAnimationFrame() と同様に使用します。この関数を使用すると、次の映像フレームが合成エンジンに送信された際に何らかの処理を行うコールバック関数を実行することができます。コールバック関数は、次の映像フレームが合成された際にコールバック関数を実行するために再び requestVideoFrameCallback() を呼び出すことで終了します。しかし、requestVideoFrameCallback() は、いくつかの点で映像操作用に調整されています。
留意すべき点として、requestVideoFrameCallback() は、コールバックからの出力が映像のフレームレートと同期した状態を厳密に保証するものではありません。新しい映像フレームが提示された時点よりも、垂直同期 (V-sync) が 1 回分遅れてコールバックが実行される可能性もあります。(V-sync は、映像のフレームレートをモニターのリフレッシュレートと同期させるグラフィック技術です。)
API はメインスレッド上で実行されますが、映像合成は別の合成スレッド上で実行される可能性が高いです。これらの操作が完了するまでに要する時間、および映像自体と requestVideoFrameCallback() 操作の結果が画面に表示されるまでに要する時間も考慮する必要があります。
now コールバック引数と expectedDisplayTime メタデータプロパティを比較して、コールバックが v-sync に遅れていないかどうかを判断できます。 expectedDisplayTime が now から約 5 ~ 10 ミリ秒以内であれば、フレームはすでにレンダリングされています。 expectedDisplayTime が約 16 ミリ秒ほど未来であれば(ブラウザー/画面が 60Hz でリフレッシュしていると仮定した場合)、コールバックは v-sync アウトです。
新しい映像フレームが合成エンジンに送信された際に実行されるコールバック関数。これには 2 つの引数が含まれています。
nowコールバックが呼び出された時刻を表す DOMHighResTimeStamp です。
metadata以下のプロパティを持つオブジェクトです。
WebRTC アプリケーションで使用される requestVideoFrameCallback() コールバック内では、追加のメタデータプロパティが利用できる場合があります。
メモ: width と height は、場合によっては HTMLVideoElement.videoWidth および HTMLVideoElement.videoHeight と異なる場合があります(例えば、アナモフィック動画は長方形のピクセルを持つことがあります)。
一意のコールバック ID を表す番号。
これは、HTMLVideoElement.cancelVideoFrameCallback() に渡すことで、コールバック登録をキャンセルすることができます。
この例では、requestVideoFrameCallback() を使用して、映像のフレームを映像とまったく同じフレームレートで <canvas> 要素に描画する方法を表示させています。また、デバッグ目的でフレームのメタデータを DOM にログ出力しています。
上記のコードの動作する実装については、 requestVideoFrameCallback デモ を参照してください。
| HTMLVideoElement.requestVideoFrameCallback() # dom-htmlvideoelement-requestvideoframecallback |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2025年7月22日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.