Prompt
Why are my HLS renditions not playing in Safari?
Latest observation
Oct 6, 2026
OpenAI APIWeb search: off
Safari usually plays HLS fine, so when renditions don’t work it’s often because of one of these issues:
Common causes
-
Wrong codec or container
- Safari expects H.264 video + AAC audio in the
.m3u8stream. - HEVC, VP9, Opus, or mismatched profiles can break playback.
- Safari expects H.264 video + AAC audio in the
-
Master playlist / variant playlist problems
- Bad
#EXT-X-STREAM-INFtags, incorrect bandwidth/resolution values, or broken URLs. - Variant playlists must be reachable and valid.
- Bad
-
Missing or incorrect MIME type
- Serve
.m3u8asapplication/vnd.apple.mpegurl(orapplication/x-mpegURL). - Segments should usually be
.tsor fMP4 with correct content types.
- Serve
-
CORS / authentication issues
- If playlists or segments are on another domain, Safari may block them without proper CORS headers.
- Signed URLs or cookies can fail if they aren’t consistently available for all playlist/segment requests.
-
Broken segment URLs or 404s
- If any segment in a rendition returns 404/403, Safari often fails to continue.
-
Encryption / DRM issues
- If the stream is AES-128 encrypted or uses DRM, the key/license endpoint must be accessible and correctly configured.
- Key URI errors are common.
-
Bad playlist formatting
- Missing
#EXTM3U, incorrect line endings, unsupported tags, or malformed durations.
- Missing
-
Server-side range requests / byte-range issues
- Some delivery setups or CDN configs interfere with HLS playback.
Quick checks
- Open the
.m3u8directly in Safari and inspect the network requests. - Verify:
- playlists return 200
- segments return 200
- correct Content-Type
- no CORS errors
- Test with a known-good HLS sample to isolate whether the issue is your encoding or your delivery.
If you want, I can help debug it faster if you share:
- a sample master playlist
- one variant playlist
- codec info (
ffprobeoutput or encoding settings) - the Safari console/network error you’re seeing
Brands