Mixing standard and forced WebVTT Subtitles


I'm trying to create an HLS manifest for VOD that has four WebVTT subtitle tracks representing full subtitles and forced subtitles for both English and Spanish. This same manifest will of course also have no fewer than 6 audio tracks (2.0 AAC, 5.1 AC3 and 5.1 E-AC3 for both English and Spanish). The playback environment for testing is ***** Safari (just navigating directly to the manfiest URL). We'll add things like FairPlay later.

The desired behavior at a minimum is for all 4 subtitle tracks to be visible when loading the manifest in Safari. It would be ideal if forced subtitles show up when the subtitle selector is set to auto, and will switch from english to spanish if the user switches the audio track, and to have the full subtitle tracks available as options regardless of what audio language is streaming.

Here was my first attempt:

#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="capt_1",LANGUAGE="en",NAME="English Forced Subtitles",DEFAULT=YES,AUTOSELECT=YES,URI="presentation_s1/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="capt_1",LANGUAGE="en",NAME="English Subtitles",AUTOSELECT=YES,URI="presentation_s2/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="capt_1",LANGUAGE="es",NAME="Spanish Forced Subtitles",AUTOSELECT=YES,URI="presentation_s3/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="capt_1",LANGUAGE="es",NAME="Spanish Subtitles",AUTOSELECT=YES,URI="presentation_s4/prog_index.m3u8"

This sort of worked. The forced subtitles did play, but the full subtitles were not selectable. I realized that I'd neglected to set the FORCED=TRUE flag on the two forced streams, so I tried again with that:

#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="capt_1",LANGUAGE="en",NAME="English Forced Subtitles",DEFAULT=YES,AUTOSELECT=YES,FORCED=YES,URI="presentation_s1/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="capt_1",LANGUAGE="en",NAME="English Subtitles",AUTOSELECT=YES,URI="presentation_s2/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="capt_1",LANGUAGE="es",NAME="Spanish Forced Subtitles",AUTOSELECT=YES,FORCED=YES,URI="presentation_s3/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="capt_1",LANGUAGE="es",NAME="Spanish Subtitles",AUTOSELECT=YES,URI="presentation_s4/prog_index.m3u8"

This time I got full subtitles to show up, but I never see the forced subtitles, regardless of setting.

How should my subtitle tags look given my desired behavior? I'm using Unified Streaming Packager to create these packages, but can manually manipulate the manifests if necessary.


One additional note, QuickTime Player X on El Capitan does display the expected behavior! When I set the subtitle selector to Auto it displays only the forced subtitles.

Safari on iOS 10 shows the same behavior as Safari on El Capitan.

Odd that there's different behavior in QuickTime X and Safai.

The point of forced subtitles is that they "appear without user intervention".

You should never see the FORCED options in the selection list, only the non-forced options.


I am also running into issues with getting forced subtitles to appear, while allowing the user to switch to more, non-forced subtitle tracks.

This Apple-provided sample looks very much like what I would like to do:


It carries 8 subtitle tracks: English, French, Spanish and Japanese, each one in forced and non-forced (SDH) versions.

If I try that sample in either Safari (10.0.2 on Sierra) or iOS (10.2), only the SDH versions appear in the selection list, which I understand is expected. However, the player also never renders the forced tracks, even with the selector set to "auto". I tested with the system language set to English and French. What are supposed to do to get forced subtitles to appear, would there be another working example?

As noted by derekprestegard, QuickTime X has a different behavior and allow manual selection through all 8 tracks.



Are the Forced subtitles still working in latest iOS versions ? From all my tests, it seems no. (bip bop as my own streams)

Here is an example stream


I am trying to understand this behavior as well. Does anyone have further insight into this?