AvPlayer
SceAvPlayer は FFmpeg でムービーのコンテナをデコードし、タイトルが所有する NV12 のフレームと 48 kHz ステレオの PCM にします。タイトルがどちらかのストリームを一度も読まなくても、ソースの長さを過ぎると再生は終了します。
2026年10月10日 までのリポジトリノート
タイトルが所有するバッファ
プレイヤーはタイトルの割り当てのコールバックとファイルのコールバックを使います。FFmpeg はコンテナを調べ、映像をソース解像度の NV12 に、音声を 48 kHz のインターリーブされた符号付き 16 ビットのステレオにデコードします。映像と音声は別々のロックと別々のデコーダーの処理を持ちます。タイムスタンプはひとつの単調増加のクロックを共有します。
一時停止、シーク、ループ、ストリームの終端は保持されます。ソフトウェアデコーダーの ABI は、アラインされたピッチ、割り当ての高さ、見える範囲の切り抜きを報告します。拡張版とレガシー版の両方のストリーム情報の呼び出しがあります。現在時刻、通常速度のトリックモード、ストリームの無効化、上限付きのメディアクロックが、アステリックスが同梱する Unity のミドルウェアをカバーします。
タイトルが半分しか読まないムービーを終わらせる
タイトルは映像だけを取って自分で音をミックスすることも、その逆もあります。すべてのストリームが読まれるまで待つと、そのプレイヤーはプロセスの残りの間ずっと生き続けます。Jurassic Park Classic Games Collection がイントロで止まっていたのはこのためで、読まれない音声ストリームがいつまでも終わらず、クロックは 3 秒のクリップを 90 秒も過ぎていました。
長さはソースから得ます。クロックがそれを過ぎると、無視されたストリームがあっても再生は終わります。ストリームがまだデータを渡している間は、報告する位置は実際に渡したフレームの範囲に留まるため、遅いマシンで早く打ち切られることはありません。ストリームが本当に終わった後は、クロックは長さまで進んで構いません。ループするソースと長さが不明なソースには手を出しません。
表示
観測したイントロのムービーは、ReleaseFast のビルドでほぼ本来のフレームレートで再生されます。Unity がクリップを切り替える間は、クリアされたデコーダーのサーフェスを単色で表示するのではなく、最後の有効な画像を保持します。1920×1080 のソースは、タイトルが登録したスキャンアウトのターゲットに拡大できます。
ハプティクストラックはタイミングを合わせた無音です。AvPlayer がコントローラーを動かすことはありません。ピクセルは、プレイヤー内部の 2 つ目のコンポジターではなく、タイトルのシェーダーか VideoOut を通じて画面に届きます。
実装済みのこと
- タイトルが所有するバッファへの、NV12 の映像と 48 kHz ステレオの PCM への FFmpeg のデコード。
- 拡張版とレガシー版のストリーム情報、一時停止、シーク、ループ、共有のメディアクロック。
- タイトルがストリームを読まずに残したときの、ソースの長さでの再生終了。
- クリップの切り替えをまたいだ最後の有効なフレームの保持。
まだ足りないこと
- ハプティクスは無音です。コントローラーの振動はエミュレートしません。
- ループするソースと長さが不明なソースは、長さの規則で打ち切りません。
- ファイルのコールバックがない場合や、FFmpeg が調べられないコンテナでは、そのアセットは失敗します。
関連するしくみ
これらのページについて