SMS DOCS

Video Playback

SMS turns a bone-stock PlayStation 2 into a video player. Point it at a movie file on any storage device β€” a burned disc, a USB stick, an MX4SIO microSD card, the internal HDD, SMB or UDPFS β€” press one button, and it plays. This page covers every video format SMS understands, how to open a file, the on-screen player controls, how the decoding works under the hood, and how to get the smoothest playback out of the console.

β„Ή SMS browses raw files β€” there is no special folder tree
SMS reads the ordinary filesystem of whatever device you give it and plays media wherever the files sit. Put your movies in any folder you like; SMS shows them in the file browser and plays them in place. There is no ISO, no rip step, and no mandatory folder layout β€” just files. Browse to a video, press βœ•, and watch.

Supported video formats

SMS recognises a video by its container and codec, not merely its extension. The heavy lifting is done by a set of FFmpeg-derived decoders that have been hand-optimised for the PS2's Emotion Engine. The table below lists what plays and the file extensions SMS looks for.

ContainerSupported video codecExtensions
AVIMPEG-4 Part 2 / ASP (DivX, Xvid and Microsoft MPEG-4 v3 tags).avi .divx .xvid
MP4 / ISO-BMFFMPEG-4 Part 2 (mp4v).mp4
MPEG program streamMPEG-1 / MPEG-2.mpg .mpeg
βœ• Modern video codecs are not supported
H.264/AVC, H.265/HEVC, VP9 and AV1 are not decoded. An MP4 carrying one of those video codecs may still play its AAC soundtrack, which looks like successful audio-only playback, but that does not mean the video codec is supported. WMV video is also not registered; .wma is a standalone Windows Media audio route.

Audio inside a video (the soundtrack) is decoded by the same engine that plays standalone music files, so a movie can carry an MP3, AAC, AC3, or other supported audio track. For the full audio picture β€” including playlists and standalone music β€” see Audio & Playlists.

Exact implementation limits

These are hard limits visible in the current source, not estimates:

PropertyLimitWhat it means
Frame dimensionsWidth ≀ 1024 and height ≀ 1024SMS rejects the file if either dimension is greater than 1024.
MPEG-1/2 frame rate23.976, 24, 25, 29.97, 30, 50, 59.94 or 60 fpsThe MPEG sequence-header rate table, including MPEG-2 extensions.
Compressed video packet/sample2,097,088 bytesThe 2 MiB packet ring minus its mandatory 64-byte allocation overhead.
Streams/tracks8 totalThe container-wide stream table includes video, audio and subtitle tracks.
Individual file sizesmaller than 4 GiBFile sizes, positions and seeks use 32-bit addressing.
⚠ 1024Γ—1024 is an acceptance ceiling, not a speed guarantee
The player has no universal maximum bitrate or generic MPEG-4 frame-rate rejection. A file that passes the dimension check can still be too demanding for real-time playback. Work varies with frame rate, B-frames, QPel/GMC, interlacing, motion complexity, audio decoding, device throughput and fragmentation. Large frames may also switch automatically from 32/24-bit to dithered 16-bit GS textures to fit video memory.

Hardware-confirmed profiles

The generated repository fixtures were played on a real PS2. Every positive case below played correctly, including seeking/pause/return-to-browser checks, while unsupported modern-codec cases failed as expected.

Container / codecResolution / rateEncoded profileResult
AVI / Xvid + MP3640Γ—480, 30 fps1.5 Mbit/s video; no B-frames; GOP 30; 128 kbit/s MP3Passed
MPEG-2 PS + MP2640Γ—480, 30 fps2.5 Mbit/s video; GOP 15; 192 kbit/s MP2Passed
MPEG-1 PS + MP2640Γ—480, 30 fps1.15 Mbit/s video; GOP 15; 192 kbit/s MP2Passed
MP4 / mp4v + AAC640Γ—480, 30 fps1.5 Mbit/s video; no B-frames; GOP 30; 48 kHz stereo AAC at 128 kbit/sPassed
MP4 / mp4v + AAC320Γ—240, 30 fps600 kbit/s video; no B-frames; GOP 30; 48 kHz stereo AAC at 128 kbit/sPassed
MP4 / H.264 or H.265 + supported audioTested negative casesUnsupported video codecNo video, as expected; supported audio can still play

This table is the real-time confirmed baseline, not the full accepted range. Higher dimensions up to the 1024-pixel-per-axis source limit remain valid inputs but have not been qualified as universally smooth.

Playing a video

Opening a movie is a three-key affair: pick the device, walk into the folder, press play.

Pick the device

SMS opens on the device menu β€” the top row of device icons. Use Left / Right to highlight the device your movie lives on (a massN: device for USB / MX4SIO / HDD-exFAT / i.LINK, an mmce0: card, the internal hdd0:, a CD/DVD, smb: or udpfs:). If the device you want is not listed, it may not be started yet β€” see Devices Overview for the Autostart toggles and the "Start <device> now" option.

Enter the file list

Press Down to drop into the file menu (the middle browser). Move with Up / Down, page through long folders with L1 / L2, open a folder with βœ•, and step back up one level with β–³ (folder β†’ parent β†’ device menu). The status line at the bottom shows the current path on the left and a clock on the right.

Press play

Highlight the video file and press βœ•. SMS reads the file straight from the device and starts playback. When the movie ends β€” or when you stop it β€” you land back in the browser exactly where you were.

β„Ή Playing from MX4SIO
This fork's headline feature is smooth video playback from an MX4SIO microSD adapter, which earlier SMS builds could not do reliably. It works exactly like any other device: pick the MX4SIO device, browse to your movie, press βœ•. See the MX4SIO page for setup.

Player controls

While a video is playing, the pad drives the player directly:

ButtonAction
SelectPause
StartResume from pause
β–³ TriangleStop playback and return to the file browser

If the movie has an external subtitle file alongside it, SMS displays it over the picture β€” see Subtitles for how subtitle files are matched and styled.

How SMS decodes video

SMS earns its "good video on a stock PS2" reputation by splitting the work between the Emotion Engine and a dedicated piece of PS2 hardware β€” the IPU (Image Processing Unit).

⚠ Performance depends on the file
The PS2 is a fixed console, so how smoothly a movie plays comes down to how demanding the file is. Resolution, frame rate and coding tools affect decoder work; bitrate also affects storage demand but is not a complete measure of decode complexity. A demanding encode can push the console past real-time, especially from a slower or fragmented device. Start from a hardware-confirmed profile when making a new encode.

Encoding tips

If you are making files for SMS rather than playing existing ones, a few choices make the difference between flawless playback and a slideshow.

The exact command used for the confirmed 640Γ—480 MP4 profile is:

ffmpeg -i INPUT.mp4 -c:v mpeg4 -vtag mp4v -b:v 1500k -bf 0 -g 30 \
  -s 640x480 -c:a aac -b:a 128k -ar 48000 -ac 2 \
  -movflags +faststart OUTPUT.mp4

Limitations

SMS is a stock-console player, and a few historic limits come with that. Knowing them up front saves a lot of "why won't this play" head-scratching.

Why can a stock PS2 play "good-resolution movies" at all?

Because SMS never asks the Emotion Engine to do the whole job. It offloads colour-space conversion to the PS2's IPU as an interrupt-driven, parallel process, and it re-shaped the FFmpeg decoder so its output lands in exactly the format the IPU wants β€” cutting the traffic between CPU and memory and freeing the main processor to keep decoding. That parallelism, plus scratchpad-and-DMA optimisation, is what let the original author benchmark peak frame rates well above real-time on standard-definition DivX. It is the same architecture this fork still relies on β€” the fork's work went into reaching those files on more devices (like MX4SIO), not into the decoder itself.

Where to next