Hls.js: OSX High Sierra + Chrome (and Firefox) Playback Issues - bufferStalledError

Created on 27 Sep 2017  ·  51Comments  ·  Source: video-dev/hls.js

Environment

  • [x] The stream has correct Access-Control-Allow-Origin headers (CORS)
  • [x] There are no network errors such as 404s in the browser console when trying to play the stream
  • [x] The issue observed is not already reported by searching on Github under https://github.com/video-dev/hls.js/issues
  • [x] The issue occurs in the latest reference client on http://video-dev.github.io/hls.js/demo and not just on my page
  • Link to playable M3U8 file: https://stream.ec.nau.edu/live/amlst:channelfour/playlist.m3u8
  • Hls.js version: 0.8.4
  • Browser name/version: Chrome 61.0.3163.100 (Official Build) (64-bit), Firefox 55.0.3 (64-bit)
  • OS name/version: OSX 10.13 (public release)
Steps to reproduce
  1. Using OSX 10.13, launch Chrome (or Firefox)
  2. Visit https://video-dev.github.io/hls.js/demo
  3. Enter stream, attempt to play
    Expected behavior

Click on play, video plays immediately

Actual behavior

What actually happened
Click on play, warnings {type: "mediaError", details: "bufferStalledError", fatal: false, buffer: 61.391667} spawn in console, video plays after 15 seconds. On Firefox. behavior is similar with this in the log: The video playback was aborted due to a corruption problem or because the video used features your browser did not support - NS_ERROR_DOM_MEDIA_FATAL_ERR (0x806e0005), although playback eventually starts.

This does not happen on OSX 10.12.6, only 10.13. These versions of Chrome and Firefox playback normally on 10.12.6 as well as Windows 10. It seems isolated to 10.13 only. I've tried baseline and main h264 3.1 and 4.1 live streams, the behavior is largely the same.

Console output
Chrome:
logger.js:37 [warn] > playback stalling in high buffer @0.038333
(anonymous) @ logger.js:37
_checkBuffer @ stream-controller.js:1503
doTick @ stream-controller.js:172
tick @ stream-controller.js:125
setInterval (async)
startLoad @ stream-controller.js:74
(anonymous) @ hls.js:178
startLoad @ hls.js:178
onManifestParsed @ stream-controller.js:898
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
onManifestLoaded @ level-controller.js:120
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
loadsuccess @ playlist-loader.js:530
readystatechange @ xhr-loader.js:117
XMLHttpRequest.send (async)
(anonymous) @ VM41:1
loadInternal @ xhr-loader.js:80
load @ xhr-loader.js:39
load @ playlist-loader.js:217
onManifestLoading @ playlist-loader.js:166
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
loadSource @ hls.js:173
loadStream @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:285
(anonymous) @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:258
?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:528 {type: "mediaError", details: "bufferStalledError", fatal: false, buffer: 61.391667}
(anonymous) @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:528
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
_checkBuffer @ stream-controller.js:1504
doTick @ stream-controller.js:172
tick @ stream-controller.js:125
setInterval (async)
startLoad @ stream-controller.js:74
(anonymous) @ hls.js:178
startLoad @ hls.js:178
onManifestParsed @ stream-controller.js:898
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
onManifestLoaded @ level-controller.js:120
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
loadsuccess @ playlist-loader.js:530
readystatechange @ xhr-loader.js:117
XMLHttpRequest.send (async)
(anonymous) @ VM41:1
loadInternal @ xhr-loader.js:80
load @ xhr-loader.js:39
load @ playlist-loader.js:217
onManifestLoading @ playlist-loader.js:166
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
loadSource @ hls.js:173
loadStream @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:285
(anonymous) @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:258
?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:528 {type: "mediaError", details: "bufferNudgeOnStall", fatal: false}
(anonymous) @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:528
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
_checkBuffer @ stream-controller.js:1515
doTick @ stream-controller.js:172
tick @ stream-controller.js:125
setInterval (async)
startLoad @ stream-controller.js:74
(anonymous) @ hls.js:178
startLoad @ hls.js:178
onManifestParsed @ stream-controller.js:898
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
onManifestLoaded @ level-controller.js:120
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
loadsuccess @ playlist-loader.js:530
readystatechange @ xhr-loader.js:117
XMLHttpRequest.send (async)
(anonymous) @ VM41:1
loadInternal @ xhr-loader.js:80
load @ xhr-loader.js:39
load @ playlist-loader.js:217
onManifestLoading @ playlist-loader.js:166
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
loadSource @ hls.js:173
loadStream @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:285
(anonymous) @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:258
logger.js:37 [warn] > playback stalling in high buffer @0.138333
(anonymous) @ logger.js:37
_checkBuffer @ stream-controller.js:1503
doTick @ stream-controller.js:172
tick @ stream-controller.js:125
setInterval (async)
startLoad @ stream-controller.js:74
(anonymous) @ hls.js:178
startLoad @ hls.js:178
onManifestParsed @ stream-controller.js:898
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
onManifestLoaded @ level-controller.js:120
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
loadsuccess @ playlist-loader.js:530
readystatechange @ xhr-loader.js:117
XMLHttpRequest.send (async)
(anonymous) @ VM41:1
loadInternal @ xhr-loader.js:80
load @ xhr-loader.js:39
load @ playlist-loader.js:217
onManifestLoading @ playlist-loader.js:166
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
loadSource @ hls.js:173
loadStream @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:285
(anonymous) @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:258
?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:528 {type: "mediaError", details: "bufferStalledError", fatal: false, buffer: 69.36666699999999}
(anonymous) @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:528
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
_checkBuffer @ stream-controller.js:1504
doTick @ stream-controller.js:172
tick @ stream-controller.js:125
setInterval (async)
startLoad @ stream-controller.js:74
(anonymous) @ hls.js:178
startLoad @ hls.js:178
onManifestParsed @ stream-controller.js:898
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
onManifestLoaded @ level-controller.js:120
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
loadsuccess @ playlist-loader.js:530
readystatechange @ xhr-loader.js:117
XMLHttpRequest.send (async)
(anonymous) @ VM41:1
loadInternal @ xhr-loader.js:80
load @ xhr-loader.js:39
load @ playlist-loader.js:217
onManifestLoading @ playlist-loader.js:166
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
loadSource @ hls.js:173
loadStream @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:285
(anonymous) @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:258
?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:528 {type: "mediaError", details: "bufferNudgeOnStall", fatal: false}
(anonymous) @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:528
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
_checkBuffer @ stream-controller.js:1515
doTick @ stream-controller.js:172
tick @ stream-controller.js:125
setInterval (async)
startLoad @ stream-controller.js:74
(anonymous) @ hls.js:178
startLoad @ hls.js:178
onManifestParsed @ stream-controller.js:898
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
onManifestLoaded @ level-controller.js:120
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
loadsuccess @ playlist-loader.js:530
readystatechange @ xhr-loader.js:117
XMLHttpRequest.send (async)
(anonymous) @ VM41:1
loadInternal @ xhr-loader.js:80
load @ xhr-loader.js:39
load @ playlist-loader.js:217
onManifestLoading @ playlist-loader.js:166
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
loadSource @ hls.js:173
loadStream @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:285
(anonymous) @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:258
logger.js:37 [warn] > playback stalling in high buffer @0.338333
(anonymous) @ logger.js:37
_checkBuffer @ stream-controller.js:1503
doTick @ stream-controller.js:172
tick @ stream-controller.js:125
setInterval (async)
startLoad @ stream-controller.js:74
(anonymous) @ hls.js:178
startLoad @ hls.js:178
onManifestParsed @ stream-controller.js:898
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
onManifestLoaded @ level-controller.js:120
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
loadsuccess @ playlist-loader.js:530
readystatechange @ xhr-loader.js:117
XMLHttpRequest.send (async)
(anonymous) @ VM41:1
loadInternal @ xhr-loader.js:80
load @ xhr-loader.js:39
load @ playlist-loader.js:217
onManifestLoading @ playlist-loader.js:166
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
loadSource @ hls.js:173
loadStream @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:285
(anonymous) @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:258
?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:528 {type: "mediaError", details: "bufferStalledError", fatal: false, buffer: 69.16666699999999}
(anonymous) @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:528
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
_checkBuffer @ stream-controller.js:1504
doTick @ stream-controller.js:172
tick @ stream-controller.js:125
setInterval (async)
startLoad @ stream-controller.js:74
(anonymous) @ hls.js:178
startLoad @ hls.js:178
onManifestParsed @ stream-controller.js:898
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
onManifestLoaded @ level-controller.js:120
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
loadsuccess @ playlist-loader.js:530
readystatechange @ xhr-loader.js:117
XMLHttpRequest.send (async)
(anonymous) @ VM41:1
loadInternal @ xhr-loader.js:80
load @ xhr-loader.js:39
load @ playlist-loader.js:217
onManifestLoading @ playlist-loader.js:166
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
loadSource @ hls.js:173
loadStream @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:285
(anonymous) @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:258
logger.js:37 [error] > still stuck in high buffer @0.338333 after 3, raise fatal error
(anonymous) @ logger.js:37
_checkBuffer @ stream-controller.js:1517
doTick @ stream-controller.js:172
tick @ stream-controller.js:125
setInterval (async)
startLoad @ stream-controller.js:74
(anonymous) @ hls.js:178
startLoad @ hls.js:178
onManifestParsed @ stream-controller.js:898
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
onManifestLoaded @ level-controller.js:120
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
loadsuccess @ playlist-loader.js:530
readystatechange @ xhr-loader.js:117
XMLHttpRequest.send (async)
(anonymous) @ VM41:1
loadInternal @ xhr-loader.js:80
load @ xhr-loader.js:39
load @ playlist-loader.js:217
onManifestLoading @ playlist-loader.js:166
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
loadSource @ hls.js:173
loadStream @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:285
(anonymous) @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:258
?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:528 {type: "mediaError", details: "bufferStalledError", fatal: true}
(anonymous) @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:528
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
_checkBuffer @ stream-controller.js:1518
doTick @ stream-controller.js:172
tick @ stream-controller.js:125
setInterval (async)
startLoad @ stream-controller.js:74
(anonymous) @ hls.js:178
startLoad @ hls.js:178
onManifestParsed @ stream-controller.js:898
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
onManifestLoaded @ level-controller.js:120
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
loadsuccess @ playlist-loader.js:530
readystatechange @ xhr-loader.js:117
XMLHttpRequest.send (async)
(anonymous) @ VM41:1
loadInternal @ xhr-loader.js:80
load @ xhr-loader.js:39
load @ playlist-loader.js:217
onManifestLoading @ playlist-loader.js:166
onEventGeneric @ event-handler.js:65
onEvent @ event-handler.js:53
EventEmitter.emit @ events.js:96
trigger @ hls.js:88
loadSource @ hls.js:173
loadStream @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:285
(anonymous) @ ?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined:258
logger.js:37 [warn] > playback not stuck anymore @0, after NaNms
Firefox:
[log] > loadSource:https://stream.ec.nau.edu/live/amlst:channelfour/playlist.m3u8  hls.js:125:7
[log] > trigger BUFFER_RESET  hls.js:125:7
[log] > set autoLevelCapping:-1  hls.js:125:7
[log] > attachMedia  hls.js:125:7
[log] > media source opened  hls.js:125:7
[log] > manifest loaded,3 level(s) found, first bitrate:628000  logger.js:37:6
[log] > startLoad(-1)  logger.js:37:6
[log] > switching to level 0  logger.js:37:6
[log] > loading playlist for level 0  logger.js:37:6
[log] > main stream:STOPPED->IDLE  logger.js:37:6
[log] > audio tracks updated  logger.js:37:6
[log] > subtitle tracks updated  logger.js:37:6
[log] > live playlist, reload in 10290 ms  logger.js:37:6
[log] > level 0 loaded [45455,45457],duration:31.099  logger.js:37:6
[log] > live playlist - first load, unknown sliding  logger.js:37:6
[log] > configure startPosition to 0  logger.js:37:6
[log] > Loading 45455 of [45455 ,45457],level 0, currentTime:0.000,bufferEnd:0.000  logger.js:37:6
[log] > demuxing in webworker  logger.js:37:6
[log] > main stream:IDLE->FRAG_LOADING  logger.js:37:6
parsing level duration :1075us,count:1  demo:370:11
  d378d9a6-ddba-a74f-8137-5b0713f948f4:516:7
[log] > Loaded  45455 of [45455 ,45457],level 0  logger.js:37:6
[log] > main stream:FRAG_LOADING->PARSING  logger.js:37:6
[log] > Parsing 45455 of [45455 ,45457],level 0, cc 0  logger.js:37:6
[log] > main:discontinuity detected  logger.js:37:6
[log] > main:switch detected  logger.js:37:6
"[log] > manifest codec:mp4a.40.2,ADTS data:type:2,sampleingIndex:3[48000Hz],channelConfig:2"  d378d9a6-ddba-a74f-8137-5b0713f948f4:516:7
[log] > parsed codec:mp4a.40.2,rate:48000,nb channel:2  d378d9a6-ddba-a74f-8137-5b0713f948f4:516:7
[log] > audio sampling rate : 48000  d378d9a6-ddba-a74f-8137-5b0713f948f4:516:7
[log] > InitPTS for cc:0 found from video track:-1352548840  logger.js:37:6
[log] > creating sourceBuffer(audio/mp4;codecs=mp4a.40.2)  logger.js:37:6
[log] > creating sourceBuffer(video/mp4;codecs=avc1.4d001f)  logger.js:37:6
[log] > main track:audio,container:audio/mp4,codecs[level/parsed]=[mp4a.40.2/mp4a.40.2]  logger.js:37:6
[log] > main track:video,container:video/mp4,codecs[level/parsed]=[avc1.4d001f/avc1.42801f]  logger.js:37:6
[log] > Parsed audio,PTS:[0.052,11.252],DTS:[0.052/11.252],nb:525,dropped:0  logger.js:37:6
[log] > Parsed video,PTS:[0.034,11.279],DTS:[0.000/11.245],nb:337,dropped:0  logger.js:37:6
[log] > main stream:PARSING->PARSED  logger.js:37:6
[log] > target start position:0  logger.js:37:6
[log] > target start position not buffered, seek to buffered.start(0) 0.052333  logger.js:37:6
[log] > adjust currentTime from 0 to 0.052333  logger.js:37:6
[log] > main buffered : [0.052,11.252]  logger.js:37:6
[log] > latency/loading/parsing/append/kbps:206/746/68/13/9876  logger.js:37:6
[log] > main stream:PARSED->IDLE  logger.js:37:6
[log] > switching to level 2  logger.js:37:6
[log] > loading playlist for level 2  logger.js:37:6
[log] > main stream:IDLE->WAITING_LEVEL  logger.js:37:6
[log] > media seeking to 0.052  logger.js:37:6
Media resource blob:https://video-dev.github.io/0d408546-a119-0046-b480-ff6ea424d3be could not be decoded.  demo
[log] > recoverMediaError  logger.js:37:6
[log] > detachMedia  logger.js:37:6
[log] > media source detaching  logger.js:37:6
[log] > main stream:WAITING_LEVEL->STOPPED  logger.js:37:6
[log] > attachMedia  logger.js:37:6
The video playback was aborted due to a corruption problem or because the video used features your browser did not support - NS_ERROR_DOM_MEDIA_FATAL_ERR (0x806e0005)  demo:720:11
[log] > live playlist, reload in 10220 ms  logger.js:37:6
[log] > level 2 loaded [45455,45457],duration:31.099  logger.js:37:6
[log] > live playlist - first load, unknown sliding  logger.js:37:6
parsing level duration :1137us,count:2  demo:370:11
[log] > media source opened  logger.js:37:6
[log] > startLoad(-1)  logger.js:37:6
[log] > loading playlist for level 2  logger.js:37:6
[log] > override startPosition with lastCurrentTime @0.052  logger.js:37:6
[log] > main stream:STOPPED->IDLE  logger.js:37:6
[log] > switching to level 1  logger.js:37:6
[warn] > abort previous loader for type:level  logger.js:37:6
[log] > loading playlist for level 1  logger.js:37:6
[log] > main stream:IDLE->WAITING_LEVEL  logger.js:37:6
[log] > audio:override startPosition with lastCurrentTime @0.052  logger.js:37:6
[log] > audio stream:STOPPED->IDLE  logger.js:37:6
[log] > audio stream:IDLE->STOPPED  logger.js:37:6
[log] > audio:override startPosition with lastCurrentTime @0.052  logger.js:37:6
[log] > audio stream:STOPPED->IDLE  logger.js:37:6
[log] > live playlist, reload in 10287 ms  logger.js:37:6
[log] > level 1 loaded [45455,45457],duration:31.099  logger.js:37:6
[log] > live playlist - first load, unknown sliding  logger.js:37:6
[log] > main stream:WAITING_LEVEL->IDLE  logger.js:37:6
[log] > live playlist, switching playlist, unknown, load middle frag : 45457  logger.js:37:6
[log] > Loading 45457 of [45455 ,45457],level 1, currentTime:0.052,bufferEnd:0.052  logger.js:37:6
[log] > demuxing in webworker  logger.js:37:6
[log] > main stream:IDLE->FRAG_LOADING  logger.js:37:6
parsing level duration :820us,count:3  demo:370:11
  b46ce2aa-340f-dd41-b36d-3b2edfc6caec:516:7
[log] > Loaded  45457 of [45455 ,45457],level 1  logger.js:37:6
[log] > main stream:FRAG_LOADING->PARSING  logger.js:37:6
[log] > Parsing 45457 of [45455 ,45457],level 1, cc 0  logger.js:37:6
[log] > main:discontinuity detected  logger.js:37:6
[log] > main:switch detected  logger.js:37:6
"[log] > manifest codec:mp4a.40.2,ADTS data:type:2,sampleingIndex:3[48000Hz],channelConfig:2"  b46ce2aa-340f-dd41-b36d-3b2edfc6caec:516:7
[log] > parsed codec:mp4a.40.2,rate:48000,nb channel:2  b46ce2aa-340f-dd41-b36d-3b2edfc6caec:516:7
[log] > audio sampling rate : 48000  b46ce2aa-340f-dd41-b36d-3b2edfc6caec:516:7
[log] > InitPTS for cc:0 found from video track:-1352551870  logger.js:37:6
[log] > creating sourceBuffer(audio/mp4;codecs=mp4a.40.2)  logger.js:37:6
[log] > creating sourceBuffer(video/mp4;codecs=avc1.4d001f)  logger.js:37:6
[log] > main track:audio,container:audio/mp4,codecs[level/parsed]=[mp4a.40.2/mp4a.40.2]  logger.js:37:6
[log] > main track:video,container:video/mp4,codecs[level/parsed]=[avc1.4d001f/avc1.42801f]  logger.js:37:6
[log] > Parsed audio,PTS:[23.157,31.093],DTS:[23.157/31.093],nb:372,dropped:0  logger.js:37:6
[log] > Parsed video,PTS:[23.192,31.134],DTS:[23.158/31.101],nb:238,dropped:0  logger.js:37:6
[log] > main stream:PARSING->PARSED  logger.js:37:6
[log] > main buffered : [23.192,31.093]  logger.js:37:6
[log] > latency/loading/parsing/append/kbps:139/485/66/5/22798  logger.js:37:6
[log] > main stream:PARSED->IDLE  logger.js:37:6
[log] > target start position:0.052333  logger.js:37:6
[log] > adjust currentTime from 0 to 0.052333  logger.js:37:6
[log] > media seeking to 0.052  logger.js:37:6
[log] > Loading 45455 of [45455 ,45457],level 1, currentTime:0.052,bufferEnd:0.052  logger.js:37:6
[log] > main stream:IDLE->FRAG_LOADING  logger.js:37:6
[log] > Loaded  45455 of [45455 ,45457],level 1  logger.js:37:6
[log] > main stream:FRAG_LOADING->PARSING  logger.js:37:6
[log] > Parsing 45455 of [45455 ,45457],level 1, cc 0  logger.js:37:6
[log] > Parsed audio,PTS:[0.053,11.253],DTS:[0.053/11.253],nb:525,dropped:0  logger.js:37:6
[log] > Parsed video,PTS:[0.035,11.280],DTS:[0.001/11.246],nb:337,dropped:0  logger.js:37:6
[log] > main stream:PARSING->PARSED  logger.js:37:6
[log] > main buffered : [0.053,11.253][23.192,31.093]  logger.js:37:6
[log] > latency/loading/parsing/append/kbps:186/966/52/5/20897  logger.js:37:6
[log] > main stream:PARSED->IDLE  logger.js:37:6
[log] > switching to level 2  logger.js:37:6
[log] > loading playlist for level 2  logger.js:37:6
[log] > main stream:IDLE->WAITING_LEVEL  logger.js:37:6
[log] > live playlist, reload in 10295 ms  logger.js:37:6
[log] > level 2 loaded [45455,45457],duration:31.099  logger.js:37:6
[log] > live playlist - first load, unknown sliding  logger.js:37:6
[log] > main stream:WAITING_LEVEL->IDLE  logger.js:37:6
[log] > live playlist, switching playlist, load frag with next SN: 45456  logger.js:37:6
[log] > Loading 45456 of [45455 ,45457],level 2, currentTime:0.052,bufferEnd:11.253  logger.js:37:6
[log] > main stream:IDLE->FRAG_LOADING  logger.js:37:6
parsing level duration :679us,count:4  demo:370:11
[log] > media seeked to 0.052  logger.js:37:6
[log] > Loaded  45456 of [45455 ,45457],level 2  logger.js:37:6
[log] > main stream:FRAG_LOADING->PARSING  logger.js:37:6
[log] > Parsing 45456 of [45455 ,45457],level 2, cc 0  logger.js:37:6
[log] > main:switch detected  logger.js:37:6
"[log] > manifest codec:mp4a.40.2,ADTS data:type:2,sampleingIndex:3[48000Hz],channelConfig:2"  b46ce2aa-340f-dd41-b36d-3b2edfc6caec:516:7
[log] > parsed codec:mp4a.40.2,rate:48000,nb channel:2  b46ce2aa-340f-dd41-b36d-3b2edfc6caec:516:7
[log] > audio sampling rate : 48000  b46ce2aa-340f-dd41-b36d-3b2edfc6caec:516:7
[log] > main track:audio,container:audio/mp4,codecs[level/parsed]=[mp4a.40.2/mp4a.40.2]  logger.js:37:6
[log] > main track:video,container:video/mp4,codecs[level/parsed]=[avc1.4d001f/avc1.42801f]  logger.js:37:6
[log] > Parsed audio,PTS:[11.253,23.157],DTS:[11.253/23.157],nb:558,dropped:0  logger.js:37:6
[log] > Parsed video,PTS:[11.280,23.192],DTS:[11.247/23.159],nb:357,dropped:0  logger.js:37:6
[log] > main stream:PARSING->PARSED  logger.js:37:6
[log] > main buffered : [0.053,31.093]  logger.js:37:6
[log] > latency/loading/parsing/append/kbps:185/1203/49/6/19848  logger.js:37:6
[log] > main stream:PARSED->IDLE  logger.js:37:6
[log] > Loading 45457 of [45455 ,45457],level 2, currentTime:0.052,bufferEnd:31.093  logger.js:37:6
[log] > main stream:IDLE->FRAG_LOADING  logger.js:37:6
[log] > Loaded  45457 of [45455 ,45457],level 2  logger.js:37:6
[log] > main stream:FRAG_LOADING->PARSING  logger.js:37:6
[log] > Parsing 45457 of [45455 ,45457],level 2, cc 0  logger.js:37:6
[log] > Parsed audio,PTS:[23.157,31.093],DTS:[23.157/31.093],nb:372,dropped:0  logger.js:37:6
[log] > Video/PTS/DTS adjusted: 23192/23159,delta:-1 ms  b46ce2aa-340f-dd41-b36d-3b2edfc6caec:516:7
[log] > Parsed video,PTS:[23.192,31.134],DTS:[23.159/31.101],nb:238,dropped:0  logger.js:37:6
[log] > main stream:PARSING->PARSED  logger.js:37:6
[log] > main buffered : [0.053,31.093]  logger.js:37:6
[log] > latency/loading/parsing/append/kbps:145/1101/35/6/16181  logger.js:37:6
[log] > main stream:PARSED->IDLE  logger.js:37:6
[log] > loading playlist for level 2  logger.js:37:6
[log] > live playlist, reload in 9721 ms  logger.js:37:6
[log] > level 2 loaded [45456,45458],duration:29.529000000000003  logger.js:37:6
[log] > live playlist sliding:11.253  logger.js:37:6
[log] > Updating mediasource duration to 40.782  logger.js:37:6
[log] > Loading 45458 of [45456 ,45458],level 2, currentTime:0.052,bufferEnd:31.093  logger.js:37:6
[log] > main stream:IDLE->FRAG_LOADING  logger.js:37:6
parsing level duration :580us,count:5  demo:370:11
[log] > Loaded  45458 of [45456 ,45458],level 2  logger.js:37:6
[log] > main stream:FRAG_LOADING->PARSING  logger.js:37:6
[log] > Parsing 45458 of [45456 ,45458],level 2, cc 0  logger.js:37:6
[log] > Parsed audio,PTS:[31.093,40.821],DTS:[31.093/40.821],nb:456,dropped:0  logger.js:37:6
[log] > Video/PTS/DTS adjusted: 31133/31101,delta:-1 ms  b46ce2aa-340f-dd41-b36d-3b2edfc6caec:516:7
[log] > Parsed video,PTS:[31.133,40.809],DTS:[31.101/40.776],nb:290,dropped:0  logger.js:37:6
[log] > main stream:PARSING->PARSED  logger.js:37:6
[log] > main buffered : [0.053,40.809]  logger.js:37:6
[log] > latency/loading/parsing/append/kbps:207/2834/63/5/8174  logger.js:37:6
[log] > main stream:PARSED->IDLE  logger.js:37:6
[log] > loading playlist for level 2  logger.js:37:6
[log] > live playlist, reload in 9001 ms  logger.js:37:6
[log] > level 2 loaded [45457,45459],duration:27.329  logger.js:37:6
[log] > live playlist sliding:23.157  logger.js:37:6
[log] > Updating mediasource duration to 50.486  logger.js:37:6
[log] > Loading 45459 of [45457 ,45459],level 2, currentTime:0.052,bufferEnd:40.809  logger.js:37:6
[log] > main stream:IDLE->FRAG_LOADING  logger.js:37:6
parsing level duration :511us,count:6  demo:370:11
[log] > Loaded  45459 of [45457 ,45459],level 2  logger.js:37:6
[log] > main stream:FRAG_LOADING->PARSING  logger.js:37:6
[log] > Parsing 45459 of [45457 ,45459],level 2, cc 0  logger.js:37:6
[log] > Parsed audio,PTS:[40.821,50.485],DTS:[40.821/50.485],nb:453,dropped:0  logger.js:37:6
[log] > Parsed video,PTS:[40.810,50.520],DTS:[40.776/50.486],nb:291,dropped:0  logger.js:37:6
[log] > main stream:PARSING->PARSED  logger.js:37:6
[log] > main buffered : [0.053,50.485]  logger.js:37:6
[log] > latency/loading/parsing/append/kbps:174/2393/57/4/10236  logger.js:37:6
[log] > main stream:PARSED->IDLE  logger.js:37:6
[log] > loading playlist for level 2  logger.js:37:6
[log] > live playlist, reload in 10332 ms  logger.js:37:6
[log] > level 2 loaded [45458,45460],duration:31.233  logger.js:37:6
[log] > live playlist sliding:31.093  logger.js:37:6
[log] > Updating mediasource duration to 62.326  logger.js:37:6
[log] > Loading 45460 of [45458 ,45460],level 2, currentTime:1.271,bufferEnd:50.485  logger.js:37:6
[log] > main stream:IDLE->FRAG_LOADING  logger.js:37:6
parsing level duration :452us,count:7  demo:370:11
[log] > Loaded  45460 of [45458 ,45460],level 2  logger.js:37:6
[log] > main stream:FRAG_LOADING->PARSING  logger.js:37:6
[log] > Parsing 45460 of [45458 ,45460],level 2, cc 0  logger.js:37:6
[log] > Parsed audio,PTS:[50.485,62.325],DTS:[50.485/62.325],nb:555,dropped:0  logger.js:37:6
[log] > Video/PTS/DTS adjusted: 50520/50486,delta:1 ms  b46ce2aa-340f-dd41-b36d-3b2edfc6caec:516:7
[log] > Parsed video,PTS:[50.520,62.366],DTS:[50.486/62.332],nb:355,dropped:0  logger.js:37:6
[log] > main stream:PARSING->PARSED  logger.js:37:6
[log] > main buffered : [0.053,62.325]  logger.js:37:6
[log] > latency/loading/parsing/append/kbps:192/2361/59/6/11361  logger.js:37:6
[log] > main stream:PARSED->IDLE  logger.js:37:6
[log] > loading playlist for level 2  logger.js:37:6
[log] > live playlist, reload in 9754 ms  logger.js:37:6
[log] > level 2 loaded [45459,45461],duration:29.497000000000003  logger.js:37:6
[log] > live playlist sliding:40.810  logger.js:37:6
[log] > Updating mediasource duration to 70.307  logger.js:37:6
[log] > Loading 45461 of [45459 ,45461],level 2, currentTime:1.271,bufferEnd:62.325  logger.js:37:6
[log] > main stream:IDLE->FRAG_LOADING  logger.js:37:6
parsing level duration :414us,count:8  demo:370:11
[log] > Loaded  45461 of [45459 ,45461],level 2  logger.js:37:6
[log] > main stream:FRAG_LOADING->PARSING  logger.js:37:6
[log] > Parsing 45461 of [45459 ,45461],level 2, cc 0  logger.js:37:6
[log] > Parsed audio,PTS:[62.325,70.325],DTS:[62.325/70.325],nb:375,dropped:0  logger.js:37:6
[log] > Video/PTS/DTS adjusted: 62366/62332,delta:1 ms  b46ce2aa-340f-dd41-b36d-3b2edfc6caec:516:7
[log] > Parsed video,PTS:[62.366,70.306],DTS:[62.332/70.273],nb:238,dropped:0  logger.js:37:6
[log] > main stream:PARSING->PARSED  logger.js:37:6
[log] > main buffered : [0.053,70.306]  logger.js:37:6
[log] > latency/loading/parsing/append/kbps:148/1691/45/4/11029  logger.js:37:6
[log] > main stream:PARSED->IDLE  logger.js:37:6
[log] > loading playlist for level 2  logger.js:37:6
[log] > live playlist, reload in 10131 ms  logger.js:37:6
[log] > level 2 loaded [45460,45462],duration:30.631  logger.js:37:6
[log] > live playlist sliding:50.485  logger.js:37:6
[log] > Updating mediasource duration to 81.116  logger.js:37:6
[log] > Loading 45462 of [45460 ,45462],level 2, currentTime:1.271,bufferEnd:70.306  logger.js:37:6
[log] > main stream:IDLE->FRAG_LOADING  logger.js:37:6
parsing level duration :379us,count:9  demo:370:11
[log] > Loaded  45462 of [45460 ,45462],level 2  logger.js:37:6
[log] > main stream:FRAG_LOADING->PARSING  logger.js:37:6
[log] > Parsing 45462 of [45460 ,45462],level 2, cc 0  logger.js:37:6
[log] > Parsed audio,PTS:[70.325,81.141],DTS:[70.325/81.141],nb:507,dropped:0  logger.js:37:6
[log] > Parsed video,PTS:[70.307,81.151],DTS:[70.273/81.118],nb:325,dropped:0  logger.js:37:6
[log] > main stream:PARSING->PARSED  logger.js:37:6
[log] > main buffered : [0.053,81.141]  logger.js:37:6
[log] > latency/loading/parsing/append/kbps:183/3317/66/5/8213  logger.js:37:6
[log] > main stream:PARSED->IDLE  logger.js:37:6
[log] > loading playlist for level 2  logger.js:37:6
[log] > live playlist, reload in 9281 ms  logger.js:37:6
[log] > level 2 loaded [45461,45463],duration:28.061  logger.js:37:6
[log] > live playlist sliding:62.325  logger.js:37:6
[log] > Updating mediasource duration to 90.386  logger.js:37:6
[log] > Loading 45463 of [45461 ,45463],level 2, currentTime:1.271,bufferEnd:81.141  logger.js:37:6
[log] > main stream:IDLE->FRAG_LOADING  logger.js:37:6
parsing level duration :356us,count:10  demo:370:11
[log] > Loaded  45463 of [45461 ,45463],level 2  logger.js:37:6
[log] > main stream:FRAG_LOADING->PARSING  logger.js:37:6
[log] > Parsing 45463 of [45461 ,45463],level 2, cc 0  logger.js:37:6
[log] > Parsed audio,PTS:[81.141,90.421],DTS:[81.141/90.421],nb:435,dropped:0  logger.js:37:6
[log] > Parsed video,PTS:[81.152,90.428],DTS:[81.118/90.395],nb:278,dropped:0  logger.js:37:6
[log] > main stream:PARSING->PARSED  logger.js:37:6
[log] > main buffered : [0.053,90.421]  logger.js:37:6
[log] > latency/loading/parsing/append/kbps:175/2260/58/4/10431  logger.js:37:6
[log] > main stream:PARSED->IDLE  logger.js:37:6
[log] > loading playlist for level 2  logger.js:37:6
[log] > live playlist, reload in 9998 ms  logger.js:37:6
[log] > level 2 loaded [45462,45464],duration:30.232000000000003  logger.js:37:6
[log] > live playlist sliding:70.307  logger.js:37:6
[log] > Updating mediasource duration to 100.539  logger.js:37:6
[log] > Loading 45464 of [45462 ,45464],level 2, currentTime:1.271,bufferEnd:90.421  logger.js:37:6
[log] > main stream:IDLE->FRAG_LOADING  logger.js:37:6
parsing level duration :340us,count:11  demo:370:11
[log] > Loaded  45464 of [45462 ,45464],level 2  logger.js:37:6
[log] > main stream:FRAG_LOADING->PARSING  logger.js:37:6
[log] > Parsing 45464 of [45462 ,45464],level 2, cc 0  logger.js:37:6
[log] > Parsed audio,PTS:[90.421,100.533],DTS:[90.421/100.533],nb:474,dropped:0  logger.js:37:6
[log] > Video/PTS/DTS adjusted: 90427/90395,delta:-1 ms  b46ce2aa-340f-dd41-b36d-3b2edfc6caec:516:7
[log] > Parsed video,PTS:[90.427,100.538],DTS:[90.395/100.504],nb:303,dropped:0  logger.js:37:6
[log] > main stream:PARSING->PARSED  logger.js:37:6
[log] > main buffered : [0.053,100.533]  logger.js:37:6
[log] > latency/loading/parsing/append/kbps:164/1898/50/5/11751  logger.js:37:6
[log] > main stream:PARSED->IDLE



md5-c5caf6a7d0039626da1c7be1dae791f7



chrome://media-internals 
{
  "22:1": {
    "id": "22:1",
    "properties": {
      "render_id": 22,
      "player_id": 1,
      "origin_url": "https://video-dev.github.io/",
      "frame_url": "https://video-dev.github.io/hls.js/demo/?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined",
      "frame_title": "hls.js demo",
      "url": "blob:https://video-dev.github.io/a79a9328-15cd-491b-904b-f9d56643968f",
      "pipeline_state": "kStopped",
      "found_audio_stream": true,
      "audio_codec_name": "aac",
      "found_video_stream": true,
      "video_codec_name": "h264",
      "seek_target": 0.338333,
      "audio_dds": false,
      "audio_decoder": "FFmpegAudioDecoder",
      "video_dds": false,
      "video_decoder": "GpuVideoDecoder",
      "duration": 69.543333,
      "event": "WEBMEDIAPLAYER_DESTROYED"
    },
    "allEvents": [
      {
        "time": 0,
        "key": "origin_url",
        "value": "https://video-dev.github.io/"
      },
      {
        "time": 0.015000000013969839,
        "key": "frame_url",
        "value": "https://video-dev.github.io/hls.js/demo/?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined"
      },
      {
        "time": 0.02000000001862645,
        "key": "frame_title",
        "value": "hls.js demo"
      },
      {
        "time": 0.18799999996554106,
        "key": "url",
        "value": "blob:https://video-dev.github.io/a79a9328-15cd-491b-904b-f9d56643968f"
      },
      {
        "time": 33.896999999997206,
        "key": "pipeline_state",
        "value": "kStarting"
      },
      {
        "time": 1058.8760000000475,
        "key": "found_audio_stream",
        "value": true
      },
      {
        "time": 1058.8819999999832,
        "key": "audio_codec_name",
        "value": "aac"
      },
      {
        "time": 1059.4479999999749,
        "key": "found_video_stream",
        "value": true
      },
      {
        "time": 1059.4520000000484,
        "key": "video_codec_name",
        "value": "h264"
      },
      {
        "time": 1073.1800000000512,
        "key": "seek_target",
        "value": 0.038333
      },
      {
        "time": 1089.4440000000177,
        "key": "audio_dds",
        "value": false
      },
      {
        "time": 1089.4500000000698,
        "key": "audio_decoder",
        "value": "FFmpegAudioDecoder"
      },
      {
        "time": 1090.158000000054,
        "key": "video_dds",
        "value": false
      },
      {
        "time": 1090.1620000000112,
        "key": "video_decoder",
        "value": "GpuVideoDecoder"
      },
      {
        "time": 1090.2229999999981,
        "key": "pipeline_state",
        "value": "kPlaying"
      },
      {
        "time": 1091.969999999972,
        "key": "pipeline_state",
        "value": "kSeeking"
      },
      {
        "time": 1142.5439999999944,
        "key": "duration",
        "value": 30.531
      },
      {
        "time": 3908.329000000027,
        "key": "duration",
        "value": 30.532
      },
      {
        "time": 11331.859999999986,
        "key": "duration",
        "value": 40.936333
      },
      {
        "time": 13081.925000000047,
        "key": "duration",
        "value": 40.943
      },
      {
        "time": 23270.592999999993,
        "key": "duration",
        "value": 48.891333
      },
      {
        "time": 24558.12699999998,
        "key": "duration",
        "value": 48.935333
      },
      {
        "time": 34264.87699999998,
        "key": "duration",
        "value": 61.434333
      },
      {
        "time": 36393.16000000003,
        "key": "duration",
        "value": 61.479333
      },
      {
        "time": 44077.67300000007,
        "key": "seek_target",
        "value": 0.138333
      },
      {
        "time": 44197.68599999999,
        "key": "duration",
        "value": 69.532333
      },
      {
        "time": 45452.652,
        "key": "duration",
        "value": 69.543333
      },
      {
        "time": 47173.23100000003,
        "key": "seek_target",
        "value": 0.338333
      },
      {
        "time": 50276.986999999965,
        "key": "pipeline_state",
        "value": "kStopping"
      },
      {
        "time": 50277.30000000005,
        "key": "pipeline_state",
        "value": "kStopped"
      },
      {
        "time": 50277.38899999997,
        "key": "event",
        "value": "WEBMEDIAPLAYER_DESTROYED"
      }
    ],
    "lastRendered": 0,
    "firstTimestamp_": 583234.279,
    "destructed": true
  },
  "22:13": {
    "id": "22:13",
    "properties": {
      "render_id": 22,
      "player_id": 13,
      "origin_url": "https://video-dev.github.io/",
      "frame_url": "https://video-dev.github.io/hls.js/demo/?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined",
      "frame_title": "hls.js demo",
      "url": "blob:https://video-dev.github.io/49126ac2-e0bd-4967-9844-f7cdc508738e",
      "pipeline_state": "kPlaying",
      "found_audio_stream": true,
      "audio_codec_name": "aac",
      "found_video_stream": true,
      "video_codec_name": "h264",
      "audio_dds": false,
      "audio_decoder": "FFmpegAudioDecoder",
      "video_dds": false,
      "video_decoder": "GpuVideoDecoder",
      "seek_target": 0.338333,
      "duration": 61.195,
      "audio_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "height": 720,
      "width": 1280,
      "video_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "pipeline_buffering_state": "BUFFERING_HAVE_ENOUGH",
      "event": "PLAY"
    },
    "allEvents": [
      {
        "time": 0,
        "key": "origin_url",
        "value": "https://video-dev.github.io/"
      },
      {
        "time": 0.006999999983236194,
        "key": "frame_url",
        "value": "https://video-dev.github.io/hls.js/demo/?src=https%3A%2F%2Fstream.ec.nau.edu%2Flive%2Famlst%3Achannelfour%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined"
      },
      {
        "time": 0.010999999940395355,
        "key": "frame_title",
        "value": "hls.js demo"
      },
      {
        "time": 0.10899999993853271,
        "key": "url",
        "value": "blob:https://video-dev.github.io/49126ac2-e0bd-4967-9844-f7cdc508738e"
      },
      {
        "time": 0.15399999998044223,
        "key": "pipeline_state",
        "value": "kStarting"
      },
      {
        "time": 1741.1049999999814,
        "key": "found_audio_stream",
        "value": true
      },
      {
        "time": 1741.1110000000335,
        "key": "audio_codec_name",
        "value": "aac"
      },
      {
        "time": 1741.3169999999227,
        "key": "found_video_stream",
        "value": true
      },
      {
        "time": 1741.3209999999963,
        "key": "video_codec_name",
        "value": "h264"
      },
      {
        "time": 1744.4679999999935,
        "key": "audio_dds",
        "value": false
      },
      {
        "time": 1744.4789999999339,
        "key": "audio_decoder",
        "value": "FFmpegAudioDecoder"
      },
      {
        "time": 1745.0169999999925,
        "key": "video_dds",
        "value": false
      },
      {
        "time": 1745.0209999999497,
        "key": "video_decoder",
        "value": "GpuVideoDecoder"
      },
      {
        "time": 1745.0529999999562,
        "key": "pipeline_state",
        "value": "kPlaying"
      },
      {
        "time": 1767.3489999999292,
        "key": "seek_target",
        "value": 0.338333
      },
      {
        "time": 1767.3969999999972,
        "key": "pipeline_state",
        "value": "kSeeking"
      },
      {
        "time": 1749.3390000000363,
        "key": "duration",
        "value": 32.178333
      },
      {
        "time": 6037.66399999999,
        "key": "pipeline_state",
        "value": "kPlaying"
      },
      {
        "time": 6038.834000000032,
        "key": "audio_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 6079.337999999989,
        "key": "height",
        "value": 720
      },
      {
        "time": 6079.337999999989,
        "key": "width",
        "value": 1280
      },
      {
        "time": 6082.020000000019,
        "key": "video_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 6082.640000000014,
        "key": "pipeline_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 6082.753000000026,
        "key": "event",
        "value": "PLAY"
      },
      {
        "time": 10732.197999999975,
        "key": "video_buffering_state",
        "value": "BUFFERING_HAVE_NOTHING"
      },
      {
        "time": 10732.647999999928,
        "key": "video_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 12516.48199999996,
        "key": "duration",
        "value": 40.114333
      },
      {
        "time": 12950.488999999943,
        "key": "video_buffering_state",
        "value": "BUFFERING_HAVE_NOTHING"
      },
      {
        "time": 12951.51000000001,
        "key": "video_buffering_state",
        "value": "BUFFERING_HAVE_ENOUGH"
      },
      {
        "time": 21775.910999999964,
        "key": "duration",
        "value": 51.085
      },
      {
        "time": 31627.282999999938,
        "key": "duration",
        "value": 61.195
      }
    ],
    "lastRendered": 0,
    "firstTimestamp_": 633520.748
  }
}

Most helpful comment

One other datapoint; in Chrome, if I disable Use hardware acceleration when available under chrome://settings -> advanced settings, then playback works correctly for the file I supplied. In my mind, this strongly implies the issue is somewhere in Apple's H.264 decoder implementation. @mangui suggested I ping https://github.com/jernoble on this.

All 51 comments

We're seeing this same issue as well with sporadic videos. It isn't all of them. Investigating now.

I'm able to precisely reproduce the steps here as well.

Mac mini (Late 2014)
macOS 10.13 (17A365)
Chrome 61.0.3163.100 (Official Build) (64-bit)
Firefox ESR 52.3.0 (64-bit)

I'm happy to attach logs from the repro case spelled out here, but they're similar enough to be functionally identical - so I'll refrain from adding additional noise.

Same here . I can't share the stream in issue here, as it is paid content, but I would be happy to email it to the hls.js team. The stream was an akamai DVR live stream that is offline at the moment, which acts as if it is VOD. The content does not play and only throws the bufferstall error

This live stream seems to be much more reliable
http://ihoplive-f.akamaihd.net/i/ihopkc_tprhd@142185/master.m3u8?__b__=700&set-segment-duration=quality

Also VOD content seems to be reliable too
https://ihopvod-f.akamaihd.net/i/IHOP/593/227/170926-0600-TPR.mp4,,.csmil/index_0_av.m3u8

I've been testing with https://s3.amazonaws.com/videoteam-test-files/publictests/osx_vid/mbr/manifest_bad.m3u8 (note this is bad only on osx 10.13)

One way I've found to get it to play is by setting Hls.DefaultConfig.maxSeekHole to 0. There's some issue with performing a seek operation early on that causes the seek operation to stall entirely and never recover.

I'm not on High Sierra yet so I can't test these streams myself. But for anyone on it, are you experiencing these issues in older versions of Hlsjs? I'll start compiling a list of test streams. Please make sure your stream continues to be available publicly in North America so we can test it when free.

Ok, I'll be looking into this today.

Is not it a responsibility of Browser Vendors (Google, Mozilla, etc.) to provide a consistent behavior for different OS?
Also, It looks like a regression from Apple. We should consider opening a bug in their tracker after an investigation of the issue.

One other datapoint; in Chrome, if I disable Use hardware acceleration when available under chrome://settings -> advanced settings, then playback works correctly for the file I supplied. In my mind, this strongly implies the issue is somewhere in Apple's H.264 decoder implementation. @mangui suggested I ping https://github.com/jernoble on this.

@jernoble could you comment?

Can repro in Chrome, but not Firefox (developer edition). In FF 55 (regular version), I see a corrupt video error.

Stream: https://s3.amazonaws.com/videoteam-test-files/publictests/osx_vid/mbr/manifest_bad.m3u8

@jyavenard do you possibly have any insight into this issue? See above for details.

@jnoring

Duration:139.041087
Buffered:[0.014355,139.041087]
Seekable:[0,139.041087]
Played:
audio Buffered:[0,139.041087]
video Buffered:[0.014355,138.889354]

It probably has something to do with the buffered range not extending to the currentTime (0.000). No video samples exist for 0.000.

Edit: these are stats from Chrome while playing manifest_bad.m3u8

@jernoble I don't think so. The good file has identical timestamps (just a slightly different video payload), and plays back fine. (https://s3.amazonaws.com/videoteam-test-files/publictests/osx_vid/mbr/manifest_good.m3u8)

And what I see from the chrome stats are a seek operation that never completes on the bad manifest. The same operation _does_ complete on the good manifest.

Interesting. Well, the readyState seems to be stuck at 1 (HAVE_METADATA) and seeking is stuck at true, which is why I assumed it had to do with the video's buffered range. Seems like you should pull a Chrome engineer into the conversation before filing a bug with Apple about hardware video decode acceleration.

hls.js is seeking on buffered(0).start on loadedmetadata, so this is not expected to stall

On 10.13, using hls.js 0.6.1(http://streambox.fr/mse/hls.js-0.6.1/demo/), the streams posted here appear to be working without any console errors in Chrome 61.0.3163.100 (Official Build) (64-bit). Edit - I'm getting video stalls in Chrome as well on 0.6.1. Hopefully this is useful and doesn't just muddy the waters.

Firefox 55.0.3 (64-bit) is on shakier ground, although the errors change from a ton of InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable in 0.6.2+, to only a handful of Media resource blob:http://streambox.fr/4a7fa9b5-60d8-f245-adad-8f4f3544e920 could not be decoded, error: Error Code: NS_ERROR_DOM_MEDIA_FATAL_ERR (0x806e0005) type errors in 0.6.1. If the video starts to play in Firefox, it eventually stalls while the audio continues.

@fuzzynectarine I can confirm it works in 0.6.1, but that the audio is way out of sync. It starts about half a second before the video begins. Seems to be another clue.

@johnBartos I think I'm having better luck in both browsers with 0.5.52.

@fuzzynectarine Interesting. That version is a bit before my time but I'll try to diff the behavior between that and 0.8.4

I can confirm that the "seek to buffered.start" operation is what's causing the issue. Removing this line allows playback to start.

Update: It seems to be a timing issue. Breaking right before the seek allows the stream to begin playback. Resuming execution after playback has begun does not break the video.

Update 2: Waiting until media.readyState > 1 to seek fixes the issue.

It sounds like the Apple H264 decoder is errorring when not enough data is provided.
This would be a regression in high sierra. And unfortunately not the first.
Until beta 4 we saw major regression.
I'll confirm tomorrow if I can get my hand on such machine.
And report à bug to Apple if required.

@mangui I'll give it a go

Confirmed in Chrome 61 with High Sierra using with video.src = mp4; video.load(); video.play(); and setting currentTime on "durationchange" or "loadedmetadata". It's intermittent - maybe 1/10 - but definitely new since I just started using High Sierra today and saw this while working on a video player test case that switched out media element src's and seeks. The video tag was in this state:

  • pending play promise
  • video.networkSate: 1 IDLE
  • video.readyState: 1 HAVE_METADATA
  • video.seeking: 1
  • video.paused: false
  • video.duration: 52
  • video.buffered.end(0): 52
  • video.currentTime: 18
  • video.videoWidth: 722

In this state, setting currentTime and calling play() or pause() and play() has no effect. The only way to clear this state is to call video.load() to empty the tag and start again.

And in Safari?

@jyavenard I am not able to reproduce the issue in Safari 11 or Firefox 55.0.3 (upgrading to 56 to give it a try). Maybe I can make a standalone test for Chrome 61. It's easy enough to reproduce in jwplayer, and deferring seeking until "loadeddata" when readyState reaches 2 seems to do the trick.

Can't reproduce it in Firefox, only in Chrome.

In the console (Chrome)I can see messages about reaching EOS

The first stream i get at the start is the 426x240 which isn't HW accelerated (test on a mac book air mid-2012)

It then switches to 720p stream, which can be HW accerated.

@mangui is there a way to force the stream to be 720p?

The file I supplied reproduces in Safari, Chrome and Firefox (https://s3.amazonaws.com/videoteam-test-files/publictests/osx_vid/mbr/manifest_bad.m3u8) - it does not reproduce on newer versions of FF, which from what I understand have an automatic fallback to software decoding.

Is there any reasonable workaround to this? At this point I've taken to disabling HLS on 10.13/Chrome/Firefox.

@jnoring if you have issues with all browsers at this stage, I would question more the validity of the stream.

@jyavenard if that's true, then how do you explain https://s3.amazonaws.com/videoteam-test-files/publictests/osx_vid/mbr/manifest_bad.m3u8 ?

  1. I have a good version of this file with the exact same timestamps (https://s3.amazonaws.com/videoteam-test-files/publictests/osx_vid/mbr/manifest_good.m3u8) on audio and video tracks, exact same segmentation, etc. The only difference is the profile of the video. This file does not reproduce playback issues.
  2. That file works fine using hls.js on any version of OSX prior to 10.13, Windows, OSX's built-in HLS streaming, etc. It's only OSX 10.13/hls.js we've seen issues.

Also I ran that stream through apple's mediastreamvalidator tool, and I see no significant issues flagged. To me it's really obvious that there's some issue with hls.js and/or Apple's H.264 decoder on 10.13 It isn't clear to me how you've concluded this is working correctly.

We see that issue also, will come back with the data we find

I'm going to submit a bug to Chrome today

you can check a workaround here : http://streambox.fr/mse/align/demo/
feedback welcome as it will not fix issue with separate audio tracks

Ok... here's what I found out. First of all... the workaround provided by @mangui doesn't help. I don't think it has a direct connection with the initial seeking.

I found out that this issue doesn't happen on all Macs updated to High Sierra. It depends on the hardware (e.g. Mac Mini with Intel graphics has issues while iMac with AMD graphics doesn't). I believe that this issue is somehow related with the Intel HW h264 decoder on High Sierra.

Additionally I found out that this issue only appears on the lowest quality level of our streams. By doing some comparison I believe that this issue depends on the H264 codec level used. Our low quality stream uses level 1.3. All other streams have levels 2.1 and above. I also checked the "bad manifest" posted here... it uses level 1.3. The "good manifest" uses level 3.

I think this needs to be reported to Apple. There seems to be an issue in the HW decoder implementation.

Then again... we also have some low quality streams with level 1.3 that work without any issues. Which means there is something more to it. The difference is Baseline 1.3 (works) compared to Main 1.3 (doesn't work). The "bad manifest" is High 1.3 which also doesn't work. All streams have the resolution 320x240. But there are of course many differences in more specific codec settings between them (e.g. working stream has CABAC disabled, other two have CABAC enabled).

@mikrohard Chrome under some circumstances will use ffmpeg to decode, and if the stream can be hardware decoded it will use the Apple VideoToolbox decoder.

The issue appears to be related to the use of the Apple VT decoder.

Apple VT doesn't supports HW acceleration for video with a height <= 240px. It which case, ffmpeg will be used.

What you're seeing for low bitrate video is likely related to that

Well... if I disable HW acceleration in Chrome, everything works perfectly. I'm pretty sure that HW decoder is causing the issues here.

I have two identical Mac Minis (Late 2014). One on Sierra and the other on High Sierra. On Sierra everything works perfectly. On High Sierra some 240p streams cause playback to get stuck at start if HW acceleration is enabled in Chrome. If I disable HW acceleration in Chrome the issue disappears.

Another update. The @mangui workaound version on http://streambox.fr/mse/align/demo/ does indeed fix the problem (tested with the streams posted here).

I still need to check why it doesn't always work for our streams.

We use dynamically generated LIVE HLS streams. Which means that segments are generated on-the-fly based on the time the URL is requested the first time. And with the workaround branch of @mangui it does start playing sometimes but not always (I would say its 50:50). Without this workaround it never starts playing. This is the reason why I first thought that his workaround doesn't work at all.

My issue with video failing to play in hls.js in Firefox was resolved with an update to 52.4.1 (ESR).

The release notes (https://www.mozilla.org/en-US/firefox/52.4.1/releasenotes/) even call out "Fixed a crash when playing videos on macOS 10.13".

@mikrohard Thanks for the research, it's very helpful.

I think this needs to be reported to Apple.

I agree. I forgot to submit the Chrome bug yesterday so I'll do both today.

@VerilyPete That's great 👍 Pointing to FF's fix should help getting it resolved in other browsers

make maxSeekHole to 0 will solve the issue.

@johnBartos there’s no “fix” in Firefox for this issue. The change on Firefox ESR 52 was related to updating the sandbox settings to allow for a new apple’s system call for the audio decoding framework.
Firefox runs its code in a sandbox that limits what the application has access to. Audio decoding no longer worked in 10.13.

@jyavenard Thanks for the clarification. Can you point me to any docs on how FF's media stack works? Would like to have more in depth knowledge of it.

@ranjan000 That'd work if you can ensure that your streams will not have holes; otherwise, any small gap will freeze playback.

It certainly sounds like it.

Great. Closing this out. Thanks for the help everyone.

I am on 66 on High Sierra. Still not working. Media source and hls.js not supported. I am guessing in Safari it is working but it is falling back on its own hls support like in the iphone.

Was this page helpful?
0 / 5 - 0 ratings