本文へスキップ
PS5PCEM
動作オーディオとビデオ

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 が調べられないコンテナでは、そのアセットは失敗します。

関連するしくみ

これらのページについて

本文は PS5PCEM リポジトリのアーキテクチャノートと 2026 年 10 月のレポートに基づいています。個別のテストに合格したことは、新しいフレームレートや新しいクリアを意味しません。

すべての技術