Video Codec and File Format Support by Signage Player
H.264 in an MP4 container is still the safest format for digital signage — every mainstream player decodes it, usually in hardware. H.265/HEVC halves the file size at the same quality and is now widely supported, but not universally, so it is the right choice only when you know your fleet. The trap worth knowing: the Raspberry Pi 5 removed H.264 hardware decoding. It decodes HEVC in hardware but falls back to software for H.264, which the Pi 4 handled in hardware — so the "safe" codec is the slower one on the newest Pi. VP9 and AV1 are browser-oriented and poorly supported by signage players; avoid both unless you are playing through a browser you control. If you need one preset for a mixed fleet: H.264 High profile, MP4 container, AAC audio, at the display's native resolution and 8–12 Mbps for 1080p.
Hardware decode by player
Hardware decode matters more than mere support. A player that decodes in software will drop frames, run hot and age faster.
| Player | H.264 | H.265 / HEVC | VP9 | AV1 |
|---|---|---|---|---|
| Raspberry Pi 4 | Hardware, 1080p60 only | Hardware, 4K60 | Software only | No |
| Raspberry Pi 5 | No H.264 block at all | Hardware, 4K60 | Software only | No |
| Android / Android TV | Hardware, universal | Hardware on most | Hardware on many | Newer SoCs only |
| Chrome OS / Chromebox | Hardware | Hardware on newer chips | Hardware | Newer chips only |
| Windows (Intel/AMD) | Hardware | Hardware (needs HEVC extension) | Hardware on newer | Newer GPUs |
| iPad / iOS | Hardware | Hardware, excellent | Software only | A17 / M-series |
| Display system-on-chip | Hardware | Usually hardware | Rarely | Rarely |
| Browser playback | Universal | Safari yes, Chrome partial | Chrome, Firefox | Growing |
Treat this as a planning guide and verify on your actual device: Android and system-on-chip support in particular varies by chipset and firmware, not by the Android version number.
The Raspberry Pi 5 trap
This catches people out because it runs against every expectation about newer hardware being more capable.
| Raspberry Pi 4 | Raspberry Pi 5 | |
|---|---|---|
| H.264 decode | Hardware, up to 1080p60 | No H.264 block at all |
| H.265 decode | Hardware, 4K60 | Hardware, 4K60 |
| Practical result | H.264 fine at 1080p, H.265 for 4K | H.265 for everything |
The Pi 5 dropped the dedicated H.264 decode block entirely. Its CPU is fast enough to software-decode 1080p H.264 in many cases, but it costs CPU headroom, raises temperature and can stutter on high-bitrate files or when anything else is happening on the device. Neither Pi decodes H.264 at 4K in hardware — the Pi 4 stops at 1080p60 — so 4K content should be H.265 on any Pi.
What to do:
- Pi 5 fleet: encode H.265/HEVC. This is the one case where HEVC is clearly correct.
- Pi 4 fleet: H.264 is fine at 1080p; use H.265 for 4K.
- Mixed Pi 4 and Pi 5: HEVC plays in hardware on both, at 4K60. Encode HEVC.
- Any Pi, 4K content: H.265 at 25–35 Mbps. Never 4K H.264.
- Mixed Pi and everything else: H.264 at a moderate bitrate, and keep 1080p files under about 10 Mbps so the Pi 5 software path copes.
See Raspberry Pi digital signage for the full platform picture.
Container formats
The container is the wrapper. It matters less than the codec, but a wrong choice still breaks playback.
| Container | Support | Use for signage |
|---|---|---|
| MP4 | Universal | Default choice. H.264 or H.265 with AAC audio |
| MKV | Variable | Avoid. Widely used in media centres, patchily supported by players |
| WebM | Browser-oriented | Only for browser-based playback, VP8/VP9 |
| MOV | Variable | Export target, not a delivery format. Remux to MP4 |
| AVI | Legacy | Avoid. Old, inefficient, poor codec support |
| TS / M2TS | Broadcast | Only for IPTV and broadcast sources |
Remux, do not re-encode, when you only need to change container. Moving a H.264 stream from MOV to MP4 is a lossless copy operation that takes seconds.
Still image and audio formats
| Image format | Support | Notes |
|---|---|---|
| JPEG | Universal | Default for photographs |
| PNG | Universal | Default for graphics, logos, anything with transparency |
| WebP | Wide | Smaller than both; verify on older players |
| AVIF | Limited | Smallest, but support is still thin on signage players |
| GIF | Universal | Animation support varies; prefer short video |
| SVG | Browser-based only | Excellent for HTML content, not for native image playlists |
| Audio | Support | Notes |
|---|---|---|
| AAC | Universal | Default. Use inside MP4 |
| MP3 | Universal | Fine for standalone audio |
| AC-3 / E-AC-3 | Variable | Broadcast; licensing varies by device |
| FLAC / WAV | Variable | Unnecessarily large for signage |
Recommended encoding presets
Universal preset — plays on essentially everything:
| Setting | Value |
|---|---|
| Codec | H.264, High profile, Level 4.2 |
| Container | MP4 |
| Resolution | Display native — 1920×1080 or 3840×2160 |
| Frame rate | 30 fps (or match the source) |
| Bitrate | 8–12 Mbps at 1080p, 25–35 Mbps at 4K |
| Audio | AAC, 128–192 kbps, or none |
| Keyframe interval | 2 seconds |
| Pixel format | yuv420p |
Efficient preset — when you control the fleet and it supports HEVC:
| Setting | Value |
|---|---|
| Codec | H.265 / HEVC, Main profile |
| Container | MP4 |
| Bitrate | 4–6 Mbps at 1080p, 12–18 Mbps at 4K |
| Everything else | As above |
HEVC roughly halves the file at equivalent quality, which cuts storage, update time and — on metered or cellular links — data cost. See network bandwidth requirements.
yuv420p is not optional. Video exported as 4:2:2 or 4:4:4 from an editor will refuse to play, or play as a green screen, on a large share of hardware decoders. It is one of the most common causes of "the file works on my laptop but not on the screen".
Common playback failures
| Symptom | Likely cause | Fix |
|---|---|---|
| Green or purple screen | Pixel format not yuv420p | Re-encode with -pix_fmt yuv420p |
| Plays on PC, not on player | 4:2:2/4:4:4, or unsupported profile | Re-encode as H.264 High, yuv420p |
| Stutters, drops frames | Software decoding, or bitrate too high | Match codec to hardware decode; lower bitrate |
| Audio but no video | Codec not supported by the decoder | Re-encode to H.264 |
| Video but no audio | Audio codec unsupported (often AC-3) | Re-encode audio to AAC |
| Plays then freezes | Overheating from software decode | Use the hardware-decoded codec; check cooling |
| File rejected on upload | Container or size limit | Remux to MP4 |
Quick decision guide
- Do you know every player in the fleet? No → H.264 High, MP4, yuv420p. Done.
- Yes, and it is all Raspberry Pi 5? → H.265/HEVC.
- Yes, and it is mixed Pi 4 and Pi 5? → H.265/HEVC, which is hardware-decoded on both.
- Yes, and it supports HEVC everywhere, and bandwidth or storage is tight? → H.265/HEVC.
- Browser-based playback you control? → VP9 in WebM is viable, but H.264 still simplest.
- Any doubt at all? → H.264. It is slightly larger and it always plays.
Related reading
- Player compatibility matrix — which platforms each vendor supports
- Raspberry Pi digital signage — the Pi 5 decode change in context
- Screen resolution standards — matching file resolution to the display
- Network bandwidth requirements — what file size means for update windows
- Video encoding guide — the full encoding workflow
Try it on your own screens, free
DigitalSignage.com, which publishes this guide, runs a permanent free plan: the first 3 screens are free forever (no credit card, no ads, no time limit), then from $3 per screen per month with volume pricing via a public calculator. The free SignPlayer runs on Windows, Mac, Linux, Android and Android TV, Chrome OS, Raspberry Pi, iPad or any browser, so you can test a codec on the exact hardware you plan to deploy before committing to it. Start free · 2026 pricing · How 11 vendors compare on price