Summary
On iOS 26, HLS alternate audio track selection behaves inconsistently on both VOD and live streams: the French track falls back to the DEFAULT=YES (English) track after manual selection, and in some cases switching to a non-default track appears to work but it is then impossible to switch back to English.
Environment
iOS version: 26
Players affected: native Safari on iOS 26 and THEOplayer (issue also reproducible on THEOplayer's own demo page)
Stream type: HLS/CMAF with demuxed alternate audio renditions (CMFC container)
Affected stream types: both VOD and live streaming
Issue NOT present on iOS 17/18
Manifest
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-STREAM-INF:BANDWIDTH=8987973,AVERAGE-BANDWIDTH=8987973,VIDEO-RANGE=SDR,CODECS="avc1.640028",RESOLUTION=1920x1080,FRAME-RATE=29.970,AUDIO="program_audio"
video_1080p.m3u8
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="program_audio",LANGUAGE="en",ASSOC-LANGUAGE="en",NAME="English",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio_ENG.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="program_audio",LANGUAGE="de",ASSOC-LANGUAGE="de",NAME="Deutsch",AUTOSELECT=YES,DEFAULT=NO,CHANNELS="2",URI="audio_DEU.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="program_audio",LANGUAGE="fr",ASSOC-LANGUAGE="fr",NAME="Francais",AUTOSELECT=YES,DEFAULT=NO,CHANNELS="2",URI="audio_FRA.m3u8"
Steps to Reproduce
Load the HLS manifest (VOD or live) in Safari on iOS 26, or in any AVFoundation-backed player
Start playback — English plays correctly as DEFAULT
Manually select "Francais" from the audio track selector
Observe that English audio continues playing (French does not play)
In a separate scenario: manually select "Deutsch" — German plays correctly
Attempt to switch back to English — English does not resume; audio remains on the previously selected track
Expected behavior
Selecting any track should immediately switch to that language
Switching back to English (DEFAULT=YES) should work at any time
Behavior should be consistent across VOD and live streams
Actual behavior
Two distinct anomalies observed, reproducible on both VOD and live streams, in both native Safari and THEOplayer:
French-specific fallback: selecting the French track causes playback to fall back to English. This does not happen with German.
Cannot return to English: in cases where a non-default track plays correctly, attempting to switch back to the DEFAULT=YES track (English) fails — the previous non-default track continues playing.
The fact that the issue reproduces in native Safari confirms this is an AVFoundation/WebKit-level regression, not a third-party player bug.
What we have already verified and ruled out
LANGUAGE codes are BCP-47 compliant (en, fr, de) ✓
EXT-X-VERSION:4 is present ✓
Audio codec removed from STREAM-INF CODECS (video-only) ✓
ASSOC-LANGUAGE attribute added matching LANGUAGE value ✓
Container metadata verified via ffprobe: mdhd box correctly contains language tags (e.g. "fra") ✓
Audio segment content verified via ffplay: correct audio in each language file ✓
French audio source file contains correct French audio content ✓
Issue reproduces in native Safari on iOS 26, confirming it is not a THEOplayer-specific bug
Issue does NOT reproduce on iOS 17/18 with the same manifest and segments
Additional notes
The VOD stream is packaged with AWS MediaConvert, CMAF output group, SEGMENTED_FILES, AAC-LC codec (mp4a.40.2), 128kbps, 48kHz stereo. English uses AudioTrackType ALTERNATE_AUDIO_AUTO_SELECT_DEFAULT; French and German use ALTERNATE_AUDIO_AUTO_SELECT. The live stream uses AWS MediaPackage with a similar CMAF/HLS output configuration.
Please advise whether this is a known regression in AVFoundation on iOS 26 and whether a fix is planned.
Selecting any option will automatically load the page