Skip to content
PS5PCEM
WorkingAudio and video

AvPlayer

SceAvPlayer decodes movie containers with FFmpeg into title-owned NV12 frames and 48 kHz stereo PCM. Playback ends when the source duration passes, even if the title never reads one of the streams.

Repository notes through October 10, 2026

Buffers the title owns

The player uses the title's allocation callbacks and the title's file callbacks. FFmpeg probes the container and decodes video to source-resolution NV12 and audio to interleaved signed 16-bit stereo at 48 kHz. Video and audio have separate locks and separate decoder processes. Timestamps share one monotonic clock.

Pause, seek, loop and end-of-stream are retained. The software-decoder ABI reports aligned pitch, allocation height and the visible crop. Both the extended and the legacy stream-info calls exist. Current time, normal-speed trick mode, stream disable and a bounded media clock cover the Unity middleware Asterix ships.

Ending a movie the title only half-reads

A title may take the pictures and mix its own sound, or the other way around. Waiting until every stream has been read keeps that player alive for the rest of the process. Jurassic Park Classic Games Collection sat on its intro for this reason: the clock was ninety seconds past a three-second clip because the unread audio stream never ended.

The duration comes from the source. When the clock passes it, playback ends even if a stream was ignored. While a stream is still delivering, the reported position stays within the frames actually handed over, so a slow machine is not cut off early. Once the stream has genuinely ended, the clock may run to the duration. Looping sources and sources of unknown length are left alone.

Presentation

Observed intro movies play at about their native frame rate in ReleaseFast builds. The last valid image is retained while Unity changes clips, instead of presenting a cleared decoder surface as a solid color. A 1920×1080 source can be scaled into the scanout target the title registered.

The haptics track is timed and silent. AvPlayer does not drive a controller. The pixels reach the screen through the title's shaders or through VideoOut, not through a second compositor inside the player.

What is implemented

  • FFmpeg decode to NV12 video and 48 kHz stereo PCM, in title-owned buffers.
  • Extended and legacy stream info, pause, seek, loop, and a shared media clock.
  • End of playback at the source duration when the title leaves a stream unread.
  • Retention of the last valid frame across a clip change.

What is still missing

  • Haptics are silence. Controller vibration is not emulated.
  • Looping and unknown-length sources are not cut off by the duration rule.
  • A missing file callback or a container FFmpeg cannot probe fails that asset.

Related mechanisms

What these pages are

The text follows the architecture notes and the October 2026 reports in the PS5PCEM repository. A focused test passing is not a new frame rate and not a new playthrough.

All technologies