Manual legible (subtitle) selection not honored on live LL-HLS — select(_:in:) reverts to “off” within ~2s; automatic selection never displays non-forced subtitles

Environment: iOS 18 / iOS 26, AVPlayer + AVPlayerItem, live low-latency HLS (LL-HLS). Subtitle renditions are regular (non-forced) WebVTT: AUTOSELECT=YES, FORCED=NO. System captioning (Closed Captions + SDH) is OFF (default). Direct CDN, no P2P.

Master playlist (subtitle part):

#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Korean (AI)",AUTOSELECT=YES,FORCED=NO,LANGUAGE="kor",URI="..."
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="English (AI)",AUTOSELECT=YES,FORCED=NO,LANGUAGE="eng",URI="..."
#EXT-X-STREAM-INF:...,SUBTITLES="subs"

Problem

When the user picks a subtitle language we call playerItem.select(option, in: legibleGroup) with an option that is a genuine member of the item's current legible group. Right after the call, item.currentMediaSelection.selectedMediaOption(in:) returns the requested option. But within ~2 seconds, on a subset of real-user sessions, the selection spontaneously reverts with no further app interaction:

  • most often to Off (no legible output is delivered afterwards), or
  • it stays stuck on the previously selected language (a subsequent select to another language, or to Off, is silently ignored).

It is intermittent and only appears under real conditions (frequent live playlist reloads / reconnects); it does not reproduce in a short, clean session.

What we verified

  • The option passed to select(_:in:) is a real member of the current group (re-resolved from item.asset); the call returns without error and reads back correctly immediately after.
  • appliesMediaSelectionCriteriaAutomatically is the default true. Per the AV Foundation Release Notes ("Advice about subtitles"), automatic selection excludes options that are not AVMediaCharacteristicContainsOnlyForcedSubtitles. So on each live reload the automatic re-selection resolves non-forced subtitles to Off, appearing to override the manual select(_:in:).
  • Reading the selected option against a freshly obtained group instance returns the same value as against the original instance — so this is a real state change, not a mismatched-group read.

Questions

  1. On live HLS reloads with appliesMediaSelectionCriteriaAutomatically == true, is manual select(_:in:) for .legible expected to be overridden by automatic media selection? If so, is setMediaSelectionCriteria(_:forMediaCharacteristic:) the intended way to persist a user's choice?
  2. setMediaSelectionCriteria for subtitles is itself reported as unreliable (sometimes no subtitles) — see thread 108403. What is the recommended, deterministic way to keep a user-selected non-forced subtitle displayed across live playlist reloads, including turning subtitles Off?
  3. Is this the same underlying behavior as FB13344652 ("Auto (Recommended) doesn't display subtitles despite language match / DEFAULT=YES")?

Related: https://developer.apple.com/forums/thread/722752 (FB13344652) , https://developer.apple.com/forums/thread/108403

Note that the normal process of refetching the HLS playlist won't cause automatic media selection to run.

  1. Manual media selection should not be changed by automatic media selection unless AVPlayerItem's selectMediaOptionAutomaticallyInMediaSelectionGroup: is called.

  2. Legible criteria affects how subtitles are selected. However, the criteria only applies when automatic media selection is enabled and automatic media selection has determined that the criteria needs to be applied. Related to question #1, manual selection disables automatic media selection, so specifying criteria when in manual mode won't change the subtitle selection. Also, the global MACaptionAppearanceDisplayType affects how subtitles are chosen. If you want to turn on subtitles and supply criteria, you should also check/set MACaptionAppearanceDisplayType.

See https://developer.apple.com/documentation/mediaaccessibility/macaptionappearancedisplaytype

  1. "Auto" has been removed from the UI, although automatic media selection still happens automatically by default. Note that in most cases, an audible language mismatch will result in subtitles if there is a matching non-forced subtitle language available.

Regarding issue #1, which seems to be the focus of this post, Could you please file a Feedback Assistant and upload a sysdiagnose when you saw the issue, along with the time of the issue, and post the FB # here?

Manual legible (subtitle) selection not honored on live LL-HLS — select(_:in:) reverts to “off” within ~2s; automatic selection never displays non-forced subtitles
 
 
Q