Why don't my new m3u8/HLS streams "adapt" - up-shift to higher bandwidth?

I have an iOS app which has been in the AppStore for 3+ years. We've been using the same video production pipline the whole time,


Since we upgraded to the most recent Apple streaming media tools, our HLS streams no longer "up-shift" to the higher bandwidth streams.


Recently, our video production machine was upgraded to OSx Sierra. When we went to install the Apple streamingtools with the media segmenter and the variant playlist generator, I found the installer I had was out of date, or rather, would not work. I downloaded the most recent version from Apple (streamingtools_beta194_signed.dmg) and ran the installer, set up everything else (we use HandBrake CLI for transcoding).


But, now I see that something has changed in the new Apple toolset. The Variant (master) Playlist creator is doing something different, the end result is different and when we play the master playlist (m3u8) our streams no longer adapt - or up-shift. Videos which were produced before the upgrade continue to play correctly. Here is what an older playlist looks like, created before we updated our tools:


#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=559334,CODECS="mp4a.40.2, avc1.4d4015"
500k/MT2_0400_Final_500k.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=240280,CODECS="mp4a.40.2, avc1.4d400b"
150k/MT2_0400_Final_150k.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=354685,CODECS="mp4a.40.2, avc1.4d4015"
300k/MT2_0400_Final_300k.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=898064,CODECS="mp4a.40.2, avc1.4d4015"
800k/MT2_0400_Final_800k.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1321088,CODECS="mp4a.40.2, avc1.4d401f"
1200k/MT2_0400_Final_1200k.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2620515,CODECS="mp4a.40.2, avc1.4d401f"
2400k/MT2_0400_Final_2400k.m3u8


And this is the newer output from the new 'variantplaylistcreator' produced this week - it has an extra line per-video (the EXT-X-MEDIA tag) - I've read the docs on DEFAULT=YES And AUTOSELECT=YES but I can't find out what FORCED=YES does - either way, I've fiddled with this and I can't seem to figure out A) which parts of this are breaking my HLS streams - WHY do they no longer up-shift?


To be specific - what is this "it won't up-shift" - I mean the stream intiially loads the 500kbps video, because it is the first in the playlist (as you can see in both examples). After that, client/player negotiation should cause the server to deliver the higher-bandwidth streams (if possible due to network conditions of course) - but it doesn't, it just sticks on the 500kbps video no matter what.

Same exact video segments, but with the playlist above (assuming the right file names) - same video the above playlist, and the stream up-shifts within 5 seconds after start. You can even see it happen in QuickTime if you watch the Video Inspector popup window, you can see the dimentions change from the 512x288 of the 500kbps stream, to the 1024x576 of the 1200/2400kbps streams (I cant tell which - doesn't matter).


And more important, what parameters should I be passing not/passing to the variantplaylistcreator to emit the correct m3u8 which actually works?


#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio1",NAME="audio1",DEFAULT=YES,AUTOSELECT=YES,FORCED=YES,CHANNELS="1"
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=519182,BANDWIDTH=561809,CODECS="mp4a.40.2, avc1.4d4015",RESOLUTION=512x288,FRAME-RATE=23.976,CLOSED-CAPTIONS=NONE,AUDIO="audio1"
500k/EL2_0100_Final_500k.m3u8
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio2",NAME="audio2",DEFAULT=YES,AUTOSELECT=YES,FORCED=YES,CHANNELS="1"
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=160810,BANDWIDTH=173261,CODECS="mp4a.40.2, avc1.4d400b",RESOLUTION=256x144,FRAME-RATE=15.000,CLOSED-CAPTIONS=NONE,AUDIO="audio2"
150k/EL2_0100_Final_150k.m3u8
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio3",NAME="audio3",DEFAULT=YES,AUTOSELECT=YES,FORCED=YES,CHANNELS="1"
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=311120,BANDWIDTH=334791,CODECS="mp4a.40.2, avc1.4d4015",RESOLUTION=512x288,FRAME-RATE=15.000,CLOSED-CAPTIONS=NONE,AUDIO="audio3"
300k/EL2_0100_Final_300k.m3u8
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio4",NAME="audio4",DEFAULT=YES,AUTOSELECT=YES,FORCED=YES,CHANNELS="1"
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=821984,BANDWIDTH=899073,CODECS="mp4a.40.2, avc1.4d4015",RESOLUTION=512x288,FRAME-RATE=23.976,CLOSED-CAPTIONS=NONE,AUDIO="audio4"
800k/EL2_0100_Final_800k.m3u8
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio5",NAME="audio5",DEFAULT=YES,AUTOSELECT=YES,FORCED=YES,CHANNELS="1"
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1228197,BANDWIDTH=1344825,CODECS="mp4a.40.2, avc1.4d401f",RESOLUTION=1024x576,FRAME-RATE=23.976,CLOSED-CAPTIONS=NONE,AUDIO="audio5"
1200k/EL2_0100_Final_1200k.m3u8
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio6",NAME="audio6",DEFAULT=YES,AUTOSELECT=YES,FORCED=YES,CHANNELS="1"
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2444925,BANDWIDTH=2687528,CODECS="mp4a.40.2, avc1.4d401f",RESOLUTION=1024x576,FRAME-RATE=23.976,CLOSED-CAPTIONS=NONE,AUDIO="audio6"
2400k/EL2_0100_Final_2400k.m3u8

Replies

First. the most recent version of the tools is *not* 'streamingtools_beta194_signed.dmg'. That was released in 2014.

The most recent version is 'HTTPLiveStreamingTools_268.dmg'. It was released 19 June 2016.


The reason you aren't upshifting is because each variant has a different name. A different audio group is not a problem if the codecs are compatible, but a different name requires user intervention to switch. In your playback (say in Safari) you can click on the selection button and you should see choices of audio1 through audio6.


Please get the most recent tools and try to generate a stream again. If you are still getting the multiple audio groups, then file a bug. Supply the command lines you use for the mediafilesegmenter as well as the command line for variantplaylistcreator.

(Do not do a forum post instead of a bug! A bug allows us to attach files, track status, and allows you to query DTS about the status. A forum post has no guarantee of being read by an Apple engineer, and we do not generate bugs from forums posts.)


BTW, "FORCED" has no meaning on an audio rendition. It is only applicable to subtitle renditions.