First entry in master playlist is not played first

Hi,


I have the following master playlist with two variants:


#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1647000,RESOLUTION=640x640,CODECS="avc1.4d001f,mp4a.40.2"
hls1500k/2e3caaf5-cbf22608-92cb-480d-b03a-ba77a759acb5.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=681000,RESOLUTION=320x320,CODECS="avc1.42001e,mp4a.40.2"
hls0600k/2e3caaf5-cbf22608-92cb-480d-b03a-ba77a759acb5.m3u8


When starting a stream like this:


let playerItem = AVPlayerItem(url: <the url>)
if #available(iOS 10.0, *) {
   playerItem.preferredForwardBufferDuration = 10
}
player.replaceCurrentItem(with: playerItem)
player.play()


The stream is initiated with the lower bandwidth variant, even though the higher bandwidth variant is the first entry in the master playlist (please see the logging output below). The documentations clearly states that the first entry in the master playlist will be played at the initiation of a stream.


Why isn't the higher bandwidth stream played first? Any help resolving this issue would be much appreciated.


2018-02-05 18:03:35:671 MyApp[1968:812034] new AVPlayerItem access log entry: {
  "playbackStartDate" : 539546615.56325698,
  "playbackSessionID" : "E9A4A4A0-B401-4D25-B645-706AE75CA6D3",
  "numberOfServerAddressChanges" : 0,
  "durationWatched" : 0.10767102241516113,
  "mediaRequestsWWAN" : 0,
  "segmentsDownloadedDuration" : 2.0464440000000002,
  "numberOfDroppedVideoFrames" : 0,
  "observedMaxBitrate" : 7502487.9833125779,
  "indicatedAverageBitrate" : -1,
  "observedMinBitrate" : 7502487.9833125779,
  "observedBitrateStandardDeviation" : -1,
  "numberOfMediaRequests" : 1,
  "uri" : "https:\/\/my-app-example.org\/video\/hls0600k\/2e3caaf5-cbf22608-92cb-480d-b03a-ba77a759acb5.m3u8",
  "averageVideoBitrate" : 611464.56976100977,
  "numberOfBytesTransferred" : 156416,
  "switchBitrate" : -1,
  "downloadOverdue" : 0,
  "startupTime" : 0.13179397583007812,
  "serverAddress" : "52.222.233.56",
  "indicatedBitrate" : 681000,
  "observedBitrate" : 3751243.991656289,
  "numberOfStalls" : 0,
  "transferDuration" : 0.182304625,
  "averageAudioBitrate" : 0,
  "playbackStartOffset" : 0,
  "playbackType" : "VOD"
}
2018-02-05 18:03:35.672499+0000 MyApp[1968:823002] new AVPlayerItem access log entry: {
  "playbackStartDate" : 539546615.56325698,
  "playbackSessionID" : "E9A4A4A0-B401-4D25-B645-706AE75CA6D3",
  "numberOfServerAddressChanges" : 0,
  "durationWatched" : 0.10767102241516113,
  "mediaRequestsWWAN" : 0,
  "segmentsDownloadedDuration" : 2.0464440000000002,
  "numberOfDroppedVideoFrames" : 0,
  "observedMaxBitrate" : 7502487.9833125779,
  "indicatedAverageBitrate" : -1,
  "observedMinBitrate" : 7502487.9833125779,
  "observedBitrateStandardDeviation" : -1,
  "numberOfMediaRequests" : 1,
  "uri" : "https:\/\/my-app-example.org\/video\/hls0600k\/2e3caaf5-cbf22608-92cb-480d-b03a-ba77a759acb5.m3u8",
  "averageVideoBitrate" : 611464.56976100977,
  "numberOfBytesTransferred" : 156416,
  "switchBitrate" : -1,
  "downloadOverdue" : 0,
  "startupTime" : 0.13179397583007812,
  "serverAddress" : "52.222.233.56",
  "indicatedBitrate" : 681000,
  "observedBitrate" : 3751243.991656289,
  "numberOfStalls" : 0,
  "transferDuration" : 0.182304625,
  "averageAudioBitr
2018-02-05 18:03:36:041 MyApp[1968:812034] new AVPlayerItem access log entry: {
  "playbackStartDate" : 539546616.04021692,
  "playbackSessionID" : "E9A4A4A0-B401-4D25-B645-706AE75CA6D3",
  "numberOfServerAddressChanges" : 0,
  "durationWatched" : 0,
  "mediaRequestsWWAN" : 0,
  "segmentsDownloadedDuration" : 2,
  "numberOfDroppedVideoFrames" : 0,
  "observedMaxBitrate" : 50269016.833702028,
  "indicatedAverageBitrate" : -1,
  "observedMinBitrate" : 37749015.880939253,
  "observedBitrateStandardDeviation" : -1,
  "numberOfMediaRequests" : 1,
  "uri" : "https:\/\/my-app-example.org\/video\/hls1500k\/2e3caaf5-cbf22608-92cb-480d-b03a-ba77a759acb5.m3u8",
  "averageVideoBitrate" : 1650640,
  "numberOfBytesTransferred" : 412660,
  "switchBitrate" : -1,
  "downloadOverdue" : 0,
  "startupTime" : 0,
  "serverAddress" : "52.222.233.56",
  "indicatedBitrate" : 1647000,
  "observedBitrate" : 29339344.238213759,
  "numberOfStalls" : 0,
  "transferDuration" : 0.20787883299999999,
  "averageAudioBitrate" : 0,
  "playbackStartOffset" : 0.31848331299999999,
  "playbackType" : "VOD"
}
2018-02-05 18:03:36.041552+0000 MyApp[1968:822817] new AVPlayerItem access log entry: {
  "playbackStartDate" : 539546616.04021692,
  "playbackSessionID" : "E9A4A4A0-B401-4D25-B645-706AE75CA6D3",
  "numberOfServerAddressChanges" : 0,
  "durationWatched" : 0,
  "mediaRequestsWWAN" : 0,
  "segmentsDownloadedDuration" : 2,
  "numberOfDroppedVideoFrames" : 0,
  "observedMaxBitrate" : 50269016.833702028,
  "indicatedAverageBitrate" : -1,
  "observedMinBitrate" : 37749015.880939253,
  "observedBitrateStandardDeviation" : -1,
  "numberOfMediaRequests" : 1,
  "uri" : "https:\/\/my-app-example.org\/video\/hls1500k\/2e3caaf5-cbf22608-92cb-480d-b03a-ba77a759acb5.m3u8",
  "averageVideoBitrate" : 1650640,
  "numberOfBytesTransferred" : 412660,
  "switchBitrate" : -1,
  "downloadOverdue" : 0,
  "startupTime" : 0,
  "serverAddress" : "52.222.233.56",
  "indicatedBitrate" : 1647000,
  "observedBitrate" : 29339344.238213759,
  "numberOfStalls" : 0,
  "transferDuration" : 0.20787883299999999,
  "averageAudioBitrate" : 0,
  "playbackStartOffset" : 0.3184833129999999

Replies

Hi sdduursma2,


did you find any answer to this?

Hi yooj, no, not yet.

The observedBitrate available from the network while you were fetching the 681kbps layer was about ~3.7mbps. Less than a second later, it opened up to ~29.3mbps and you switched to the 1.6mbps layer. (observedMaxbitrate went from ~7.5mbps to ~50mbps.) That's a big jump. Looks like the player didn't think it had sufficient bandwidth available to fetch the 1.6mbps layer at the start, but it switched up when things improved.