Skip to main content

Supported Formats & Codecs

Better Player uses the native media players for each platform: ExoPlayer (Media3) on Android, AVPlayer (AVFoundation) on iOS and macOS, libmpv on Windows and Linux, Shaka Player on the Web, and native Tizen Multimedia <player.h> on Tizen (Experimental).

Because we rely on these native engines without applying custom decoding, Better Player supports whatever formats the underlying platform player supports.

Here is a comprehensive breakdown of supported formats, streaming protocols, and codecs across platforms.


1. Streaming Protocols​

ProtocolAndroidiOSmacOSWindowsLinuxWeb
HLS (HTTP Live Streaming)✓✓ (Native)✓ (Native)✓✓✓
MPEG-DASH✓xx✓✓✓
SmoothStreaming (MSS)✓xxxxx
RTSP✓xx✓✓x
Progressive HTTP (MP4, WebM…)✓✓✓✓✓✓
Low-latency HLS (LL-HLS)✓✓ (iOS 15+)✓ (macOS 12+)✓✓✓
Low-latency DASH✓xx✓✓✓

Note on Apple platforms (iOS & macOS): Apple platforms are heavily HLS-centric. Apple does not provide native support for DASH or SmoothStreaming in AVFoundation. If you need to support iOS or macOS, HLS is strongly recommended.

Note on RTSP: RTSP streaming is supported on Android (via ExoPlayer), Windows (via libmpv), and Linux (via libmpv). Native support for RTSP is not available on Apple platforms (AVPlayer) or Web, and typically requires server-side proxying (e.g. transmuxing to WebRTC or HLS).


2. Video Codecs​

| Codec | Android | iOS | macOS | Web (Chrome) | Web (Safari) | Web (Firefox) | |---|---|---|---|---|---|---|---| | H.264 / AVC | ✓ All devices | ✓ | ✓ | ✓ | ✓ | ✓ | | H.265 / HEVC | ⚠️ HW only (Android 5+) | ✓ (A9+) | ✓ (Apple Silicon, Intel) | ⚠️ Limited | ✓ (Safari 11+) | x | | VP8 | ✓ | x | x | ✓ | x | ✓ | | VP9 | ✓ (Android 4.4+) | ⚠️ iOS 14+ | ⚠️ macOS 11+ | ✓ | ✓ (Safari 14+) | ✓ | | AV1 | ⚠️ HW only (Android 10+) | ⚠️ iOS 17+ | ⚠️ macOS 14+ | ✓ | ⚠️ Safari 17+ | ✓ | | MPEG-4 / H.263 | ✓ (Legacy) | ✓ | ✓ | ⚠️ | x | ⚠️ |

Recommendation: H.264 Baseline/Main/High is the only universal codec that guarantees safe playback across all old and new devices across all platforms.


3. Audio Codecs​

CodecAndroidiOSmacOSWindowsLinuxWeb
AAC-LC✓✓✓✓✓✓
AAC-HE v1 / v2✓✓✓✓✓✓
MP3✓✓✓✓✓✓
Opus✓✓ (iOS 11+)✓ (macOS 10.13+)✓✓✓
Vorbis✓xx✓✓✓
FLAC✓ (Android 3.1+)✓✓✓✓✓
AC-3 / E-AC-3 (Dolby)⚠️ Passthrough / HW✓✓✓✓⚠️ Browser-dependent
ALAC✓✓✓✓✓x
PCM / WAV✓✓✓✓✓✓

4. Container Formats​

ContainerAndroidiOSmacOSWindowsLinuxWeb
MP4 / M4V✓✓✓✓✓✓
fMP4 (Fragmented MP4)✓✓✓✓✓✓
WebM✓xx✓✓✓
MKV (Matroska)✓xx✓✓x
MPEG-TS (.ts)✓ via HLS✓ via HLS✓ via HLS✓✓✓ via HLS
OGG✓xx✓✓✓
MOV (QuickTime)⚠️ Limited✓✓✓✓x

5. DRM (Digital Rights Management)​

DRM SystemAndroidiOSmacOSWindowsLinuxWeb
Widevine L1/L3✓xxxx✓ (Chrome, Firefox)
FairPlay (FPS)x✓✓xx✓ (Safari only)
PlayReadyxxxxx⚠️ (Edge only)
ClearKey✓✓ (HLS AES-128)✓ (HLS AES-128)x✓✓

Note on Multi-DRM: To achieve full cross-platform DRM coverage, your backend streaming architecture must provide both Widevine (for Android and Chrome/Web) and FairPlay (for iOS, macOS, and Safari) in parallel.


6. Subtitle & Caption Formats​

Subtitle handling is broken down into two distinct categories in Better Player: external subtitles (parsed by Flutter) and in-stream embedded subtitles (parsed by the native player).

External Subtitles (Flutter Layer)​

These formats are loaded manually via PlayerSubtitlesSource and rendered using Better Player's custom Flutter UI overlay. They behave identically across all platforms.

FormatSupportNotes
SRT (SubRip)✓ FullPlain text, no styling.
WebVTT✓ FullSupports inline styling (<b>, <i>, <c.color>), HTML entity decoding, and X-TIMESTAMP-MAP sync for HLS live streams.
TTML / DFXP / XML✓ FullTimed Text Markup Language & IMSC1 with SMPTE frame rates, style inheritance, regions, and inline tags.

Embedded / In-Stream Subtitles & Closed Captions​

These tracks are embedded directly inside the HLS manifest or video stream. Embedded CEA-608 / CEA-708 closed captions are decoded by the underlying platform engine and rendered in Flutter using PlayerSubtitlesConfiguration.

FormatAndroidiOSmacOSWindowsLinuxWeb (Shaka)
WebVTT (in HLS / DASH)✓✓✓✓✓✓
TTML / DFXP✓✓✓✓✓✓
CEA-608 (EIA-608)✓✓✓✓✓✓
CEA-708✓✓✓✓✓✓
SMPTE-TT✓xx✓✓⚠️
SubStation Alpha (SSA)xxx✓✓x

Customization: Embedded CEA-608 and CEA-708 closed captions are rendered via PlayerSubtitlesDrawer in Flutter, respecting your PlayerSubtitlesConfiguration styling (font size, font family, colors, background, and outlines).