HLS.js is a JavaScript library that plays HLS in browsers with support for MSE.

Overview

npm npm Sauce Test Status

HLS.js

HLS.js is a JavaScript library that implements an HTTP Live Streaming client. It relies on HTML5 video and MediaSource Extensions for playback.

It works by transmuxing MPEG-2 Transport Stream and AAC/MP3 streams into ISO BMFF (MP4) fragments. Transmuxing is performed asynchronously using a Web Worker when available in the browser. HLS.js also supports HLS + fmp4, as announced during WWDC2016.

HLS.js works directly on top of a standard HTML<video> element.

HLS.js is written in ECMAScript6 (*.js) and TypeScript (*.ts) (strongly typed superset of ES6), and transpiled in ECMAScript5 using Babel and the TypeScript compiler.

Webpack is used to build the distro bundle and serve the local development environment.

Features

  • VOD & Live playlists
    • DVR support on Live playlists
  • Fragmented MP4 container
  • MPEG-2 TS container
    • ITU-T Rec. H.264 and ISO/IEC 14496-10 Elementary Stream
    • ISO/IEC 13818-7 ADTS AAC Elementary Stream
    • ISO/IEC 11172-3 / ISO/IEC 13818-3 (MPEG-1/2 Audio Layer III) Elementary Stream
    • Packetized metadata (ID3v2.3.0) Elementary Stream
  • AAC container (audio only streams)
  • MPEG Audio container (MPEG-1/2 Audio Layer III audio only streams)
  • Timed Metadata for HTTP Live Streaming (in ID3 format, carried in MPEG-2 TS)
  • AES-128 decryption
  • SAMPLE-AES decryption (only supported if using MPEG-2 TS container)
  • Encrypted media extensions (EME) support for DRM (digital rights management)
  • CEA-608/708 captions
  • WebVTT subtitles
  • Alternate Audio Track Rendition (Master Playlist with Alternative Audio) for VoD and Live playlists
  • Adaptive streaming
    • Manual & Auto Quality Switching
      • 3 Quality Switching modes are available (controllable through API means)
        • Instant switching (immediate quality switch at current video position)
        • Smooth switching (quality switch for next loaded fragment)
        • Bandwidth conservative switching (quality switch change for next loaded fragment, without flushing the buffer)
      • In Auto-Quality mode, emergency switch down in case bandwidth is suddenly dropping to minimize buffering.
  • Accurate Seeking on VoD & Live (not limited to fragment or keyframe boundary)
  • Ability to seek in buffer and back buffer without redownloading segments
  • Built-in Analytics
    • All internal events can be monitored (Network Events, Video Events)
    • Playback session metrics are also exposed
  • Resilience to errors
    • Retry mechanism embedded in the library
    • Recovery actions can be triggered fix fatal media or network errors
  • Redundant/Failover Playlists

Supported M3U8 tags

For details on the HLS format and these tags' meanings, see https://tools.ietf.org/html/draft-pantos-hls-rfc8216bis-08

Manifest tags

  • #EXT-X-STREAM-INF:<attribute-list> <URI>
  • #EXT-X-MEDIA:<attribute-list>
  • #EXT-X-SESSION-DATA:<attribute-list>

The following properties are added to their respective variants' attribute list but are not implemented in their selection and playback.

  • VIDEO-RANGE and HDCP-LEVEL (See #2489)

Playlist tags

  • #EXTM3U
  • #EXT-X-VERSION=<n>
  • #EXTINF:<duration>,[<title>]
  • #EXT-X-ENDLIST
  • #EXT-X-MEDIA-SEQUENCE=<n>
  • #EXT-X-TARGETDURATION=<n>
  • #EXT-X-DISCONTINUITY
  • #EXT-X-DISCONTINUITY-SEQUENCE=<n>
  • #EXT-X-BYTERANGE=<n>[@<o>]
  • #EXT-X-MAP:<attribute-list>
  • #EXT-X-KEY:<attribute-list> (METHOD=SAMPLE-AES is only supports with MPEG-2 TS segments)
  • #EXT-X-PROGRAM-DATE-TIME:<attribute-list>
  • #EXT-X-START:TIME-OFFSET=<n>
  • #EXT-X-SERVER-CONTROL:<attribute-list>
  • #EXT-X-PART-INF:PART-TARGET=<n>
  • #EXT-X-PART:<attribute-list>
  • #EXT-X-PRELOAD-HINT:<attribute-list>
  • #EXT-X-SKIP:<attribute-list>
  • #EXT-X-RENDITION-REPORT:<attribute-list>

The following tags are added to their respective fragment's attribute list but are not implemented in streaming and playback.

  • #EXT-X-DATERANGE:<attribute-list> (Not added to metadata TextTracks. See #2218)
  • #EXT-X-BITRATE (Not used in ABR controller)
  • #EXT-X-GAP (Not implemented. See #2940)

Not Supported

For a complete list of issues, see "Top priorities" in the Release Planning and Backlog project tab. Codec support is dependent on the runtime environment (for example, not all browsers on the same OS support HEVC).

  • CMAF CC support #2623
  • Emsg Inband Timed Metadata for FMP4 (ID3 within Emsgv1) in "metadata" TextTracks #2360
  • #EXT-X-DATERANGE in "metadata" TextTracks #2218
  • #EXT-X-GAP filling #2940
  • #EXT-X-I-FRAME-STREAM-INF I-frame Media Playlist files
  • SAMPLE-AES with fmp4, aac, mp3, vtt... segments (MPEG-2 TS only)
  • PlayReady and FairPlay DRM ( See #3779 and issues labeled DRM)
  • Advanced variant selection based on runtime media capabilities (See issues labeled media-capabilities)
  • MP3 elementary stream audio in IE and Edge (<=18) on Windows 10 (See #1641 and Microsoft answers forum)

Server-side-rendering (SSR) and require from a Node.js runtime

You can safely require this library in Node and absolutely nothing will happen. A dummy object is exported so that requiring the library does not throw an error. HLS.js is not instantiable in Node.js. See #1841 for more details.

Getting started with development

First, checkout the repository and install the required dependencies

git clone https://github.com/video-dev/hls.js.git
cd hls.js
# After cloning or pulling from the repository, make sure all dependencies are up-to-date
npm install ci
# Run dev-server for demo page (recompiles on file-watch, but doesn't write to actual dist fs artifacts)
npm run dev
# After making changes run the sanity-check task to verify all checks before committing changes
npm run sanity-check

The dev server will host files on port 8000. Once started, the demo can be found running at http://localhost:8000/demo/.

Before submitting a PR, please see our contribution guidelines. Join the discussion on Slack via video-dev.org in #hlsjs for updates and questions about development.

Build tasks

Build all flavors (suitable for prod-mode/CI):

npm install ci
npm run build

Only debug-mode artifacts:

npm run build:debug

Build and watch (customized dev setups where you'll want to host through another server than webpacks' - for example in a sub-module/project)

npm run build:watch

Only specific flavor (known configs are: debug, dist, light, light-dist, demo):

npm run build -- --env dist # replace "dist" by other configuration name, see above ^

Note: The "demo" config is always built.

NOTE: hls.light.*.js dist files do not include EME, subtitles, CMCD, or alternate-audio support. In addition, the following types are not available in the light build:

  • AudioStreamController
  • AudioTrackController
  • CuesInterface
  • EMEController
  • SubtitleStreamController
  • SubtitleTrackController
  • TimelineController
  • CmcdController

Linter (ESlint)

Run linter:

npm run lint

Run linter with auto-fix mode:

npm run lint:fix

Run linter with errors only (no warnings)

npm run lint:quiet

Formatting Code

Run prettier to format code

npm run prettier

Type Check

Run type-check to verify TypeScript types

npm run type-check

Automated tests (Mocha/Karma)

Run all tests at once:

npm test

Run unit tests:

npm run test:unit

Run unit tests in watch mode:

npm run test:unit:watch

Run functional (integration) tests:

npm run test:func

Design

An overview of this project's design, it's modules, events, and error handling can be found here.

API docs and usage guide

Note you can access the docs for a particular version using "https://github.com/video-dev/hls.js/tree/deployments"

Demo

Latest Release

https://hls-js.netlify.com/demo

Master

https://hls-js-dev.netlify.com/demo

Specific Version

Find the commit on https://github.com/video-dev/hls.js/tree/deployments.

Compatibility

HLS.js is only compatible with browsers supporting MediaSource extensions (MSE) API with 'video/MP4' mime-type inputs.

HLS.js is supported on:

  • Chrome 39+ for Android
  • Chrome 39+ for Desktop
  • Firefox 41+ for Android
  • Firefox 42+ for Desktop
  • IE11 for Windows 8.1+
  • Edge for Windows 10+
  • Safari 8+ for MacOS 10.10+
  • Safari for ipadOS 13+

A Promise polyfill is required in browsers missing native promise support.

Please note: iOS Safari on iPhone does not support the MediaSource API. This includes all browsers on iOS as well as apps using UIWebView and WKWebView.

Safari browsers (iOS, iPadOS, and macOS) have built-in HLS support through the plain video "tag" source URL. See the example below (Using HLS.js) to run appropriate feature detection and choose between using HLS.js or natively built-in HLS support.

When a platform has neither MediaSource nor native HLS support, the browser cannot play HLS.

Keep in mind that if the intention is to support HLS on multiple platforms, beyond those compatible with HLS.js, the HLS streams need to strictly follow the specifications of RFC8216, especially if apps, smart TVs, and set-top boxes are to be supported.

Find a support matrix of the MediaSource API here: https://developer.mozilla.org/en-US/docs/Web/API/MediaSource

Using HLS.js

Installation

Prepackaged builds are included with each release. Or install the hls.js as a dependency of your project:

npm install --save hls.js

A canary channel is also available if you prefer to work off the development branch (master):

npm install hls.js@canary

Embedding HLS.js

Directly include dist/hls.js or dist/hls.min.js in a script tag on the page. This setup prioritizes HLS.js MSE playback over native browser support for HLS playback in HTMLMediaElements:

<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<!-- Or if you want a more recent alpha version -->
<!-- <script src="https://cdn.jsdelivr.net/npm/hls.js@alpha"></script> -->
<video id="video"></video>
<script>
  var video = document.getElementById('video');
  var videoSrc = 'https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8';
  if (Hls.isSupported()) {
    var hls = new Hls();
    hls.loadSource(videoSrc);
    hls.attachMedia(video);
  }
  // HLS.js is not supported on platforms that do not have Media Source
  // Extensions (MSE) enabled.
  //
  // When the browser has built-in HLS support (check using `canPlayType`),
  // we can provide an HLS manifest (i.e. .m3u8 URL) directly to the video
  // element through the `src` property. This is using the built-in support
  // of the plain video element, without using HLS.js.
  //
  // Note: it would be more normal to wait on the 'canplay' event below however
  // on Safari (where you are most likely to find built-in HLS support) the
  // video.src URL must be on the user-driven white-list before a 'canplay'
  // event will be emitted; the last video event that can be reliably
  // listened-for when the URL is not on the white-list is 'loadedmetadata'.
  else if (video.canPlayType('application/vnd.apple.mpegurl')) {
    video.src = videoSrc;
  }
</script>

Alternative setup

To check for native browser support first and then fallback to HLS.js, swap these conditionals. See this comment to understand some of the tradeoffs.

<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<!-- Or if you want a more recent alpha version -->
<!-- <script src="https://cdn.jsdelivr.net/npm/hls.js@alpha"></script> -->
<video id="video"></video>
<script>
  var video = document.getElementById('video');
  var videoSrc = 'https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8';
  //
  // First check for native browser HLS support
  //
  if (video.canPlayType('application/vnd.apple.mpegurl')) {
    video.src = videoSrc;
    //
    // If no native HLS support, check if HLS.js is supported
    //
  } else if (Hls.isSupported()) {
    var hls = new Hls();
    hls.loadSource(videoSrc);
    hls.attachMedia(video);
  }
</script>

For more embed and API examples see docs/API.md.

CORS

All HLS resources must be delivered with CORS headers permitting GET requests.

Video Control

Video is controlled through HTML <video> element HTMLVideoElement methods, events and optional UI controls (<video controls>).

Player Integration

The following players integrate HLS.js for HLS playback:

They use HLS.js in production!

cdn77

Chrome/Firefox integration

made by gramk, plays hls from address bar and m3u8 links

License

HLS.js is released under Apache 2.0 License

Comments
  • Possible memory leak w/ multiple Hls players

    Possible memory leak w/ multiple Hls players

    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
    • [] The issue observed is not already reported by searching on Github under https://github.com/video-dev/hls.js/issues
    • [] 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: any
    • Hls.js version: v0.7.9
    • Browser name/version: Chrome v59
    • OS name/version: Windows 10 v1703
    Steps to reproduce

    This is a replication of the issue /clappr/clappr#1446. I'm having at maximum 9 hls players in order to build a videowall showing CCTV streams in HLS format.

    I've implemented pure hls.js and the results were better than clappr's (as expected because there's no additional overhead), but the memory rises overtime (around 15-20 minutes of spectating) to > 1.5GB and up, and it doesn't stop nor decrease significantly.

    This is my hls config dictionary:

    var config = {
                capLevelToPlayerSize: true,
                maxBufferSize: 30,
                maxBufferLength: 5
            };
            self.hls = new Hls(config);
    

    I don't know what else I can do. I've seen issue #939 but I don't know if it is related because its target version is old.

    Thanks in advance.

    Expected behavior

    Consistent memory usage

    Actual behavior

    Sky is the limit for memory usage (or just memory limits)! The browser even crashes after exceeding a certain amount of GBs (depending on computer).

    Help wanted Confirmed Stale 
    opened by andrefilipegsilva 68
  • Mac OS desktop Safari compatibility

    Mac OS desktop Safari compatibility

    @mangui - First off: congrats! Very exciting.

    Now the bad news ;-) Mac OS Safari's MediaSource implementation is rather suboptimal. It hangs with the samples at http://dailymotion.github.io/hls.js/demo/ Some other streams make it at least to the second segment.

    As I said, I presume it's Safari's MediaSource implementation, with MPEG-DASH one encounters similar 'surprises', for instance MediaSource.isTypeSupported is even less useful than canPlayType, for instance MediaSource.isTypeSupported('video/mp4; codecs="bogus"') returns true.

    Not sure whether there's a way around generic hls in Safari yet (e.g. for smooth manual bit rate switching). But maybe you already have ideas.

    Enhancement Wontfix browser: Safari 
    opened by phloxic 57
  • Stream got stuck on  firefox (45.0.1)

    Stream got stuck on firefox (45.0.1)

    Hi mangui, I tried to play live stream on multiple instances of firefox (on ubuntu ,mac ,fedora ) stream got stuck at the same time on all ff browser ,we are streaming from wowza.

    I went through server logs and found following details , Here in our environment, the difference between pts/dts values of key frames is 3003 millisecs , Sometimes in between the difference between pts value > or < 3003 At this timestamp, I observed that playback got stuck on all instances of the ff browser at the same time and never recovered . ( observed this issue even for 1 millisecond PTS diff i.e 3002),

    stream got recovered after a manual seek.

    Can this be the reason for the playback to get stuck ? Is it firefox specific if so,What other info i need so that I can reach out to FF dev guys to raise an issue, help me out :)

    These are player logs, stream got froze at line currentTime:533.890589,bufferEnd:540.762 videoFroze.txt

    Wontfix browser: Firefox 
    opened by suuhas 53
  • OSX High Sierra + Chrome (and Firefox) Playback Issues - bufferStalledError

    OSX High Sierra + Chrome (and Firefox) Playback Issues - bufferStalledError

    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
    
    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
      }
    }
    
    opened by soundspeachy 51
  • Live stream stalls with

    Live stream stalls with "playback stalling in low buffer"

    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: http://hsn.mpl.miisolutions.net/hsn-live01/definst/smil:HSN1_ipad.smil/playlist.m3u8
    • Hls.js version: v0.7.8
    • Browser name/version: Chrome Latest
    • OS name/version: Mac, WIndows
    Steps to reproduce
    1. Click the link below to open HLS JS demo page with Live HLS stream http://video-dev.github.io/hls.js/demo/?src=http%3A%2F%2Fhsn.mpl.miisolutions.net%2Fhsn-live01%2F_definst_%2Fsmil%3AHSN1_ipad.smil%2Fplaylist.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&dumpfMP4=false&levelCapping=-1&defaultAudioCodec=undefined
    2. Leave it to play for 5 -20 minutes
    3. after few minutes, playback stops (dev tool, we can see "playback stalling in low buffer "
    Expected behavior

    Playback should not stop

    Actual behavior

    playback stops after few minutes

    Console output
    logger.js:39 [log] > main stream:KEY_LOADING->IDLE
    logger.js:39 [log] > live playlist, switching playlist, unknown, load middle frag : 49
    logger.js:39 [log] > Loading 49 of [45 ,51],level 2, currentTime:176.396,bufferEnd:176.469
    logger.js:39 [log] > main stream:IDLE->FRAG_LOADING
    logger.js:39 [warn] > playback stalling in low buffer @176.39583
    (anonymous) @ logger.js:39
    _checkBuffer @ stream-controller.js:1449
    doTick @ stream-controller.js:171
    tick @ stream-controller.js:124
    (index):529 Object {type: “mediaError”, details: “bufferStalledError”, fatal: false, buffer: 0.07350200000001905}
    (anonymous) @ (index):529
    EventEmitter.emit @ events.js:96
    trigger @ hls.js:93
    _checkBuffer @ stream-controller.js:1450
    doTick @ stream-controller.js:171
    tick @ stream-controller.js:124
    logger.js:39 [log] > Loaded  49 of [45 ,51],level 2
    logger.js:39 [log] > main stream:FRAG_LOADING->PARSING
    logger.js:39 [log] > Parsing 49 of [45 ,51],level 2, cc 0
    logger.js:39 [log] > main:switch detected
    blob:http://video-dev.github.io/8ba6d870-5476-4e58-b5f3-350c9dc42fdc:5167 [log] > manifest codec:mp4a.40.5,ADTS data:type:2,sampleingIndex:6[24000Hz],channelConfig:2
    blob:http://video-dev.github.io/8ba6d870-5476-4e58-b5f3-350c9dc42fdc:5167 [log] > parsed codec:mp4a.40.5,rate:24000,nb channel:2
    blob:http://video-dev.github.io/8ba6d870-5476-4e58-b5f3-350c9dc42fdc:5167 [log] > audio sampling rate : 24000
    logger.js:39 [log] > main track:audio,container:audio/mp4,codecs[level/parsed]=[mp4a.40.5/mp4a.40.5]
    logger.js:39 [log] > main track:video,container:video/mp4,codecs[level/parsed]=[avc1.420015/avc1.42c015]
    logger.js:39 [log] > Parsed audio,PTS:[192.512,196.523],DTS:[192.512/196.523],nb:94,dropped:0
    logger.js:39 [log] > Parsed video,PTS:[192.519,196.523],DTS:[192.519/196.523],nb:120,dropped:0
    logger.js:39 [log] > main stream:PARSING->PARSED
    logger.js:39 [log] > main buffered : [4.014,168.478][169.763,176.469][192.519,196.523]
    logger.js:39 [log] > latency/loading/parsing/append/kbps:382/53/11/3/4021
    logger.js:39 [log] > main stream:PARSED->IDLE
    logger.js:39 [log] > Loading key for 45 of [45 ,51],level 2
    logger.js:39 [log] > main stream:IDLE->KEY_LOADING
    logger.js:39 [log] > main stream:KEY_LOADING->IDLE
    logger.js:39 [log] > Loading 45 of [45 ,51],level 2, currentTime:176.396,bufferEnd:176.469
    logger.js:39 [log] > main stream:IDLE->FRAG_LOADING
    logger.js:39 [log] > Loaded  45 of [45 ,51],level 2
    logger.js:39 [log] > main stream:FRAG_LOADING->PARSING
    logger.js:39 [log] > Parsing 45 of [45 ,51],level 2, cc 0
    logger.js:39 [log] > Parsed audio,PTS:[176.469,180.480],DTS:[176.469/180.480],nb:94,dropped:0
    logger.js:39 [log] > Parsed video,PTS:[176.470,180.507],DTS:[176.470/180.507],nb:121,dropped:0
    logger.js:39 [log] > main stream:PARSING->PARSED
    logger.js:39 [log] > main buffered : [4.014,168.478][169.763,180.480][192.519,196.523]
    logger.js:39 [log] > latency/loading/parsing/append/kbps:320/52/16/2/4631
    logger.js:39 [log] > main stream:PARSED->IDLE
    logger.js:39 [log] > switching to level 3
    logger.js:39 [log] > loading playlist for level 3
    logger.js:39 [log] > main stream:IDLE->WAITING_LEVEL
    logger.js:39 [log] > main stream:WAITING_LEVEL->IDLE
    logger.js:39 [log] > main stream:IDLE->WAITING_LEVEL
    logger.js:39 [warn] > playback not stuck anymore @176.470523, after 1101ms
    (anonymous) @ logger.js:39
    _checkBuffer @ stream-controller.js:1423
    doTick @ stream-controller.js:171
    tick @ stream-controller.js:124
    logger.js:39 [log] > main stream:WAITING_LEVEL->IDLE
    logger.js:39 [log] > main stream:IDLE->WAITING_LEVEL
    logger.js:39 [log] > live playlist, reload in 3631 ms
    logger.js:39 [log] > level 3 loaded [45,51],duration:28.0749
    logger.js:39 [log] > live playlist - outdated PTS, unknown sliding
    logger.js:39 [log] > main stream:WAITING_LEVEL->IDLE
    
    For media errors reported on Chrome browser, please also paste the output of chrome://media-internals 
    
    Wontfix 
    opened by kiranatious 49
  • Support group-based fallback to backup/redundant tracks for subtitles (like we did for audio)

    Support group-based fallback to backup/redundant tracks for subtitles (like we did for audio)

    This PR will...

    • Add support for group-based backup/redundant source encoder for subtitles (like we did for audio)

    This means it will allow for having encoder groups for video/audio/subs and when one live encoder in a group fails (chunk playlist update HTTP error code or timeout), we will switch all media playlists to the other group.

    This has already been done by use and merged to this master a while ago for AUDIO. Now we add support for SUBTITLES.

    • ~~Add an API to allow set preferences for media options (language of audio/subs) independent of the backup encoder redundancy groups that we have switched. This allows for a UI to display options independent of redundant track groups.~~

    ~~It is a meaningful consequence of the functionality we add support for, in order to be able to switch tracks based on the actual language options but independent of selecting the specific media. It will make sure that the preferred option is fulfilled within the currently used redundant tracks group.~~

    Why is this Pull Request needed?

    ZDF uses redundants live encoding infrastructure, which allows for switching to the backup streams if either fails in production.

    EDIT:

    Quoting @robwalch

    There are two goals: The player and api event should only expose audio and subtitle tracks for the current group-id (resolves #2972) Add support for group-based backup/redundant source encoder for subtitles

    Resolves issues:

    #2972 (only regarding correct group selection across media types)

    Checklist

    • [x] changes have been done against master branch, and PR does not conflict
    • [x] new unit / functional tests have been added (whenever applicable)
    • [x] API or design changes are documented in API.md
    opened by tchakabam 48
  • Memory leak in 0.6.14+?

    Memory leak in 0.6.14+?

    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/dailymotion/hls.js/issues
    • [x] The issue occurs in the latest reference client on http://dailymotion.github.io/hls.js/demo and not just on my page
    • Link to playable M3U8 file:
    • Hls.js version: 0.6.17 after having upgraded from 0.6.13 which does not have this issue.
    • Browser name/version: Seems to be an issue across browsers. Firefox 50.1.0, Chrome 56 beta, Edge 38.
    • OS name/version: Windows 10
    Steps to reproduce
    1. Play back a video for a while. My case has been live DVR playlists, but that may not matter.
    2. Let it play and watch your memory usage continue to grow. It may even get to the point of crashing the browser after a while.
    Expected behavior

    Stable memory usage.

    Actual behavior

    Memory usage continues to grow over time, frequently even to the point of crashing the browser. It's consistent and noticeably different from prior behavior.

    I've been doing some testing by incrementing the hls.js version from where I was at on 0.6.13. It looks to have been introduced in 0.6.14.

    Wontfix Need info 
    opened by kfeinUI 48
  • Video playback does not show correct frame after seek

    Video playback does not show correct frame after seek

    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://hunchai.oss-cn-hangzhou.aliyuncs.com/assets/upload/8e3b35f2ba4264b7bdca5ffa7049f951bb54231211bc8c4c3492d3e0/normalize.mp4.m3u8
    • Hls.js version: 0.9.1
    • Browser name/version: Google Chrome 66.0.3359.139
    • OS name/version: macOS High Sierra 10.13.3
    Steps to reproduce
    1. Load and attach the m3u8(25 fps) file link via hls.js
    2. Seek to time 0.040001(2nd frame) for 5 times
    Expected behavior

    The video player show 00:01 every time after seek

    Actual behavior

    seek seq | result -------- | ------ 1 | 00:01 2 | 00:00 3 | 00:04 4 | 00:00 5 | 00:00

    Console output
    logger.js:38 [log] > loadSource:https://hunchai.oss-cn-hangzhou.aliyuncs.com/assets/upload/8e3b35f2ba4264b7bdca5ffa7049f951bb54231211bc8c4c3492d3e0/normalize.mp4.m3u8
    logger.js:38 [log] > trigger BUFFER_RESET
    logger.js:38 [log] > attachMedia
    logger.js:38 [log] > manifest loaded,1 level(s) found, first bitrate:undefined
    logger.js:38 [log] > startLoad(-1)
    logger.js:38 [log] > switching to level 0
    logger.js:38 [log] > main stream:STOPPED->IDLE
    logger.js:38 [log] > audio tracks updated
    logger.js:38 [log] > subtitle tracks updated
    logger.js:38 [log] > level 0 loaded [0,0],duration:10
    logger.js:38 [log] > media source opened
    logger.js:38 [log] > startLoad(-1)
    logger.js:38 [log] > main stream:IDLE->STOPPED
    logger.js:38 [log] > main stream:STOPPED->IDLE
    logger.js:38 [log] > Loading 0 of [0 ,0],level 0, currentTime:-1.000,bufferEnd:-1.000
    logger.js:38 [log] > demuxing in webworker
    logger.js:38 [log] > main stream:IDLE->FRAG_LOADING
    logger.js:38 [log] > audio stream:STOPPED->STARTING
    logger.js:38 [log] > audio stream:STARTING->WAITING_TRACK
    logger.js:38 [log] > audio stream:WAITING_TRACK->STOPPED
    logger.js:38 [log] > audio stream:STOPPED->STARTING
    logger.js:38 [log] > audio stream:STARTING->WAITING_TRACK
    favicon.ico:1 GET http://localhost:8000/favicon.ico 404 (Not Found)
    Image (async)
    (anonymous) @ num_tab.js:32
    logger.js:38 [log] > Loaded  0 of [0 ,0],level 0
    logger.js:38 [log] > main stream:FRAG_LOADING->PARSING
    logger.js:38 [log] > Parsing 0 of [0 ,0],level 0, cc 0
    logger.js:38 [log] > main:discontinuity detected
    logger.js:38 [log] > main:switch detected
    logger.js:38 [log] > InitPTS for cc: 0 found from video track: 133200
    logger.js:38 [log] > creating sourceBuffer(video/mp4;codecs=avc1.64001e)
    logger.js:38 [log] > main track:video,container:video/mp4,codecs[level/parsed]=[undefined/avc1.64001e]
    logger.js:38 [log] > Parsed video,PTS:[0.080,10.040],DTS:[0.000/10.000],nb:250,dropped:0
    logger.js:38 [log] > main stream:PARSING->PARSED
    logger.js:38 [log] > main buffered : [0.000,10.000]
    logger.js:38 [log] > latency/loading/parsing/append/kbps:95/19/179/3/4450
    logger.js:38 [log] > main stream:PARSED->IDLE
    logger.js:38 [log] > video sourceBuffer now EOS
    logger.js:38 [log] > all media data available, signal endOfStream() to MediaSource and stop loading fragment
    logger.js:38 [log] > main stream:IDLE->ENDED
    logger.js:38 [log] > target start position not buffered, seek to buffered.start(0) -1 from current time 0 
    logger.js:38 [log] > media seeking to 0.000
    logger.js:38 [log] > main stream:ENDED->IDLE
    logger.js:38 [log] > main stream:IDLE->ENDED
    logger.js:38 [log] > media source ended
    logger.js:38 [warn] > Playback stalling at @0 due to low buffer
    (anonymous) @ logger.js:38
    _reportStall @ stream-controller.js:1542
    _tryFixBufferStall @ stream-controller.js:1515
    _checkBuffer @ stream-controller.js:1464
    doTick @ stream-controller.js:161
    tick @ task-loop.js:101
    setInterval (async)
    (anonymous) @ task-loop.js:63
    setInterval @ hls.js:17294
    startLoad @ stream-controller.js:74
    (anonymous) @ hls.js:292
    startLoad @ hls.js:291
    onMediaAttached @ stream-controller.js:783
    onEventGeneric @ event-handler.js:77
    onEvent @ event-handler.js:64
    EventEmitter.emit @ events.js:96
    trigger @ hls.js:118
    onMediaSourceOpen @ buffer-controller.js:168
    logger.js:38 [log] > media seeked to 0.000
    document.querySelector('#video').currentTime = 0.040001;
    0.040001
    logger.js:38 [log] > media seeking to 0.040
    logger.js:38 [log] > main stream:ENDED->IDLE
    logger.js:38 [log] > main stream:IDLE->ENDED
    logger.js:38 [log] > adjust currentTime from 0.040001 to 0.14000100000000001
    logger.js:38 [log] > media seeking to 0.140
    logger.js:38 [log] > main stream:ENDED->IDLE
    logger.js:38 [log] > main stream:IDLE->ENDED
    logger.js:38 [log] > media seeked to 0.140
    document.querySelector('#video').currentTime = 0.040001;
    0.040001
    logger.js:38 [log] > media seeking to 0.040
    logger.js:38 [log] > main stream:ENDED->IDLE
    logger.js:38 [log] > main stream:IDLE->ENDED
    logger.js:38 [log] > media seeked to 0.040
    document.querySelector('#video').currentTime = 0.040001;
    0.040001
    logger.js:38 [log] > media seeking to 0.040
    logger.js:38 [log] > main stream:ENDED->IDLE
    logger.js:38 [log] > main stream:IDLE->ENDED
    logger.js:38 [log] > adjust currentTime from 0.040001 to 0.24000100000000002
    logger.js:38 [log] > media seeking to 0.240
    logger.js:38 [log] > main stream:ENDED->IDLE
    logger.js:38 [log] > main stream:IDLE->ENDED
    logger.js:38 [log] > media seeked to 0.240
    document.querySelector('#video').currentTime = 0.040001;
    0.040001
    logger.js:38 [log] > media seeking to 0.040
    logger.js:38 [log] > main stream:ENDED->IDLE
    logger.js:38 [log] > main stream:IDLE->ENDED
    logger.js:38 [log] > media seeked to 0.040
    document.querySelector('#video').currentTime = 0.040001;
    0.040001
    logger.js:38 [log] > media seeking to 0.040
    logger.js:38 [log] > main stream:ENDED->IDLE
    logger.js:38 [log] > main stream:IDLE->ENDED
    logger.js:38 [error] > still stuck in high buffer @0.040001 after 3, raise fatal error
    (anonymous) @ logger.js:38
    _tryNudgeBuffer @ stream-controller.js:1602
    _tryFixBufferStall @ stream-controller.js:1528
    _checkBuffer @ stream-controller.js:1464
    doTick @ stream-controller.js:161
    tick @ task-loop.js:101
    onMediaSeeking @ stream-controller.js:865
    seeking (async)
    (anonymous) @ VM611:1
    logger.js:38 [log] > media seeked to 0.040
    
    
    chrome://media-internals output
    {
      "28:0": {
        "id": "28:0",
        "properties": {
          "render_id": 28,
          "player_id": 0,
          "origin_url": "http://localhost:8000/",
          "frame_url": "http://localhost:8000/demo/m3u8.html",
          "frame_title": "Document",
          "url": "blob:http://localhost:8000/8c3ec47a-b932-464d-a076-ab487238fbf3",
          "info": "Selected GpuVideoDecoder for video decoding, config: codec: h264 format: 1 profile: h264 high coded size: [640,480] visible rect: [0,0,640,480] natural size: [640,480] has extra data? false encrypted? false rotation: 0°",
          "pipeline_state": "kStopped",
          "found_video_stream": true,
          "video_codec_name": "h264",
          "video_dds": false,
          "video_decoder": "GpuVideoDecoder",
          "seek_target": 0,
          "height": 480,
          "width": 640,
          "video_buffering_state": "BUFFERING_HAVE_ENOUGH",
          "pipeline_buffering_state": "BUFFERING_HAVE_ENOUGH",
          "duration": 10,
          "event": "WEBMEDIAPLAYER_DESTROYED"
        },
        "allEvents": [
          {
            "time": 0,
            "key": "origin_url",
            "value": "http://localhost:8000/"
          },
          {
            "time": 0.02200007438659668,
            "key": "frame_url",
            "value": "http://localhost:8000/demo/m3u8.html"
          },
          {
            "time": 0.02799999713897705,
            "key": "frame_title",
            "value": "Document"
          },
          {
            "time": 0.23199999332427979,
            "key": "url",
            "value": "blob:http://localhost:8000/8c3ec47a-b932-464d-a076-ab487238fbf3"
          },
          {
            "time": 0.3109999895095825,
            "key": "info",
            "value": "ChunkDemuxer: buffering by DTS"
          },
          {
            "time": 1.9869999885559082,
            "key": "pipeline_state",
            "value": "kStarting"
          },
          {
            "time": 192.55400002002716,
            "key": "found_video_stream",
            "value": true
          },
          {
            "time": 192.56300008296967,
            "key": "video_codec_name",
            "value": "h264"
          },
          {
            "time": 195.2720000743866,
            "key": "video_dds",
            "value": false
          },
          {
            "time": 195.28900003433228,
            "key": "video_decoder",
            "value": "GpuVideoDecoder"
          },
          {
            "time": 195.31200003623962,
            "key": "info",
            "value": "Selected GpuVideoDecoder for video decoding, config: codec: h264 format: 1 profile: h264 high coded size: [640,480] visible rect: [0,0,640,480] natural size: [640,480] has extra data? false encrypted? false rotation: 0°"
          },
          {
            "time": 195.3530000448227,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 204.307000041008,
            "key": "seek_target",
            "value": 0
          },
          {
            "time": 204.34100008010864,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 223.36600005626678,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 226.55000007152557,
            "key": "height",
            "value": 480
          },
          {
            "time": 226.55000007152557,
            "key": "width",
            "value": 640
          },
          {
            "time": 228.1710000038147,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 228.24000000953674,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 204.0090000629425,
            "key": "duration",
            "value": 10
          },
          {
            "time": 4010.1490000486374,
            "key": "pipeline_state",
            "value": "kStopping"
          },
          {
            "time": 4010.315999984741,
            "key": "pipeline_state",
            "value": "kStopped"
          },
          {
            "time": 4010.4550000429153,
            "key": "event",
            "value": "WEBMEDIAPLAYER_DESTROYED"
          }
        ],
        "lastRendered": 0,
        "firstTimestamp_": 709858772.229,
        "destructed": true
      },
      "28:5": {
        "id": "28:5",
        "properties": {
          "render_id": 28,
          "player_id": 5,
          "origin_url": "http://localhost:8000/",
          "frame_url": "http://localhost:8000/demo/m3u8.html",
          "frame_title": "Document",
          "url": "blob:http://localhost:8000/c14c2567-aa5d-448a-a40f-79fb94232c68",
          "info": "Selected GpuVideoDecoder for video decoding, config: codec: h264 format: 1 profile: h264 high coded size: [640,480] visible rect: [0,0,640,480] natural size: [640,480] has extra data? false encrypted? false rotation: 0°",
          "pipeline_state": "kStopped",
          "found_video_stream": true,
          "video_codec_name": "h264",
          "video_dds": false,
          "video_decoder": "GpuVideoDecoder",
          "height": 480,
          "width": 640,
          "video_buffering_state": "BUFFERING_HAVE_ENOUGH",
          "pipeline_buffering_state": "BUFFERING_HAVE_ENOUGH",
          "duration": 10,
          "seek_target": 0.040001,
          "event": "WEBMEDIAPLAYER_DESTROYED"
        },
        "allEvents": [
          {
            "time": 0,
            "key": "origin_url",
            "value": "http://localhost:8000/"
          },
          {
            "time": 0.008999943733215332,
            "key": "frame_url",
            "value": "http://localhost:8000/demo/m3u8.html"
          },
          {
            "time": 0.013000011444091797,
            "key": "frame_title",
            "value": "Document"
          },
          {
            "time": 0.09999990463256836,
            "key": "url",
            "value": "blob:http://localhost:8000/c14c2567-aa5d-448a-a40f-79fb94232c68"
          },
          {
            "time": 0.15699994564056396,
            "key": "info",
            "value": "ChunkDemuxer: buffering by DTS"
          },
          {
            "time": 0.23799991607666016,
            "key": "pipeline_state",
            "value": "kStarting"
          },
          {
            "time": 299.8809999227524,
            "key": "found_video_stream",
            "value": true
          },
          {
            "time": 299.89099991321564,
            "key": "video_codec_name",
            "value": "h264"
          },
          {
            "time": 300.385999917984,
            "key": "video_dds",
            "value": false
          },
          {
            "time": 300.3989999294281,
            "key": "video_decoder",
            "value": "GpuVideoDecoder"
          },
          {
            "time": 300.4189999103546,
            "key": "info",
            "value": "Selected GpuVideoDecoder for video decoding, config: codec: h264 format: 1 profile: h264 high coded size: [640,480] visible rect: [0,0,640,480] natural size: [640,480] has extra data? false encrypted? false rotation: 0°"
          },
          {
            "time": 300.4359999895096,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 332.64599990844727,
            "key": "height",
            "value": 480
          },
          {
            "time": 332.64599990844727,
            "key": "width",
            "value": 640
          },
          {
            "time": 336.70099997520447,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 336.9119999408722,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 310.9689999818802,
            "key": "duration",
            "value": 10
          },
          {
            "time": 15893.719999909401,
            "key": "pipeline_state",
            "value": "kSuspending"
          },
          {
            "time": 15893.850999951363,
            "key": "pipeline_state",
            "value": "kSuspended"
          },
          {
            "time": 41309.326999902725,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 41309.4319999218,
            "key": "pipeline_state",
            "value": "kResuming"
          },
          {
            "time": 41309.83399999142,
            "key": "video_dds",
            "value": false
          },
          {
            "time": 41309.83899998665,
            "key": "video_decoder",
            "value": "GpuVideoDecoder"
          },
          {
            "time": 41309.86399996281,
            "key": "info",
            "value": "Selected GpuVideoDecoder for video decoding, config: codec: h264 format: 1 profile: h264 high coded size: [640,480] visible rect: [0,0,640,480] natural size: [640,480] has extra data? false encrypted? false rotation: 0°"
          },
          {
            "time": 41309.886999964714,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 41312.886999964714,
            "key": "seek_target",
            "value": 0.140001
          },
          {
            "time": 41314.417999982834,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 41326.294999957085,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 41329.625,
            "key": "height",
            "value": 480
          },
          {
            "time": 41329.625,
            "key": "width",
            "value": 640
          },
          {
            "time": 41331.424999952316,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 41331.47899997234,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 44625.324000000954,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 44625.40999996662,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 44625.453999996185,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_NOTHING"
          },
          {
            "time": 44626.015999913216,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 44627.12999999523,
            "key": "seek_target",
            "value": 0.240001
          },
          {
            "time": 44628.140999913216,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 44629.32299995422,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 44636.010999917984,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 44636.05499994755,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 47793.60399997234,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 47793.67900002003,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 47793.75499999523,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_NOTHING"
          },
          {
            "time": 47794.45899999142,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 47795.69400000572,
            "key": "seek_target",
            "value": 0.140001
          },
          {
            "time": 47796.2120000124,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 47797.893000006676,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 47802.982999920845,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 47803.0529999733,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 50409.515999913216,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 50409.58299994469,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 50409.638999938965,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_NOTHING"
          },
          {
            "time": 50410.139999985695,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 50414.65099990368,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 50414.74399995804,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 71648.72499990463,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 71648.79499995708,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 71648.84700000286,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_NOTHING"
          },
          {
            "time": 71649.49199998379,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 71650.51199996471,
            "key": "seek_target",
            "value": 0.240001
          },
          {
            "time": 71651.06499993801,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 71652.78699994087,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 71660.54600000381,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 71660.60199999809,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 73527.39300000668,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 73527.46899998188,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 73527.52199995518,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_NOTHING"
          },
          {
            "time": 73528.0529999733,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 73532.93400001526,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 73532.99699997902,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 75861.35099995136,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 75861.41499996185,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 75861.47099995613,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_NOTHING"
          },
          {
            "time": 75862.14999997616,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 75867.31099998951,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 75867.35399997234,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 79504.86699998379,
            "key": "pipeline_state",
            "value": "kStopping"
          },
          {
            "time": 79504.97200000286,
            "key": "pipeline_state",
            "value": "kStopped"
          },
          {
            "time": 79505.0419999361,
            "key": "event",
            "value": "WEBMEDIAPLAYER_DESTROYED"
          }
        ],
        "lastRendered": 0,
        "firstTimestamp_": 709863138.284,
        "destructed": true
      },
      "28:10": {
        "id": "28:10",
        "properties": {
          "render_id": 28,
          "player_id": 10,
          "origin_url": "http://localhost:8000/",
          "frame_url": "http://localhost:8000/demo/m3u8.html",
          "frame_title": "Document",
          "url": "blob:http://localhost:8000/855ce18c-a1fa-490b-b79e-b0bbf724d174",
          "info": "Selected GpuVideoDecoder for video decoding, config: codec: h264 format: 1 profile: h264 high coded size: [640,480] visible rect: [0,0,640,480] natural size: [640,480] has extra data? false encrypted? false rotation: 0°",
          "pipeline_state": "kStopped",
          "found_video_stream": true,
          "video_codec_name": "h264",
          "video_dds": false,
          "video_decoder": "GpuVideoDecoder",
          "seek_target": 0.040001,
          "height": 480,
          "width": 640,
          "video_buffering_state": "BUFFERING_HAVE_ENOUGH",
          "pipeline_buffering_state": "BUFFERING_HAVE_ENOUGH",
          "duration": 10,
          "event": "WEBMEDIAPLAYER_DESTROYED"
        },
        "allEvents": [
          {
            "time": 0,
            "key": "origin_url",
            "value": "http://localhost:8000/"
          },
          {
            "time": 0.009000062942504883,
            "key": "frame_url",
            "value": "http://localhost:8000/demo/m3u8.html"
          },
          {
            "time": 0.013000011444091797,
            "key": "frame_title",
            "value": "Document"
          },
          {
            "time": 0.1629999876022339,
            "key": "url",
            "value": "blob:http://localhost:8000/855ce18c-a1fa-490b-b79e-b0bbf724d174"
          },
          {
            "time": 0.2250000238418579,
            "key": "info",
            "value": "ChunkDemuxer: buffering by DTS"
          },
          {
            "time": 0.9320000410079956,
            "key": "pipeline_state",
            "value": "kStarting"
          },
          {
            "time": 313.56500005722046,
            "key": "found_video_stream",
            "value": true
          },
          {
            "time": 313.56900000572205,
            "key": "video_codec_name",
            "value": "h264"
          },
          {
            "time": 314.04100000858307,
            "key": "video_dds",
            "value": false
          },
          {
            "time": 314.05799996852875,
            "key": "video_decoder",
            "value": "GpuVideoDecoder"
          },
          {
            "time": 314.08000004291534,
            "key": "info",
            "value": "Selected GpuVideoDecoder for video decoding, config: codec: h264 format: 1 profile: h264 high coded size: [640,480] visible rect: [0,0,640,480] natural size: [640,480] has extra data? false encrypted? false rotation: 0°"
          },
          {
            "time": 314.10000002384186,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 326.54499995708466,
            "key": "seek_target",
            "value": 0
          },
          {
            "time": 326.57299995422363,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 347.61100006103516,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 350.8400000333786,
            "key": "height",
            "value": 480
          },
          {
            "time": 350.8400000333786,
            "key": "width",
            "value": 640
          },
          {
            "time": 354.71599996089935,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 354.80799996852875,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 325.5180000066757,
            "key": "duration",
            "value": 10
          },
          {
            "time": 9213.009999990463,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 9213.080000042915,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 9213.12300002575,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_NOTHING"
          },
          {
            "time": 9213.81400001049,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 9215.335000038147,
            "key": "seek_target",
            "value": 0.140001
          },
          {
            "time": 9216.177999973297,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 9218.210999965668,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 9223.212000012398,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 9223.261000037193,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 10795.585000038147,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 10795.667999982834,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 10795.728999972343,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_NOTHING"
          },
          {
            "time": 10796.25400006771,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 10801.827000021935,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 10801.912000060081,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 12912.611000061035,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 12912.667000055313,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 12912.71700000763,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_NOTHING"
          },
          {
            "time": 12913.356999993324,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 12914.330000042915,
            "key": "seek_target",
            "value": 0.240001
          },
          {
            "time": 12914.879999995232,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 12916.634999990463,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 12923.889999985695,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 12923.93900001049,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 14369.837000012398,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 14369.912000060081,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 14369.955999970436,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_NOTHING"
          },
          {
            "time": 14370.4659999609,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 14375.787000060081,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 14375.858000040054,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 15745.552999973297,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 15745.608000040054,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 15745.662000060081,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_NOTHING"
          },
          {
            "time": 15746.476999998093,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 15751.394000053406,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 15751.473999977112,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 16680.552999973297,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 16680.606999993324,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 16680.66200006008,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_NOTHING"
          },
          {
            "time": 16681.264000058174,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 16686.963000059128,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 16687.024999976158,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 21447.320000052452,
            "key": "pipeline_state",
            "value": "kStopping"
          },
          {
            "time": 21447.491999983788,
            "key": "pipeline_state",
            "value": "kStopped"
          },
          {
            "time": 21447.713000059128,
            "key": "event",
            "value": "WEBMEDIAPLAYER_DESTROYED"
          }
        ],
        "lastRendered": 0,
        "firstTimestamp_": 709942987.885,
        "destructed": true
      },
      "28:15": {
        "id": "28:15",
        "properties": {
          "render_id": 28,
          "player_id": 15,
          "origin_url": "http://localhost:8000/",
          "frame_url": "http://localhost:8000/demo/m3u8.html",
          "frame_title": "Document",
          "url": "blob:http://localhost:8000/528e4c39-06b2-4a5b-968a-34825aea4c7f",
          "info": "Selected GpuVideoDecoder for video decoding, config: codec: h264 format: 1 profile: h264 high coded size: [640,480] visible rect: [0,0,640,480] natural size: [640,480] has extra data? false encrypted? false rotation: 0°",
          "pipeline_state": "kStopped",
          "found_video_stream": true,
          "video_codec_name": "h264",
          "video_dds": false,
          "video_decoder": "GpuVideoDecoder",
          "height": 480,
          "width": 640,
          "video_buffering_state": "BUFFERING_HAVE_ENOUGH",
          "pipeline_buffering_state": "BUFFERING_HAVE_ENOUGH",
          "duration": 10,
          "seek_target": 0.040001,
          "event": "WEBMEDIAPLAYER_DESTROYED"
        },
        "allEvents": [
          {
            "time": 0,
            "key": "origin_url",
            "value": "http://localhost:8000/"
          },
          {
            "time": 0.008999943733215332,
            "key": "frame_url",
            "value": "http://localhost:8000/demo/m3u8.html"
          },
          {
            "time": 0.01399993896484375,
            "key": "frame_title",
            "value": "Document"
          },
          {
            "time": 0.10299992561340332,
            "key": "url",
            "value": "blob:http://localhost:8000/528e4c39-06b2-4a5b-968a-34825aea4c7f"
          },
          {
            "time": 0.15899991989135742,
            "key": "info",
            "value": "ChunkDemuxer: buffering by DTS"
          },
          {
            "time": 0.19499993324279785,
            "key": "pipeline_state",
            "value": "kStarting"
          },
          {
            "time": 342.2689999341965,
            "key": "found_video_stream",
            "value": true
          },
          {
            "time": 342.27300000190735,
            "key": "video_codec_name",
            "value": "h264"
          },
          {
            "time": 342.75300002098083,
            "key": "video_dds",
            "value": false
          },
          {
            "time": 342.7630000114441,
            "key": "video_decoder",
            "value": "GpuVideoDecoder"
          },
          {
            "time": 342.77699995040894,
            "key": "info",
            "value": "Selected GpuVideoDecoder for video decoding, config: codec: h264 format: 1 profile: h264 high coded size: [640,480] visible rect: [0,0,640,480] natural size: [640,480] has extra data? false encrypted? false rotation: 0°"
          },
          {
            "time": 342.789999961853,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 369.4299999475479,
            "key": "height",
            "value": 480
          },
          {
            "time": 369.4299999475479,
            "key": "width",
            "value": 640
          },
          {
            "time": 370.8379999399185,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 370.9359999895096,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 353.60599994659424,
            "key": "duration",
            "value": 10
          },
          {
            "time": 3468.71799993515,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 3468.7999999523163,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 3468.847000002861,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_NOTHING"
          },
          {
            "time": 3469.5920000076294,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 3474.524999976158,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 3474.5849999189377,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 5393.690999984741,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 5393.763000011444,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 5393.814999938011,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_NOTHING"
          },
          {
            "time": 5394.3949999809265,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 5398.761999964714,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 5398.821999907494,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 8186.488999962807,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 8186.546000003815,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 8186.598999977112,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_NOTHING"
          },
          {
            "time": 8187.115000009537,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 8188.18900001049,
            "key": "seek_target",
            "value": 0.140001
          },
          {
            "time": 8189.182999968529,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 8191.264999985695,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 8197.337999939919,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 8197.444000005722,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 10521.204999923706,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 10521.265999913216,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 10521.309000015259,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_NOTHING"
          },
          {
            "time": 10521.774999976158,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 10525.995000004768,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 10526.02999997139,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 11654.054000020027,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 11654.116999983788,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 11654.167999982834,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_NOTHING"
          },
          {
            "time": 11654.692999958992,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 11655.699000000954,
            "key": "seek_target",
            "value": 0.240001
          },
          {
            "time": 11656.212999939919,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 11658.473999977112,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 11665.31099998951,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 11665.37199997902,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 12703.880999922752,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 12703.930999994278,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 12703.980999946594,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_NOTHING"
          },
          {
            "time": 12704.492999911308,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 12709.422999978065,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 12709.5,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 17199.413999915123,
            "key": "pipeline_state",
            "value": "kStopping"
          },
          {
            "time": 17199.518999934196,
            "key": "pipeline_state",
            "value": "kStopped"
          },
          {
            "time": 17199.5909999609,
            "key": "event",
            "value": "WEBMEDIAPLAYER_DESTROYED"
          }
        ],
        "lastRendered": 0,
        "firstTimestamp_": 709964781.562,
        "destructed": true
      },
      "28:20": {
        "id": "28:20",
        "properties": {
          "render_id": 28,
          "player_id": 20,
          "origin_url": "http://localhost:8000/",
          "frame_url": "http://localhost:8000/demo/m3u8.html",
          "frame_title": "Document",
          "url": "blob:http://localhost:8000/1c874f75-ec99-417b-8f56-8c367efe98b4",
          "info": "Selected GpuVideoDecoder for video decoding, config: codec: h264 format: 1 profile: h264 high coded size: [640,480] visible rect: [0,0,640,480] natural size: [640,480] has extra data? false encrypted? false rotation: 0°",
          "pipeline_state": "kPlaying",
          "found_video_stream": true,
          "video_codec_name": "h264",
          "video_dds": false,
          "video_decoder": "GpuVideoDecoder",
          "seek_target": 0.040001,
          "height": 480,
          "width": 640,
          "video_buffering_state": "BUFFERING_HAVE_ENOUGH",
          "pipeline_buffering_state": "BUFFERING_HAVE_ENOUGH",
          "duration": 10
        },
        "allEvents": [
          {
            "time": 0,
            "key": "origin_url",
            "value": "http://localhost:8000/"
          },
          {
            "time": 0.008999943733215332,
            "key": "frame_url",
            "value": "http://localhost:8000/demo/m3u8.html"
          },
          {
            "time": 0.01399993896484375,
            "key": "frame_title",
            "value": "Document"
          },
          {
            "time": 0.09500002861022949,
            "key": "url",
            "value": "blob:http://localhost:8000/1c874f75-ec99-417b-8f56-8c367efe98b4"
          },
          {
            "time": 0.1369999647140503,
            "key": "info",
            "value": "ChunkDemuxer: buffering by DTS"
          },
          {
            "time": 0.36500000953674316,
            "key": "pipeline_state",
            "value": "kStarting"
          },
          {
            "time": 337.03799998760223,
            "key": "found_video_stream",
            "value": true
          },
          {
            "time": 337.0419999361038,
            "key": "video_codec_name",
            "value": "h264"
          },
          {
            "time": 337.4909999370575,
            "key": "video_dds",
            "value": false
          },
          {
            "time": 337.5019999742508,
            "key": "video_decoder",
            "value": "GpuVideoDecoder"
          },
          {
            "time": 337.5160000324249,
            "key": "info",
            "value": "Selected GpuVideoDecoder for video decoding, config: codec: h264 format: 1 profile: h264 high coded size: [640,480] visible rect: [0,0,640,480] natural size: [640,480] has extra data? false encrypted? false rotation: 0°"
          },
          {
            "time": 337.5310000181198,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 348.72500002384186,
            "key": "seek_target",
            "value": 0
          },
          {
            "time": 348.7519999742508,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 364.46399998664856,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 367.4190000295639,
            "key": "height",
            "value": 480
          },
          {
            "time": 367.4190000295639,
            "key": "width",
            "value": 640
          },
          {
            "time": 368.60799992084503,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 368.66299998760223,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 347.76399993896484,
            "key": "duration",
            "value": 10
          },
          {
            "time": 3908.001999974251,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 3908.0729999542236,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 3908.1180000305176,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_NOTHING"
          },
          {
            "time": 3908.5770000219345,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 3909.9609999656677,
            "key": "seek_target",
            "value": 0.140001
          },
          {
            "time": 3910.5889999866486,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 3912.1629999876022,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 3917.2439999580383,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 3917.2949999570847,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 5455.059000015259,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 5455.120999932289,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 5455.164999961853,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_NOTHING"
          },
          {
            "time": 5455.662999987602,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 5461.2009999752045,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 5461.276999950409,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 6941.601999998093,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 6941.659999966621,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 6941.715999960899,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_NOTHING"
          },
          {
            "time": 6942.2699999809265,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 6943.289000034332,
            "key": "seek_target",
            "value": 0.240001
          },
          {
            "time": 6943.8830000162125,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 6946.004999995232,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 6952.676999926567,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 6952.7300000190735,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 8555.985000014305,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 8556.065999984741,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 8556.12800002098,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_NOTHING"
          },
          {
            "time": 8556.585999965668,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 8561.46700000763,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 8561.521999955177,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 10055.96899998188,
            "key": "seek_target",
            "value": 0.040001
          },
          {
            "time": 10056.03299999237,
            "key": "pipeline_state",
            "value": "kSeeking"
          },
          {
            "time": 10056.078999996185,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_NOTHING"
          },
          {
            "time": 10057.241999983788,
            "key": "pipeline_state",
            "value": "kPlaying"
          },
          {
            "time": 10062.291000008583,
            "key": "video_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          },
          {
            "time": 10062.386999964714,
            "key": "pipeline_buffering_state",
            "value": "BUFFERING_HAVE_ENOUGH"
          }
        ],
        "lastRendered": 0,
        "firstTimestamp_": 709982345.225
      }
    }
    
    Stale 
    opened by wenwucn 45
  • Add CEA-708 parsing and rendering

    Add CEA-708 parsing and rendering

    I've made a fork of hls.js so I can add the same CEA-708 parsing we integrated into flashls:

    https://github.com/jlacivita/hls.js

    The great thing about hls.js is that we can leverage the TextTrack API to display the captions natively, so we don't need to surface binary onCaptionInfo events like we did in Flash, we can actually build an end-to-end CEA-708 feature that leverages the browsers ability to render VTTCues.

    I've got a rendering PoC here (nothing 708 specific here, just programmatically adding VTTCues to a video that's playing): http://demo.theplatform.com/jeremy/708/createTrackCue.html

    Just type some text and hit the button, you'll see captions show up.

    So the needed parts are:

    1. parse the SEI messages out of each fragment in tsdemuxer.js (done)
    2. get them property sorted by PTS values
    3. bubble them up to some point in the hls.js source that can call video.addTextTrack() and track.addCue() as needed

    I've got 1 done, but they're just in a private array in tsdumuxer. @mangui: any guidance on where to get the PTS value, and where the userData cues should be handed off so I can sort them (2) would be great

    Enhancement 
    opened by jlacivita 45
  • engine state transition WAITING_LEVEL to IDLE and vice versa infinite loop

    engine state transition WAITING_LEVEL to IDLE and vice versa infinite loop

    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/dailymotion/hls.js/issues
    • [x] The issue occurs in the latest reference client on http://dailymotion.github.io/hls.js/demo and not just on my page
    • Link to playable M3U8 file: It is an live on demand source, so I cannot post it
    • Hls.js version: 0.6.6
    • Browser name/version: chrome 54.0.2840.71 (64-bit)
    • OS name/version: mac osx 10.11.6
    Steps to reproduce

    When I play a playlist.m3u8 file generated by my Wowza Streaming Engine server. Sometimes the engine tries to switch level, but the it start looping between the two states IDLE and WAITING.

    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    

    These two log messages are printed out forever. If I manually change the quality/level the engine flush the buffer and restart the loading and all works again, but I have to do it manually. Previous versions do not have this problem.

    Expected behavior

    I expect the playback self switch the level and tries to recover automatically or something similar.

    Actual behavior

    The playback is stucked.

    Console output
    [log] > live playlist, reload in 2454 ms
    [log] > level 1 loaded [74,119],duration:117.381
    [log] > live playlist sliding:6.049
    [log] > Updating mediasource duration to 123.42999999999999
    [log] > Loading 119 of [74 ,119],level 1, currentTime:109.688733,bufferEnd:120.486
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  119 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 119 of [74 ,119],level 1, cc 0
    [log] > parsed audio,PTS:[120.486,123.430],DTS:[120.486/123.430],nb:138,dropped:0
    [log] > parsed video,PTS:[120.491,123.454],DTS:[120.491/123.454],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [103.488666,123.429999]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 2472 ms
    [log] > level 1 loaded [75,120],duration:118.199
    [log] > live playlist sliding:8.065
    [log] > Updating mediasource duration to 126.264
    [log] > Loading 120 of [75 ,120],level 1, currentTime:112.24115,bufferEnd:123.430
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  120 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 120 of [75 ,120],level 1, cc 0
    [log] > AVC:3 ms hole between fragments detected,filling it
    [log] > parsed audio,PTS:[123.430,126.246],DTS:[123.430/126.246],nb:132,dropped:0
    [log] > Video/PTS/DTS adjusted: 123457/123454,delta:3 ms
    [log] > parsed video,PTS:[123.457,126.274],DTS:[123.454/126.274],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [103.488666,126.245999]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 2489 ms
    [log] > level 1 loaded [76,121],duration:119
    [log] > live playlist sliding:10.080
    [log] > Updating mediasource duration to 129.07999999999998
    [log] > Loading 121 of [76 ,121],level 1, currentTime:114.815795,bufferEnd:126.246
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  121 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 121 of [76 ,121],level 1, cc 0
    [log] > AVC:17 ms hole between fragments detected,filling it
    [log] > parsed audio,PTS:[126.246,129.062],DTS:[126.246/129.062],nb:132,dropped:0
    [log] > Video/PTS/DTS adjusted: 126290/126274,delta:17 ms
    [log] > parsed video,PTS:[126.290,129.108],DTS:[126.274/129.108],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [103.488666,129.061999]
    [log] > engine state transition from PARSED to IDLE
    [log] > same live playlist, reload twice faster
    [log] > live playlist, reload in 1207 ms
    [log] > level 1 loaded [76,121],duration:119
    [log] > live playlist sliding:10.080
    [log] > live playlist, reload in 2535 ms
    [log] > level 1 loaded [78,122],duration:117.93199999999999
    [log] > live playlist sliding:14.114
    [log] > Updating mediasource duration to 132.046
    [log] > Loading 122 of [78 ,122],level 1, currentTime:118.687704,bufferEnd:129.062
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  122 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 122 of [78 ,122],level 1, cc 0
    [log] > Video/PTS/DTS adjusted: 129108/129108,delta:-1 ms
    [log] > parsed audio,PTS:[129.062,132.070],DTS:[129.062/132.070],nb:141,dropped:0
    [log] > parsed video,PTS:[129.108,132.075],DTS:[129.108/132.075],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [103.488666,132.069999]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 2547 ms
    [log] > level 1 loaded [79,123],duration:118.86999999999999
    [log] > live playlist sliding:16.113
    [log] > Updating mediasource duration to 134.98299999999998
    [log] > Loading 123 of [79 ,123],level 1, currentTime:121.319874,bufferEnd:132.070
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  123 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 123 of [79 ,123],level 1, cc 0
    [log] > AVC:2 ms overlapping between fragments detected
    [log] > parsed audio,PTS:[132.070,135.014],DTS:[132.070/135.014],nb:138,dropped:0
    [log] > Video/PTS/DTS adjusted: 132075/132075,delta:-2 ms
    [log] > parsed video,PTS:[132.075,135.008],DTS:[132.075/135.008],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [103.488666,135.007688]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 2587 ms
    [log] > level 1 loaded [81,124],duration:117.85399999999998
    [log] > live playlist sliding:20.145
    [log] > Updating mediasource duration to 137.99899999999997
    [log] > Loading 124 of [81 ,124],level 1, currentTime:123.962988,bufferEnd:135.008
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  124 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 124 of [81 ,124],level 1, cc 0
    [log] > AVC:2 ms hole between fragments detected,filling it
    [log] > Video/PTS/DTS adjusted: 135010/135008,delta:2 ms
    [log] > parsed audio,PTS:[135.014,138.022],DTS:[135.014/138.022],nb:141,dropped:0
    [log] > parsed video,PTS:[135.010,138.010],DTS:[135.008/138.010],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [103.488666,138.009599]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 2617 ms
    [log] > level 1 loaded [82,125],duration:118.75199999999998
    [log] > live playlist sliding:22.161
    [log] > Updating mediasource duration to 140.91299999999998
    [log] > Loading 125 of [82 ,125],level 1, currentTime:126.633964,bufferEnd:138.010
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  125 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 125 of [82 ,125],level 1, cc 0
    [log] > AVC:16 ms hole between fragments detected,filling it
    [log] > parsed audio,PTS:[138.022,140.902],DTS:[138.022/140.902],nb:135,dropped:0
    [log] > Video/PTS/DTS adjusted: 138025/138010,delta:16 ms
    [log] > parsed video,PTS:[138.025,140.943],DTS:[138.010/140.943],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [103.488666,140.901999]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 2653 ms
    [log] > level 1 loaded [84,126],duration:117.722
    [log] > live playlist sliding:26.192
    [log] > Updating mediasource duration to 143.914
    [log] > Loading 126 of [84 ,126],level 1, currentTime:129.337448,bufferEnd:140.902
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  126 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 126 of [84 ,126],level 1, cc 0
    [log] > AVC:3 ms overlapping between fragments detected
    [log] > parsed audio,PTS:[140.902,143.910],DTS:[140.902/143.910],nb:141,dropped:0
    [log] > Video/PTS/DTS adjusted: 140943/140943,delta:-3 ms
    [log] > parsed video,PTS:[140.943,143.944],DTS:[140.943/143.944],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [103.488666,143.909999]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 2671 ms
    [log] > level 1 loaded [85,127],duration:118.67199999999997
    [log] > live playlist sliding:28.209
    [log] > Updating mediasource duration to 146.88099999999997
    [log] > Loading 127 of [85 ,127],level 1, currentTime:132.084207,bufferEnd:143.910
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  127 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 127 of [85 ,127],level 1, cc 0
    [log] > AVC:3 ms overlapping between fragments detected
    [log] > parsed audio,PTS:[143.910,146.918],DTS:[143.910/146.918],nb:141,dropped:0
    [log] > Video/PTS/DTS adjusted: 143944/143944,delta:-3 ms
    [log] > parsed video,PTS:[143.944,146.910],DTS:[143.944/146.910],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [103.488666,146.909643]
    [log] > engine state transition from PARSED to IDLE
    [log] > same live playlist, reload twice faster
    [log] > live playlist, reload in 1268 ms
    [log] > level 1 loaded [85,127],duration:118.67199999999997
    [log] > live playlist sliding:28.209
    [log] > same live playlist, reload twice faster
    [log] > live playlist, reload in 1287 ms
    [log] > level 1 loaded [85,127],duration:118.67199999999997
    [log] > live playlist sliding:28.209
    [log] > same live playlist, reload twice faster
    [log] > live playlist, reload in 1294 ms
    [log] > level 1 loaded [85,127],duration:118.67199999999997
    [log] > live playlist sliding:28.209
    [log] > same live playlist, reload twice faster
    [log] > live playlist, reload in 1295 ms
    [log] > level 1 loaded [85,127],duration:118.67199999999997
    [log] > live playlist sliding:28.209
    [log] > same live playlist, reload twice faster
    [log] > live playlist, reload in 1296 ms
    [log] > level 1 loaded [85,127],duration:118.67199999999997
    [log] > live playlist sliding:28.209
    [log] > same live playlist, reload twice faster
    [log] > live playlist, reload in 1285 ms
    [log] > level 1 loaded [85,127],duration:118.67199999999997
    [log] > live playlist sliding:28.209
    [log] > same live playlist, reload twice faster
    [log] > live playlist, reload in 1292 ms
    [log] > level 1 loaded [85,127],duration:118.67199999999997
    [log] > live playlist sliding:28.209
    [log] > same live playlist, reload twice faster
    [log] > live playlist, reload in 1288 ms
    [log] > level 1 loaded [85,127],duration:118.67199999999997
    [log] > live playlist sliding:28.209
    [log] > same live playlist, reload twice faster
    [log] > live playlist, reload in 1297 ms
    [log] > level 1 loaded [85,127],duration:118.67199999999997
    [log] > live playlist sliding:28.209
    [log] > switching to level 0
    [log] > (re)loading playlist for level 0
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > live playlist, reload in 2670 ms
    [log] > level 0 loaded [85,127],duration:118.67199999999997
    [log] > live playlist - first load, unknown sliding
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > live playlist, switching playlist, unknown, load middle frag : 107
    [log] > Loading 107 of [85 ,127],level 0, currentTime:146.75399,bufferEnd:146.910
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  107 of level 0
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 107 of [85 ,127],level 0, cc 0
    [log] > level switch detected
    [log] > manifest codec:mp4a.40.2,ADTS data:type:2,sampleingIndex:3[48000Hz],channelConfig:1
    [log] > parsed codec:mp4a.40.5,rate:48000,nb channel:1
    [log] > audio mp4 timescale :48000
    [log] > main track:audio,container:audio/mp4,codecs[level/parsed]=[mp4a.40.2/mp4a.40.5]
    [log] > main track:video,container:video/mp4,codecs[level/parsed]=[avc1.4d001e/avc1.4d401e]
    [log] > parsed audio,PTS:[86.249,89.001],DTS:[86.249/89.001],nb:129,dropped:0
    [log] > playback seems stuck @146.914043
    [log] > parsed video,PTS:[86.272,89.021],DTS:[86.272/89.021],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [86.271644,89.001333][103.488666,146.909643]
    [log] > engine state transition from PARSED to IDLE
    [log] > switching to level 1
    [log] > (re)loading playlist for level 1
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > live playlist, reload in 2733 ms
    [log] > level 1 loaded [88,128],duration:115.52399999999999
    [log] > live playlist sliding:34.241
    [log] > Updating mediasource duration to 149.765
    [log] > Loading 128 of [88 ,128],level 1, currentTime:146.914043,bufferEnd:146.914
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  128 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 128 of [88 ,128],level 1, cc 0
    [log] > level switch detected
    [log] > manifest codec:mp4a.40.2,ADTS data:type:2,sampleingIndex:3[48000Hz],channelConfig:1
    [log] > parsed codec:mp4a.40.5,rate:48000,nb channel:1
    [log] > audio mp4 timescale :48000
    [log] > main track:audio,container:audio/mp4,codecs[level/parsed]=[mp4a.40.2/mp4a.40.5]
    [log] > main track:video,container:video/mp4,codecs[level/parsed]=[avc1.4d001f/avc1.4d401f]
    [log] > parsed audio,PTS:[146.918,149.798],DTS:[146.918/149.798],nb:135,dropped:0
    [log] > parsed video,PTS:[146.908,149.790],DTS:[146.908/149.790],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [86.271644,89.001333][103.488666,149.789599]
    [log] > engine state transition from PARSED to IDLE
    [log] > playback not stuck anymore @146.917192
    [log] > live playlist, reload in 2755 ms
    [log] > level 1 loaded [89,129],duration:116.37299999999998
    [log] > live playlist sliding:36.257
    [log] > Updating mediasource duration to 152.62999999999997
    [log] > Loading 129 of [89 ,129],level 1, currentTime:149.426433,bufferEnd:149.790
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  129 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 129 of [89 ,129],level 1, cc 0
    [log] > AVC:2 ms hole between fragments detected,filling it
    [log] > parsed audio,PTS:[149.798,152.678],DTS:[149.798/152.678],nb:135,dropped:0
    [log] > Video/PTS/DTS adjusted: 149792/149790,delta:2 ms
    [log] > parsed video,PTS:[149.792,152.656],DTS:[149.790/152.656],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [86.271644,89.001333][103.488666,152.655643]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 2758 ms
    [log] > level 1 loaded [90,130],duration:116.69199999999996
    [log] > live playlist sliding:38.337
    [log] > Updating mediasource duration to 155.02899999999994
    [log] > Loading 130 of [90 ,130],level 1, currentTime:152.27078,bufferEnd:152.656
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  130 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 130 of [90 ,130],level 1, cc 0
    [warn] > Injecting 75 audio frame @ 152.678s due to 1605 ms gap.
    [log] > AVC:20 ms hole between fragments detected,filling it
    [log] > parsed audio,PTS:[152.678,156.710],DTS:[152.678/156.710],nb:189,dropped:0
    [log] > Video/PTS/DTS adjusted: 152675/152656,delta:20 ms
    [log] > parsed video,PTS:[152.675,155.091],DTS:[152.656/155.091],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [86.271644,89.001333][103.488666,155.090666]
    [log] > engine state transition from PARSED to IDLE
    [log] > switching to level 0
    [log] > (re)loading playlist for level 0
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > live playlist, reload in 2746 ms
    [log] > level 0 loaded [91,131],duration:117.01199999999997
    [log] > live playlist sliding:40.437
    [log] > Updating mediasource duration to 157.4493333333333
    [log] > Loading 131 of [91 ,131],level 0, currentTime:154.910224,bufferEnd:155.091
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  131 of level 0
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 131 of [91 ,131],level 0, cc 0
    [log] > level switch detected
    [log] > manifest codec:mp4a.40.2,ADTS data:type:2,sampleingIndex:3[48000Hz],channelConfig:1
    [log] > parsed codec:mp4a.40.5,rate:48000,nb channel:1
    [log] > audio mp4 timescale :48000
    [warn] > Injecting 78 audio frame @ 155.055s due to 1660 ms gap.
    [log] > main track:audio,container:audio/mp4,codecs[level/parsed]=[mp4a.40.2/mp4a.40.5]
    [log] > main track:video,container:video/mp4,codecs[level/parsed]=[avc1.4d001e/avc1.4d401e]
    [log] > parsed audio,PTS:[155.055,159.087],DTS:[155.055/159.087],nb:189,dropped:0
    [log] > parsed video,PTS:[155.075,157.475],DTS:[155.075/157.475],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [86.271644,89.001333][103.488666,157.474666]
    [log] > engine state transition from PARSED to IDLE
    [log] > switching to level 1
    [log] > (re)loading playlist for level 1
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > live playlist, reload in 2753 ms
    [log] > level 1 loaded [91,131],duration:117.01199999999997
    [log] > live playlist sliding:40.433
    [log] > Loading 131 of [91 ,131],level 1, currentTime:155.230307,bufferEnd:157.475
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  131 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 131 of [91 ,131],level 1, cc 0
    [log] > level switch detected
    [log] > manifest codec:mp4a.40.2,ADTS data:type:2,sampleingIndex:3[48000Hz],channelConfig:1
    [log] > parsed codec:mp4a.40.5,rate:48000,nb channel:1
    [log] > audio mp4 timescale :48000
    [log] > main track:audio,container:audio/mp4,codecs[level/parsed]=[mp4a.40.2/mp4a.40.5]
    [log] > main track:video,container:video/mp4,codecs[level/parsed]=[avc1.4d001f/avc1.4d401f]
    [log] > parsed audio,PTS:[156.710,159.078],DTS:[156.710/159.078],nb:111,dropped:0
    [log] > parsed video,PTS:[155.075,157.475],DTS:[155.075/157.475],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [86.271644,89.001333][103.488666,157.474666]
    [log] > engine state transition from PARSED to IDLE
    [log] > switching to level 0
    [log] > (re)loading playlist for level 0
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > live playlist, reload in 2762 ms
    [log] > level 0 loaded [92,132],duration:117.23499999999999
    [log] > live playlist sliding:42.614
    [log] > Updating mediasource duration to 159.8493333333333
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > Loading 131 of [92 ,132],level 0, currentTime:157.30414,bufferEnd:157.475
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  131 of level 0
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 131 of [92 ,132],level 0, cc 0
    [log] > level switch detected
    [log] > manifest codec:mp4a.40.2,ADTS data:type:2,sampleingIndex:3[48000Hz],channelConfig:1
    [log] > parsed codec:mp4a.40.5,rate:48000,nb channel:1
    [log] > audio mp4 timescale :48000
    [log] > main track:audio,container:audio/mp4,codecs[level/parsed]=[mp4a.40.2/mp4a.40.5]
    [log] > main track:video,container:video/mp4,codecs[level/parsed]=[avc1.4d001e/avc1.4d401e]
    [log] > parsed audio,PTS:[NaN,NaN],DTS:[NaN/NaN],nb:111,dropped:0
    [log] > parsed video,PTS:[155.075,157.475],DTS:[155.075/157.475],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [86.271644,89.001333][103.488666,157.474666]
    [log] > engine state transition from PARSED to IDLE
    [log] > switching to level 1
    [log] > (re)loading playlist for level 1
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > live playlist, reload in 2760 ms
    [log] > level 1 loaded [92,132],duration:117.23499999999999
    [log] > live playlist sliding:42.610
    [log] > Loading 131 of [92 ,132],level 1, currentTime:157.511953,bufferEnd:157.512
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  131 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 131 of [92 ,132],level 1, cc 0
    [log] > level switch detected
    [log] > manifest codec:mp4a.40.2,ADTS data:type:2,sampleingIndex:3[48000Hz],channelConfig:1
    [log] > parsed codec:mp4a.40.5,rate:48000,nb channel:1
    [log] > audio mp4 timescale :48000
    [log] > main track:audio,container:audio/mp4,codecs[level/parsed]=[mp4a.40.2/mp4a.40.5]
    [log] > main track:video,container:video/mp4,codecs[level/parsed]=[avc1.4d001f/avc1.4d401f]
    [log] > parsed audio,PTS:[NaN,NaN],DTS:[NaN/NaN],nb:111,dropped:0
    [log] > parsed video,PTS:[155.075,157.475],DTS:[155.075/157.475],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [86.271644,89.001333][103.488666,157.474666]
    [log] > engine state transition from PARSED to IDLE
    [log] > Loading 132 of [92 ,132],level 1, currentTime:157.636032,bufferEnd:157.636
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  132 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 132 of [92 ,132],level 1, cc 0
    [log] > AVC:16 ms hole between fragments detected,filling it
    [log] > Video/PTS/DTS adjusted: 157490/157475,delta:16 ms
    [log] > parsed audio,PTS:[NaN,NaN],DTS:[NaN/NaN],nb:114,dropped:0
    [log] > parsed video,PTS:[157.490,159.907],DTS:[157.475/159.907],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [86.271644,89.001333][103.488666,159.077999]
    [log] > engine state transition from PARSED to IDLE
    [log] > switching to level 0
    [log] > (re)loading playlist for level 0
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > live playlist, reload in 2749 ms
    [log] > level 0 loaded [93,133],duration:116.33299999999998
    [log] > live playlist sliding:45.964
    [log] > Updating mediasource duration to 162.2973333333333
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > Loading 132 of [93 ,133],level 0, currentTime:158.893346,bufferEnd:159.078
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  132 of level 0
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 132 of [93 ,133],level 0, cc 0
    [log] > level switch detected
    [log] > manifest codec:mp4a.40.2,ADTS data:type:2,sampleingIndex:3[48000Hz],channelConfig:1
    [log] > parsed codec:mp4a.40.5,rate:48000,nb channel:1
    [log] > audio mp4 timescale :48000
    [warn] > Injecting 75 audio frame @ 157.475s due to 1608 ms gap.
    [log] > main track:audio,container:audio/mp4,codecs[level/parsed]=[mp4a.40.2/mp4a.40.5]
    [log] > main track:video,container:video/mp4,codecs[level/parsed]=[avc1.4d001e/avc1.4d401e]
    [log] > playback seems stuck @159.075313
    [log] > parsed audio,PTS:[157.475,161.507],DTS:[157.475/161.507],nb:189,dropped:0
    [log] > parsed video,PTS:[157.491,159.907],DTS:[157.491/159.907],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [86.271644,89.001333][103.488666,159.906666]
    [log] > engine state transition from PARSED to IDLE
    [log] > switching to level 1
    [log] > (re)loading playlist for level 1
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > live playlist, reload in 2740 ms
    [log] > level 1 loaded [93,133],duration:116.33299999999998
    [log] > live playlist sliding:45.960
    [log] > Loading 133 of [93 ,133],level 1, currentTime:159.075313,bufferEnd:159.907
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  133 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 133 of [93 ,133],level 1, cc 0
    [log] > level switch detected
    [log] > manifest codec:mp4a.40.2,ADTS data:type:2,sampleingIndex:3[48000Hz],channelConfig:1
    [log] > parsed codec:mp4a.40.5,rate:48000,nb channel:1
    [log] > audio mp4 timescale :48000
    [warn] > Injecting 75 audio frame @ 159.907s due to 1608 ms gap.
    [log] > main track:audio,container:audio/mp4,codecs[level/parsed]=[mp4a.40.2/mp4a.40.5]
    [log] > main track:video,container:video/mp4,codecs[level/parsed]=[avc1.4d001f/avc1.4d401f]
    [log] > parsed audio,PTS:[159.907,163.939],DTS:[159.907/163.939],nb:189,dropped:0
    [log] > parsed video,PTS:[159.891,162.323],DTS:[159.891/162.323],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [86.271644,89.001333][103.488666,162.322666]
    [log] > engine state transition from PARSED to IDLE
    [log] > playback not stuck anymore @159.078452
    [log] > live playlist, reload in 2739 ms
    [log] > level 1 loaded [93,134],duration:118.73299999999999
    [log] > live playlist sliding:45.960
    [log] > Updating mediasource duration to 164.69299999999998
    [log] > SN just loaded, load next one: 134
    [log] > Loading 134 of [93 ,134],level 1, currentTime:161.56077,bufferEnd:162.323
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  134 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 134 of [93 ,134],level 1, cc 0
    [log] > AVC:16 ms hole between fragments detected,filling it
    [log] > parsed audio,PTS:[163.939,166.307],DTS:[163.939/166.307],nb:111,dropped:0
    [log] > Video/PTS/DTS adjusted: 162338/162323,delta:16 ms
    [log] > parsed video,PTS:[162.338,164.755],DTS:[162.323/164.755],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [86.271644,89.001333][103.488666,164.754666]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 2719 ms
    [log] > level 1 loaded [94,135],duration:117.732
    [log] > live playlist sliding:49.377
    [log] > Updating mediasource duration to 167.10899999999998
    [log] > SN just loaded, load next one: 135
    [log] > Loading 135 of [94 ,135],level 1, currentTime:164.387629,bufferEnd:164.755
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  135 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 135 of [94 ,135],level 1, cc 0
    [log] > AVC:16 ms overlapping between fragments detected
    [log] > parsed audio,PTS:[166.307,168.739],DTS:[166.307/168.739],nb:114,dropped:0
    [log] > Video/PTS/DTS adjusted: 164755/164755,delta:-16 ms
    [log] > parsed video,PTS:[164.755,167.139],DTS:[164.755/167.139],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [86.271644,89.001333][103.488666,167.138666]
    [log] > engine state transition from PARSED to IDLE
    [log] > switching to level 0
    [log] > (re)loading playlist for level 0
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > live playlist, reload in 2705 ms
    [log] > level 0 loaded [95,136],duration:117.614
    [log] > live playlist sliding:51.899
    [log] > Updating mediasource duration to 169.51333333333332
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > Loading 135 of [95 ,136],level 0, currentTime:167.00637,bufferEnd:167.139
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  135 of level 0
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 135 of [95 ,136],level 0, cc 0
    [log] > level switch detected
    [log] > manifest codec:mp4a.40.2,ADTS data:type:2,sampleingIndex:3[48000Hz],channelConfig:1
    [log] > parsed codec:mp4a.40.5,rate:48000,nb channel:1
    [log] > audio mp4 timescale :48000
    [warn] > Dropping 1 audio frame @ 166.355s due to 27 ms overlap.
    [log] > main track:audio,container:audio/mp4,codecs[level/parsed]=[mp4a.40.2/mp4a.40.5]
    [log] > main track:video,container:video/mp4,codecs[level/parsed]=[avc1.4d001e/avc1.4d401e]
    [log] > parsed audio,PTS:[166.355,168.765],DTS:[166.355/168.765],nb:113,dropped:0
    [log] > parsed video,PTS:[164.739,167.139],DTS:[164.739/167.139],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [86.271644,89.001333][103.488666,167.138666]
    [log] > engine state transition from PARSED to IDLE
    [log] > switching to level 1
    [log] > (re)loading playlist for level 1
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > live playlist, reload in 2688 ms
    [log] > level 1 loaded [95,136],duration:117.614
    [log] > live playlist sliding:51.895
    [log] > Loading 135 of [95 ,136],level 1, currentTime:167.350496,bufferEnd:167.350
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  135 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 135 of [95 ,136],level 1, cc 0
    [log] > level switch detected
    [log] > manifest codec:mp4a.40.2,ADTS data:type:2,sampleingIndex:3[48000Hz],channelConfig:1
    [log] > parsed codec:mp4a.40.5,rate:48000,nb channel:1
    [log] > audio mp4 timescale :48000
    [log] > main track:audio,container:audio/mp4,codecs[level/parsed]=[mp4a.40.2/mp4a.40.5]
    [log] > main track:video,container:video/mp4,codecs[level/parsed]=[avc1.4d001f/avc1.4d401f]
    [log] > parsed audio,PTS:[NaN,NaN],DTS:[NaN/NaN],nb:114,dropped:0
    [log] > parsed video,PTS:[164.739,167.139],DTS:[164.739/167.139],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [86.271644,89.001333][103.488666,167.138666]
    [log] > engine state transition from PARSED to IDLE
    [log] > Loading 136 of [95 ,136],level 1, currentTime:167.436447,bufferEnd:167.436
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  136 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 136 of [95 ,136],level 1, cc 0
    [log] > AVC:16 ms hole between fragments detected,filling it
    [log] > parsed audio,PTS:[NaN,NaN],DTS:[NaN/NaN],nb:111,dropped:0
    [log] > Video/PTS/DTS adjusted: 167154/167139,delta:16 ms
    [log] > parsed video,PTS:[167.154,169.571],DTS:[167.139/169.571],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [86.271644,89.001333][103.488666,168.765333]
    [log] > engine state transition from PARSED to IDLE
    [log] > switching to level 0
    [log] > (re)loading playlist for level 0
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > live playlist, reload in 2707 ms
    [log] > level 0 loaded [96,137],duration:117.16499999999999
    [log] > live playlist sliding:54.764
    [log] > Updating mediasource duration to 171.92933333333332
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > Loading 136 of [96 ,137],level 0, currentTime:168.590975,bufferEnd:168.765
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  136 of level 0
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 136 of [96 ,137],level 0, cc 0
    [log] > level switch detected
    [log] > manifest codec:mp4a.40.2,ADTS data:type:2,sampleingIndex:3[48000Hz],channelConfig:1
    [log] > parsed codec:mp4a.40.5,rate:48000,nb channel:1
    [log] > audio mp4 timescale :48000
    [log] > main track:audio,container:audio/mp4,codecs[level/parsed]=[mp4a.40.2/mp4a.40.5]
    [log] > main track:video,container:video/mp4,codecs[level/parsed]=[avc1.4d001e/avc1.4d401e]
    [log] > playback seems stuck @168.773726
    [log] > parsed audio,PTS:[168.765,171.133],DTS:[168.765/171.133],nb:111,dropped:0
    [log] > parsed video,PTS:[167.155,169.571],DTS:[167.155/169.571],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [86.271644,89.001333][103.488666,169.570666]
    [log] > engine state transition from PARSED to IDLE
    [log] > switching to level 1
    [log] > (re)loading playlist for level 1
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > live playlist, reload in 2699 ms
    [log] > level 1 loaded [96,137],duration:117.16499999999999
    [log] > live playlist sliding:54.760
    [log] > Loading 137 of [96 ,137],level 1, currentTime:168.773726,bufferEnd:169.571
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  137 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 137 of [96 ,137],level 1, cc 0
    [log] > level switch detected
    [log] > manifest codec:mp4a.40.2,ADTS data:type:2,sampleingIndex:3[48000Hz],channelConfig:1
    [log] > parsed codec:mp4a.40.5,rate:48000,nb channel:1
    [log] > audio mp4 timescale :48000
    [warn] > Injecting 72 audio frame @ 169.571s due to 1546 ms gap.
    [log] > main track:audio,container:audio/mp4,codecs[level/parsed]=[mp4a.40.2/mp4a.40.5]
    [warn] > Injecting 1 audio frame @ 173.517s due to 22 ms gap.
    [log] > main track:video,container:video/mp4,codecs[level/parsed]=[avc1.4d001f/avc1.4d401f]
    [log] > parsed audio,PTS:[169.571,173.560],DTS:[169.571/173.560],nb:187,dropped:0
    [log] > parsed video,PTS:[169.555,171.955],DTS:[169.555/171.955],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [86.271644,89.001333][103.488666,171.954666]
    [log] > engine state transition from PARSED to IDLE
    [log] > playback not stuck anymore @168.795311
    [log] > live playlist, reload in 2684 ms
    [log] > level 1 loaded [97,138],duration:116.56400000000001
    [log] > live playlist sliding:57.761
    [log] > Updating mediasource duration to 174.325
    [log] > SN just loaded, load next one: 138
    [log] > Loading 138 of [97 ,138],level 1, currentTime:171.323321,bufferEnd:171.955
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  138 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 138 of [97 ,138],level 1, cc 0
    [log] > AVC:16 ms hole between fragments detected,filling it
    [log] > parsed audio,PTS:[173.560,175.992],DTS:[173.560/175.992],nb:114,dropped:0
    [log] > Video/PTS/DTS adjusted: 171970/171955,delta:16 ms
    [log] > parsed video,PTS:[171.970,174.355],DTS:[171.955/174.355],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [86.271644,89.001333][103.488666,174.354666]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 2678 ms
    [log] > level 1 loaded [97,139],duration:118.804
    [log] > live playlist sliding:57.761
    [log] > Updating mediasource duration to 176.565
    [log] > switching to level 0
    [log] > (re)loading playlist for level 0
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > live playlist, reload in 2674 ms
    [log] > level 0 loaded [97,139],duration:118.804
    [log] > live playlist sliding:57.765
    [log] > Updating mediasource duration to 176.56933333333333
    [log] > Loading 138 of [97 ,139],level 0, currentTime:174.191961,bufferEnd:174.355
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  138 of level 0
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 138 of [97 ,139],level 0, cc 0
    [log] > level switch detected
    [log] > manifest codec:mp4a.40.2,ADTS data:type:2,sampleingIndex:3[48000Hz],channelConfig:1
    [log] > parsed codec:mp4a.40.5,rate:48000,nb channel:1
    [log] > audio mp4 timescale :48000
    [log] > main track:audio,container:audio/mp4,codecs[level/parsed]=[mp4a.40.2/mp4a.40.5]
    [log] > main track:video,container:video/mp4,codecs[level/parsed]=[avc1.4d001e/avc1.4d401e]
    [log] > parsed audio,PTS:[173.549,175.981],DTS:[173.549/175.981],nb:114,dropped:0
    [log] > parsed video,PTS:[171.971,174.355],DTS:[171.971/174.355],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [86.271644,89.001333][103.488666,174.354666]
    [log] > engine state transition from PARSED to IDLE
    [log] > switching to level 1
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > playback seems stuck @176.010234
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > engine state transition from IDLE to WAITING_LEVEL
    [log] > engine state transition from WAITING_LEVEL to IDLE
    [log] > set currentLevel:0
    [log] > set loadLevel:0
    [log] > switching to level 0
    [log] > (re)loading playlist for level 0
    [log] > immediateLevelSwitch
    [log] > engine state transition from IDLE to PAUSED
    [log] > flushBuffer,pos/start/end: 176.010234/0/Infinity
    [log] > flush audio [86.249333,89.001333], of [86.249333,89.001333], pos:176.010234
    [log] > flushBuffer,pos/start/end: 176.010234/0/Infinity
    [log] > flush audio [103.462,175.981333], of [103.462,175.981333], pos:176.010234
    [log] > flushBuffer,pos/start/end: 176.010234/0/Infinity
    [log] > flush video [86.271644,89.020666], of [86.271644,89.020666], pos:176.010234
    [log] > flushBuffer,pos/start/end: 176.010234/0/Infinity
    [log] > flush video [103.488666,174.354666], of [103.488666,174.354666], pos:176.010234
    [log] > flushBuffer,pos/start/end: 176.010234/0/Infinity
    [log] > buffer flushed
    [log] > engine state transition from PAUSED to IDLE
    [log] > Loading 139 of [97 ,139],level 0, currentTime:176.010234,bufferEnd:176.010
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > live playlist, reload in 1973 ms
    [log] > level 0 loaded [147,203],duration:118.431
    [log] > live playlist - outdated PTS, unknown sliding
    [log] > Loaded  139 of level 0
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 139 of [147 ,203],level 0, cc 0
    [log] > 11 ms hole between AAC samples detected,filling it
    [log] > AVC:16 ms hole between fragments detected,filling it
    [log] > parsed audio,PTS:[175.981,178.289],DTS:[175.981/178.289],nb:109,dropped:0
    [log] > Video/PTS/DTS adjusted: 174370/174355,delta:16 ms
    [log] > parsed video,PTS:[174.370,176.611],DTS:[174.355/176.611],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [175.981333,176.610666]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, switching playlist, unknown, load middle frag : 176
    [log] > Loading 176 of [147 ,203],level 0, currentTime:176.010234,bufferEnd:176.611
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  176 of level 0
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 176 of [147 ,203],level 0, cc 0
    [log] > parsed audio,PTS:[253.493,255.594],DTS:[253.493/255.594],nb:99,dropped:0
    [log] > parsed video,PTS:[251.858,253.922],DTS:[251.858/253.922],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [175.981333,176.610666][253.493,253.921644]
    [log] > engine state transition from PARSED to IDLE
    [log] > buffer end: 176.610666 is located too far from the end of live sliding playlist, reset currentTime to : 302.634
    [log] > buffer end: 176.610666 is located too far from the end of live sliding playlist, reset currentTime to : 302.634
    [log] > same live playlist, reload twice faster
    [log] > live playlist, reload in 1000 ms
    [log] > level 0 loaded [147,203],duration:118.431
    [log] > live playlist sliding:193.203
    [log] > Updating mediasource duration to 311.63366666666684
    [log] > buffer end: 176.610666 is located too far from the end of live sliding playlist, reset currentTime to : 302.634
    [log] > playback not stuck anymore @302.633666
    [log] > media seeking to 302.633666
    [log] > Loading 199 of [147 ,203],level 0, currentTime:302.633666,bufferEnd:302.634
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > playback seems stuck @302.633666
    [log] > Loaded  199 of level 0
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 199 of [147 ,203],level 0, cc 0
    [log] > parsed audio,PTS:[301.818,303.802],DTS:[301.818/303.802],nb:93,dropped:0
    [log] > parsed video,PTS:[300.162,302.163],DTS:[300.162/302.163],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [175.981333,176.610666][253.493,253.921644][301.818,302.162622]
    [log] > engine state transition from PARSED to IDLE
    [log] > SN just loaded, load next one: 200
    [log] > Loading 200 of [147 ,203],level 0, currentTime:302.633666,bufferEnd:302.634
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  200 of level 0
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 200 of [147 ,203],level 0, cc 0
    [log] > parsed audio,PTS:[303.802,305.978],DTS:[303.802/305.978],nb:102,dropped:0
    [log] > parsed video,PTS:[302.163,304.383],DTS:[302.163/304.383],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [175.981333,176.610666][253.493,253.921644][301.818,304.382666]
    [log] > engine state transition from PARSED to IDLE
    [log] > SN just loaded, load next one: 201
    [log] > Loading 201 of [147 ,203],level 0, currentTime:302.633666,bufferEnd:304.383
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > media seeked to 302.634332
    [log] > playback not stuck anymore @302.635404
    [log] > Loaded  201 of level 0
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 201 of [147 ,203],level 0, cc 0
    [log] > AVC:13 ms overlapping between fragments detected
    [log] > parsed audio,PTS:[305.978,308.410],DTS:[305.978/308.410],nb:114,dropped:0
    [log] > Video/PTS/DTS adjusted: 304383/304383,delta:-13 ms
    [log] > parsed video,PTS:[304.383,306.770],DTS:[304.383/306.770],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [175.981333,176.610666][253.493,253.921644][301.818,306.769688]
    [log] > engine state transition from PARSED to IDLE
    [log] > SN just loaded, load next one: 202
    [log] > Loading 202 of [147 ,203],level 0, currentTime:302.7312,bufferEnd:306.770
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  202 of level 0
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 202 of [147 ,203],level 0, cc 0
    [log] > AVC:16 ms hole between fragments detected,filling it
    [log] > parsed audio,PTS:[308.410,310.778],DTS:[308.410/310.778],nb:111,dropped:0
    [log] > Video/PTS/DTS adjusted: 306785/306770,delta:16 ms
    [log] > parsed video,PTS:[306.785,309.218],DTS:[306.770/309.218],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [175.981333,176.610666][253.493,253.921644][301.818,309.217644]
    [log] > engine state transition from PARSED to IDLE
    [log] > SN just loaded, load next one: 203
    [log] > Loading 203 of [147 ,203],level 0, currentTime:302.878836,bufferEnd:309.218
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  203 of level 0
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 203 of [147 ,203],level 0, cc 0
    [log] > AVC:16 ms hole between fragments detected,filling it
    [log] > parsed audio,PTS:[310.778,313.210],DTS:[310.778/313.210],nb:114,dropped:0
    [log] > Video/PTS/DTS adjusted: 309233/309218,delta:16 ms
    [log] > parsed video,PTS:[309.233,311.650],DTS:[309.218/311.650],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [175.981333,176.610666][253.493,253.921644][301.818,311.649644]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 1963 ms
    [log] > level 0 loaded [148,204],duration:118.831
    [log] > live playlist sliding:195.219
    [log] > Updating mediasource duration to 314.04966666666684
    [log] > SN just loaded, load next one: 204
    [log] > Loading 204 of [148 ,204],level 0, currentTime:303.194267,bufferEnd:311.650
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  204 of level 0
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 204 of [148 ,204],level 0, cc 0
    [log] > AVC:16 ms overlapping between fragments detected
    [log] > parsed audio,PTS:[313.210,315.578],DTS:[313.210/315.578],nb:111,dropped:0
    [log] > Video/PTS/DTS adjusted: 311650/311650,delta:-16 ms
    [log] > parsed video,PTS:[311.650,314.050],DTS:[311.650/314.050],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [175.981333,176.610666][253.493,253.921644][301.818,314.049644]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 1999 ms
    [log] > level 0 loaded [149,205],duration:119.21500000000002
    [log] > live playlist sliding:197.235
    [log] > Updating mediasource duration to 316.4496666666668
    [log] > SN just loaded, load next one: 205
    [log] > Loading 205 of [149 ,205],level 0, currentTime:305.254083,bufferEnd:314.050
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  205 of level 0
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 205 of [149 ,205],level 0, cc 0
    [log] > parsed audio,PTS:[315.578,318.010],DTS:[315.578/318.010],nb:114,dropped:0
    [log] > parsed video,PTS:[314.050,316.434],DTS:[314.050/316.434],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [175.981333,176.610666][253.493,253.921644][301.818,316.433644]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 2008 ms
    [log] > level 0 loaded [150,206],duration:119.60000000000002
    [log] > live playlist sliding:199.250
    [log] > Updating mediasource duration to 318.84966666666685
    [log] > SN just loaded, load next one: 206
    [log] > Loading 206 of [150 ,206],level 0, currentTime:307.343666,bufferEnd:316.434
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  206 of level 0
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 206 of [150 ,206],level 0, cc 0
    [log] > parsed audio,PTS:[318.010,320.506],DTS:[318.010/320.506],nb:117,dropped:0
    [log] > AVC:16 ms hole between fragments detected,filling it
    [log] > Video/PTS/DTS adjusted: 316449/316434,delta:16 ms
    [log] > parsed video,PTS:[316.449,318.866],DTS:[316.434/318.866],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [175.981333,176.610666][253.493,253.921644][301.818,318.865644]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 1868 ms
    [log] > level 0 loaded [152,207],duration:117.999
    [log] > live playlist sliding:203.267
    [log] > Updating mediasource duration to 321.2656666666668
    [log] > SN just loaded, load next one: 207
    [log] > Loading 207 of [152 ,207],level 0, currentTime:309.594664,bufferEnd:318.866
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  207 of level 0
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 207 of [152 ,207],level 0, cc 0
    [log] > AVC:16 ms overlapping between fragments detected
    [log] > parsed audio,PTS:[320.506,322.810],DTS:[320.506/322.810],nb:108,dropped:0
    [log] > Video/PTS/DTS adjusted: 318866/318866,delta:-16 ms
    [log] > parsed video,PTS:[318.866,321.250],DTS:[318.866/321.250],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [175.981333,176.610666][253.493,253.921644][301.818,321.249644]
    [log] > engine state transition from PARSED to IDLE
    [log] > same live playlist, reload twice faster
    [log] > live playlist, reload in 1000 ms
    [log] > level 0 loaded [152,207],duration:117.999
    [log] > live playlist sliding:203.267
    [log] > live playlist, reload in 2027 ms
    [log] > level 0 loaded [153,208],duration:118.38300000000001
    [log] > live playlist sliding:205.283
    [log] > Updating mediasource duration to 323.66566666666677
    [log] > SN just loaded, load next one: 208
    [log] > Loading 208 of [153 ,208],level 0, currentTime:312.658987,bufferEnd:321.250
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  208 of level 0
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 208 of [153 ,208],level 0, cc 0
    [log] > set currentLevel:1
    [log] > set loadLevel:1
    [log] > switching to level 1
    [log] > AVC:16 ms hole between fragments detected,filling it
    [log] > Video/PTS/DTS adjusted: 321265/321250,delta:16 ms
    [log] > (re)loading playlist for level 1
    [log] > immediateLevelSwitch
    [log] > engine state transition from PARSING to PAUSED
    [log] > flushBuffer,pos/start/end: 312.884019/0/Infinity
    [log] > flush audio [175.981333,178.309999], of [175.981333,178.309999], pos:312.884019
    [log] > flushBuffer,pos/start/end: 312.883919/0/Infinity
    [log] > flush audio [253.493,255.593999], of [253.493,255.593999], pos:312.883919
    [log] > media seeking to 312.883919
    [log] > flushBuffer,pos/start/end: 312.883919/0/Infinity
    [log] > flush audio [301.818,322.809999], of [301.818,322.809999], pos:312.883919
    [log] > flushBuffer,pos/start/end: 312.883919/0/Infinity
    [log] > flush video [174.354666,176.610666], of [174.354666,176.610666], pos:312.883919
    [log] > flushBuffer,pos/start/end: 312.883919/0/Infinity
    [log] > flush video [251.857644,253.921644], of [251.857644,253.921644], pos:312.883919
    [log] > flushBuffer,pos/start/end: 312.883919/0/Infinity
    [log] > flush video [300.161644,321.249644], of [300.161644,321.249644], pos:312.883919
    [log] > flushBuffer,pos/start/end: 312.883919/0/Infinity
    [log] > buffer flushed
    [log] > engine state transition from PAUSED to IDLE
    [log] > live playlist, reload in 2020 ms
    [log] > level 1 loaded [153,208],duration:118.38300000000001
    [log] > live playlist - outdated PTS, unknown sliding
    [log] > live playlist, switching playlist, unknown, load middle frag : 181
    [log] > Loading 181 of [153 ,208],level 1, currentTime:312.883919,bufferEnd:312.884
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  181 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 181 of [153 ,208],level 1, cc 0
    [log] > level switch detected
    [log] > manifest codec:mp4a.40.2,ADTS data:type:2,sampleingIndex:3[48000Hz],channelConfig:1
    [log] > parsed codec:mp4a.40.5,rate:48000,nb channel:1
    [log] > audio mp4 timescale :48000
    [log] > main track:audio,container:audio/mp4,codecs[level/parsed]=[mp4a.40.2/mp4a.40.5]
    [log] > main track:video,container:video/mp4,codecs[level/parsed]=[avc1.4d001f/avc1.4d401f]
    [log] > parsed audio,PTS:[263.659,265.707],DTS:[263.659/265.707],nb:96,dropped:0
    [log] > parsed video,PTS:[262.050,264.066],DTS:[262.050/264.066],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [263.658666,264.065644]
    [log] > engine state transition from PARSED to IDLE
    [log] > Loading 203 of [153 ,208],level 1, currentTime:312.883919,bufferEnd:312.884
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > playback seems stuck @312.883919
    [log] > Loaded  203 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 203 of [153 ,208],level 1, cc 0
    [warn] > Dropping 1 audio frame @ 310.875s due to 36 ms overlap.
    [log] > parsed audio,PTS:[310.875,313.221],DTS:[310.875/313.221],nb:110,dropped:0
    [log] > parsed video,PTS:[309.234,311.650],DTS:[309.234/311.650],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [263.658666,264.065644][310.874645,311.649644]
    [log] > engine state transition from PARSED to IDLE
    [log] > SN just loaded, load next one: 204
    [log] > Loading 204 of [153 ,208],level 1, currentTime:312.883919,bufferEnd:312.884
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  204 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 204 of [153 ,208],level 1, cc 0
    [log] > AVC:16 ms overlapping between fragments detected
    [log] > parsed audio,PTS:[313.221,315.717],DTS:[313.221/315.717],nb:117,dropped:0
    [log] > Video/PTS/DTS adjusted: 311650/311650,delta:-16 ms
    [log] > parsed video,PTS:[311.650,314.050],DTS:[311.650/314.050],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [263.658666,264.065644][310.874645,314.049644]
    [log] > engine state transition from PARSED to IDLE
    [log] > SN just loaded, load next one: 205
    [log] > Loading 205 of [153 ,208],level 1, currentTime:312.883919,bufferEnd:314.050
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  205 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 205 of [153 ,208],level 1, cc 0
    [log] > parsed audio,PTS:[315.717,318.021],DTS:[315.717/318.021],nb:108,dropped:0
    [log] > parsed video,PTS:[314.050,316.434],DTS:[314.050/316.434],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [263.658666,264.065644][310.874645,316.433644]
    [log] > engine state transition from PARSED to IDLE
    [log] > SN just loaded, load next one: 206
    [log] > Loading 206 of [153 ,208],level 1, currentTime:312.883919,bufferEnd:316.434
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > media seeked to 312.883919
    [log] > Loaded  206 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 206 of [153 ,208],level 1, cc 0
    [log] > playback not stuck anymore @312.908537
    [log] > parsed audio,PTS:[318.021,320.517],DTS:[318.021/320.517],nb:117,dropped:0
    [log] > AVC:16 ms hole between fragments detected,filling it
    [log] > Video/PTS/DTS adjusted: 316449/316434,delta:16 ms
    [log] > parsed video,PTS:[316.449,318.866],DTS:[316.434/318.866],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [263.658666,264.065644][310.874645,318.865644]
    [log] > engine state transition from PARSED to IDLE
    [log] > SN just loaded, load next one: 207
    [log] > Loading 207 of [153 ,208],level 1, currentTime:312.944365,bufferEnd:318.866
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  207 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 207 of [153 ,208],level 1, cc 0
    [log] > AVC:16 ms overlapping between fragments detected
    [log] > parsed audio,PTS:[320.517,322.821],DTS:[320.517/322.821],nb:108,dropped:0
    [log] > Video/PTS/DTS adjusted: 318866/318866,delta:-16 ms
    [log] > parsed video,PTS:[318.866,321.250],DTS:[318.866/321.250],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [263.658666,264.065644][310.874645,321.249644]
    [log] > engine state transition from PARSED to IDLE
    [log] > SN just loaded, load next one: 208
    [log] > Loading 208 of [153 ,208],level 1, currentTime:313.202374,bufferEnd:321.250
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  208 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 208 of [153 ,208],level 1, cc 0
    [log] > AVC:16 ms hole between fragments detected,filling it
    [log] > Video/PTS/DTS adjusted: 321265/321250,delta:16 ms
    [log] > parsed audio,PTS:[322.821,325.253],DTS:[322.821/325.253],nb:114,dropped:0
    [log] > parsed video,PTS:[321.265,323.682],DTS:[321.250/323.682],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [263.658666,264.065644][310.874645,323.681644]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 1990 ms
    [log] > level 1 loaded [154,209],duration:118.783
    [log] > live playlist sliding:207.299
    [log] > Updating mediasource duration to 326.08166666666676
    [log] > SN just loaded, load next one: 209
    [log] > Loading 209 of [154 ,209],level 1, currentTime:313.867625,bufferEnd:323.682
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  209 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 209 of [154 ,209],level 1, cc 0
    [log] > AVC:16 ms overlapping between fragments detected
    [log] > Video/PTS/DTS adjusted: 323682/323682,delta:-16 ms
    [log] > parsed audio,PTS:[325.253,327.749],DTS:[325.253/327.749],nb:117,dropped:0
    [log] > parsed video,PTS:[323.682,326.066],DTS:[323.682/326.066],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [263.658666,264.065644][310.874645,326.065644]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 2045 ms
    [log] > level 1 loaded [155,210],duration:119.199
    [log] > live playlist sliding:209.315
    [log] > Updating mediasource duration to 328.5136666666668
    [log] > SN just loaded, load next one: 210
    [log] > Loading 210 of [155 ,210],level 1, currentTime:315.94299,bufferEnd:326.066
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  210 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 210 of [155 ,210],level 1, cc 0
    [log] > AVC:16 ms hole between fragments detected,filling it
    [log] > parsed audio,PTS:[327.749,330.117],DTS:[327.749/330.117],nb:111,dropped:0
    [log] > Video/PTS/DTS adjusted: 326081/326066,delta:16 ms
    [log] > parsed video,PTS:[326.081,328.530],DTS:[326.066/328.530],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [263.658666,264.065644][310.874645,328.529644]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 2052 ms
    [log] > level 1 loaded [156,211],duration:119.59899999999999
    [log] > live playlist sliding:211.331
    [log] > Updating mediasource duration to 330.9296666666668
    [log] > SN just loaded, load next one: 211
    [log] > Loading 211 of [156 ,211],level 1, currentTime:318.075677,bufferEnd:328.530
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  211 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 211 of [156 ,211],level 1, cc 0
    [log] > AVC:16 ms overlapping between fragments detected
    [log] > parsed audio,PTS:[330.117,332.549],DTS:[330.117/332.549],nb:114,dropped:0
    [log] > Video/PTS/DTS adjusted: 328530/328530,delta:-16 ms
    [log] > parsed video,PTS:[328.530,330.914],DTS:[328.530/330.914],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [263.658666,264.065644][310.874645,330.913644]
    [log] > engine state transition from PARSED to IDLE
    [log] > same live playlist, reload twice faster
    [log] > live playlist, reload in 1000 ms
    [log] > level 1 loaded [156,211],duration:119.59899999999999
    [log] > live playlist sliding:211.331
    [log] > live playlist, reload in 2060 ms
    [log] > level 1 loaded [158,212],duration:117.96699999999998
    [log] > live playlist sliding:215.363
    [log] > Updating mediasource duration to 333.32966666666675
    [log] > SN just loaded, load next one: 212
    [log] > Loading 212 of [158 ,212],level 1, currentTime:321.299672,bufferEnd:330.914
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  212 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 212 of [158 ,212],level 1, cc 0
    [log] > parsed audio,PTS:[332.549,334.981],DTS:[332.549/334.981],nb:114,dropped:0
    [log] > AVC:16 ms hole between fragments detected,filling it
    [log] > Video/PTS/DTS adjusted: 330929/330914,delta:16 ms
    [log] > parsed video,PTS:[330.929,333.346],DTS:[330.914/333.346],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [263.658666,264.065644][310.874645,333.345644]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 1965 ms
    [log] > level 1 loaded [159,213],duration:118.36599999999999
    [log] > live playlist sliding:217.380
    [log] > Updating mediasource duration to 335.7456666666667
    [log] > SN just loaded, load next one: 213
    [log] > Loading 213 of [159 ,213],level 1, currentTime:323.550651,bufferEnd:333.346
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  213 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 213 of [159 ,213],level 1, cc 0
    [log] > AVC:16 ms overlapping between fragments detected
    [log] > Video/PTS/DTS adjusted: 333346/333346,delta:-16 ms
    [log] > parsed audio,PTS:[334.981,337.349],DTS:[334.981/337.349],nb:111,dropped:0
    [log] > parsed video,PTS:[333.346,335.730],DTS:[333.346/335.730],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [263.658666,264.065644][310.874645,335.729644]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 2068 ms
    [log] > level 1 loaded [160,214],duration:118.73599999999999
    [log] > live playlist sliding:219.459
    [log] > Updating mediasource duration to 338.19466666666676
    [log] > SN just loaded, load next one: 214
    [log] > Loading 214 of [160 ,214],level 1, currentTime:325.609169,bufferEnd:335.730
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  214 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 214 of [160 ,214],level 1, cc 0
    [log] > AVC:16 ms hole between fragments detected,filling it
    [log] > parsed audio,PTS:[337.349,339.781],DTS:[337.349/339.781],nb:114,dropped:0
    [log] > Video/PTS/DTS adjusted: 335745/335730,delta:16 ms
    [log] > parsed video,PTS:[335.745,338.179],DTS:[335.730/338.179],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [263.658666,264.065644][310.874645,338.178666]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 2080 ms
    [log] > level 1 loaded [161,215],duration:119.08599999999998
    [log] > live playlist sliding:221.508
    [log] > Updating mediasource duration to 340.59366666666676
    [log] > SN just loaded, load next one: 215
    [log] > Loading 215 of [161 ,215],level 1, currentTime:327.765101,bufferEnd:338.179
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  215 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 215 of [161 ,215],level 1, cc 0
    [log] > AVC:16 ms hole between fragments detected,filling it
    [log] > parsed audio,PTS:[339.781,342.213],DTS:[339.781/342.213],nb:114,dropped:0
    [log] > Video/PTS/DTS adjusted: 338194/338179,delta:16 ms
    [log] > parsed video,PTS:[338.194,340.578],DTS:[338.179/340.578],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [263.658666,264.065644][310.874645,340.577644]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 2074 ms
    [log] > level 1 loaded [162,216],duration:119.47199999999998
    [log] > live playlist sliding:223.523
    [log] > Updating mediasource duration to 342.9946666666667
    [log] > SN just loaded, load next one: 216
    [log] > Loading 216 of [162 ,216],level 1, currentTime:329.946989,bufferEnd:340.578
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  216 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 216 of [162 ,216],level 1, cc 0
    [log] > AVC:16 ms hole between fragments detected,filling it
    [log] > Video/PTS/DTS adjusted: 340593/340578,delta:16 ms
    [log] > parsed audio,PTS:[342.213,344.645],DTS:[342.213/344.645],nb:114,dropped:0
    [log] > parsed video,PTS:[340.593,343.010],DTS:[340.578/343.010],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [263.658666,264.065644][310.874645,343.009644]
    [log] > engine state transition from PARSED to IDLE
    [log] > same live playlist, reload twice faster
    [log] > live playlist, reload in 1001 ms
    [log] > level 1 loaded [162,216],duration:119.47199999999998
    [log] > live playlist sliding:223.523
    [log] > live playlist, reload in 2092 ms
    [log] > level 1 loaded [164,217],duration:117.85499999999999
    [log] > live playlist sliding:227.555
    [log] > Updating mediasource duration to 345.4096666666667
    [log] > SN just loaded, load next one: 217
    [log] > Loading 217 of [164 ,217],level 1, currentTime:333.200045,bufferEnd:343.010
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  217 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 217 of [164 ,217],level 1, cc 0
    [log] > AVC:15 ms overlapping between fragments detected
    [log] > Video/PTS/DTS adjusted: 343010/343010,delta:-15 ms
    [log] > parsed audio,PTS:[344.645,347.013],DTS:[344.645/347.013],nb:111,dropped:0
    [log] > parsed video,PTS:[343.010,345.394],DTS:[343.010/345.394],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [263.658666,264.065644][310.874645,345.393644]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 2100 ms
    [log] > level 1 loaded [165,218],duration:118.22299999999998
    [log] > live playlist sliding:229.587
    [log] > Updating mediasource duration to 347.8096666666667
    [log] > SN just loaded, load next one: 218
    [log] > Loading 218 of [165 ,218],level 1, currentTime:335.382835,bufferEnd:345.394
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  218 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 218 of [165 ,218],level 1, cc 0
    [log] > AVC:16 ms hole between fragments detected,filling it
    [log] > Video/PTS/DTS adjusted: 345409/345394,delta:16 ms
    [log] > parsed audio,PTS:[347.013,349.445],DTS:[347.013/349.445],nb:114,dropped:0
    [log] > parsed video,PTS:[345.409,347.826],DTS:[345.394/347.826],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [263.658666,264.065644][310.874645,347.825644]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 2106 ms
    [log] > level 1 loaded [166,219],duration:118.591
    [log] > live playlist sliding:231.635
    [log] > Updating mediasource duration to 350.2256666666667
    [log] > SN just loaded, load next one: 219
    [log] > Loading 219 of [166 ,219],level 1, currentTime:337.579542,bufferEnd:347.826
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  219 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 219 of [166 ,219],level 1, cc 0
    [log] > AVC:16 ms overlapping between fragments detected
    [log] > parsed audio,PTS:[349.445,351.877],DTS:[349.445/351.877],nb:114,dropped:0
    [log] > Video/PTS/DTS adjusted: 347826/347826,delta:-16 ms
    [log] > parsed video,PTS:[347.826,350.210],DTS:[347.826/350.210],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [263.658666,264.065644][310.874645,350.209644]
    [log] > engine state transition from PARSED to IDLE
    [log] > live playlist, reload in 2117 ms
    [log] > level 1 loaded [167,220],duration:119.055
    [log] > live playlist sliding:233.651
    [log] > Updating mediasource duration to 352.70566666666673
    [log] > SN just loaded, load next one: 220
    [log] > Loading 220 of [167 ,220],level 1, currentTime:339.775056,bufferEnd:350.210
    [log] > engine state transition from IDLE to FRAG_LOADING
    [log] > Loaded  220 of level 1
    [log] > engine state transition from FRAG_LOADING to PARSING
    [log] > Demuxing 220 of [167 ,220],level 1, cc 0
    [log] > parsed audio,PTS:[351.877,354.309],DTS:[351.877/354.309],nb:114,dropped:0
    [log] > AVC:16 ms hole between fragments detected,filling it
    [log] > Video/PTS/DTS adjusted: 350225/350210,delta:16 ms
    [log] > parsed video,PTS:[350.225,352.722],DTS:[350.210/352.722],nb:60,dropped:0
    [log] > engine state transition from PARSING to PARSED
    [log] > main buffered : [263.658666,264.065644][310.874645,352.721644]
    [log] > engine state transition from PARSED to IDLE
    [log] > same live playlist, reload twice faster
    [log] > live playlist, reload in 1017 ms
    [log] > level 1 loaded [167,220],duration:119.055
    [log] > live playlist sliding:233.651
    
    Wontfix Need info 
    opened by simonemazzoni 41
  • Bugfix/1220 cleanup live back buffer

    Bugfix/1220 cleanup live back buffer

    This PR will introduce live streaming back buffer cleanup feature.

    Why is this Pull Request needed?

    Address #1220

    Are there any points in the code the reviewer needs to double check?

    nope

    Resolves issues:

    Checklist

    • [x] changes have been done against master branch, and PR does not conflict
    • [x] no commits have been done in dist folder (we will take care of updating it)
    • [x] new unit / functional tests have been added (whenever applicable)
    • [x] API or design changes are documented in API.md

    Note: Cleanup logic is disabled by default, liveMaxBackBufferLength config (value in seconds) was introduced so that cleanup can be manually activated if/when needed. Local tests were executed with liveMaxBackBufferLength=30

    Enhancement Waiting for author 
    opened by vitalibozhko 38
Releases(v1.3.0-beta.2)
  • v1.3.0-beta.2(Dec 19, 2022)

    Summary

    HLS.js v1.3.0-beta.2 is a preview release highlighting improved DRM support coming to HLS.js version 1.3.

    This release introduces support for FairPlay Streaming with modern EME, PlayReady support, and improved Widevine support.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.3.0-beta.1...v1.3.0-beta.2

    • DRM documentation and FairPlay support improvements (#5117) @robwalch
    • downgrade netlify-cli for now as it breaks netlify (#5114) @tjenkinson

    Demo Page

    https://hls-js-b4e1fa26-a33d-4724-9f7b-f21b7340aa0c.netlify.app/

    API Changes

    See https://github.com/video-dev/hls.js/blob/v1.3.0-beta.1/docs/API.md for API details and examples.

    Config changes

    • Added drmSystems for defining key-system specific license urls and certificates
      • drmSystems['com.widevine.alpha'].licenseUrl replaces widevineLicenseUrl (deprecated but still supported)
      • Use optional drmSystems['com.apple.fps'].serverCertificateUrl to specify FairPlay certificate url
      • Use optional drmSystems[KEY-SYSTEM].generateRequest to map initData or generate initData for playlist keys before MediaKeySession generateRequest is called
    • drmSystemOptions takes additional optional arguments used for defining MediaKeySystemConfiguration
    • licenseXhrSetup
      • includes additional keyContext and licenseChallenge arguments
      • is optionally async: takes a return value of a Uint8Array, a Promise which resolves with a Uint8Array or undefined (returning a value transforms the licenseChallenge license request body)
    • licenseResponseCallback includes an additional keyContext argument
    • Changes to the integration of EMEController and KeyLoader may impact custom config.emeController implementations
      • A new keyLoader constructor argument has been added to StreamController, AudioStreamController, and SubtitleStreamController via BaseStreamController (this allows all stream controllers to share a common KeyLoader instance)
      • KeyLoader utilizes an instance of EMEController for handling HLS Keys

    New Error Event ErrorDetails constants have been added to help with identifying issues when negotiating with CDMs

    • New KEY_SYSTEM_ERROR type error details:
      • KEY_SYSTEM_NO_CONFIGURED_LICENSE ~Removed KEY_SYSTEM_NO_INIT_DATA from beta.1~
      • KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED
      • KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED
      • KEY_SYSTEM_SESSION_UPDATE_FAILED
      • KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED
      • KEY_SYSTEM_STATUS_INTERNAL_ERROR

    Event object additions

    • MANIFEST_LOADED event data includes sessionKeys
    • MANIFEST_PARSED event data includes sessionData and sessionKeys
    • KEY_LOADED event data includes keyInfo

    Fragment object changes

    • The levelkey property has been replaced by an array: levelkeys
      • (levelkey has been deprecated and will not be supported)

    LevelDetails object additions

    • encryptedFragments property has been added (assists in dealing with "clear-lead" streams where initial segments are not encrypted)

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.55 MB)
  • v1.3.0-beta.1(Dec 15, 2022)

    Summary

    HLS.js v1.3.0-beta.1 is a preview release highlighting improved DRM support coming to HLS.js version 1.3.

    This release introduces support for FairPlay Streaming with modern EME, PlayReady support, and improved Widevine support.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.2.9...v1.3.0-beta.1

    • Multi-DRM Support (#4930) @robwalch
    • Add support for com.apple.fps (#4474) @valotvince
    • Eagerly match segments without tolerance offset (#5084) @robwalch
    • Fix audio and subtitle controller loading incorrect segments before player seeks to startPosition (VOD) (#5095) @robwalch (included in v1.2.9 via #5098)
    • Parallelize key and segment requests (#4861) @robwalch

    Demo Page

    https://hls-js-b1cb1eb0-2e11-40ac-808b-56bf07ffda6a.netlify.app/demo/

    API Changes

    See https://github.com/video-dev/hls.js/blob/v1.3.0-beta.1/docs/API.md for API details and examples.

    Config changes

    • Added drmSystems for defining key-system specific license urls and certificates
      • drmSystems['com.widevine.alpha'].licenseUrl replaces widevineLicenseUrl (deprecated but still supported)
    • drmSystemOptions takes additional optional arguments used for defining MediaKeySystemConfiguration
    • licenseXhrSetup
      • includes additional keyContext and licenseChallenge arguments
      • is optionally async: takes a return value of a Uint8Array, a Promise which resolves with a Uint8Array or undefined (returning a value transforms the licenseChallenge license request body)
    • licenseResponseCallback includes an additional keyContext argument
    • Changes to the integration of EMEController and KeyLoader may impact custom config.emeController implementations
      • A new keyLoader constructor argument has been added to StreamController, AudioStreamController, and SubtitleStreamController via BaseStreamController (this allows all stream controllers to share a common KeyLoader instance)
      • KeyLoader utilizes an instance of EMEController for handling HLS Keys

    New Error Event ErrorDetails constants have been added to help with identifying issues when negotiating with CDMs

    • New KEY_SYSTEM_ERROR type error details:
      • KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED
      • KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED
      • KEY_SYSTEM_NO_INIT_DATA
      • KEY_SYSTEM_SESSION_UPDATE_FAILED
      • KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED
      • KEY_SYSTEM_STATUS_INTERNAL_ERROR

    Event object additions

    • MANIFEST_LOADED event data includes sessionKeys
    • MANIFEST_PARSED event data includes sessionData and sessionKeys
    • KEY_LOADED event data includes keyInfo

    Fragment object changes

    • The levelkey property has been replaced by an array: levelkeys
      • (levelkey has been deprecated and will not be supported)

    LevelDetails object additions

    • encryptedFragments property has been added (assists in dealing with "clear-lead" streams where initial segments are not encrypted)

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.56 MB)
  • v1.2.9(Dec 8, 2022)

    Summary

    HLS.js v1.2.9 includes bug fixes and improvements over the last release.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.2.8...v1.2.9

    • Fix audio and subtitle controller loading before player seeks to startPosition (#5098) @robwalch

    Demo Page

    https://hls-js-1ddaca7e-016f-45b6-aaea-7c0f72e4e974.netlify.app/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.45 MB)
  • v1.2.8(Nov 28, 2022)

    Summary

    HLS.js v1.2.8 includes bug fixes and improvements over the last release.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.2.7...v1.2.8

    • Improve webworkify handling of named functions where name is in quotes (#5036) by @robwalch
      • Resolves #5015 (v1.2.5 throws an error in a next.js production build)
    • Bugfix: Fragment LoadStats total set to 0 with progressive: true (#5054) by @robwalch
      • Fixes #5050 (LoadStats properties loaded and total is 0 for a download fragment when using FetchLoader)
    • Document new gap controller behaviour on v1.x (#5066) by @itsjamie
      • In response to #4066 (Playback does not Start in 1.0.x Versions with A/V Offset in First Segment)

    Demo Page

    https://hls-js-c7fd2a21-dc83-431c-ba38-cdfc9ae85a20.netlify.app/demo/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.44 MB)
  • v1.2.7(Nov 12, 2022)

    Summary

    HLS.js v1.2.7 includes bug fixes and improvements over the last release.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.2.6...v1.2.7

    • Bugfix: Fix ID3 in AAC start time regression introduced in v1.2.1 (#5014) @jprjr

    Demo Page

    https://hls-js-c26d5ecc-3c7e-4c1c-81dd-05648534771d.netlify.app/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.44 MB)
  • v1.2.6(Nov 12, 2022)

    Summary

    HLS.js v1.2.6 includes bug fixes and improvements over the last release.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.2.5...v1.2.6

    • Update fragPrevious when attempting to load an already-buffered fragment (#5013) @erkreutzer
    • Fallback to inline demuxing on Worker error (#5016) @robwalch

    Demo Page

    https://hls-js-ca8b2d52-fcac-4573-8aa7-4d4f55f49361.netlify.app/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.44 MB)
  • v1.2.5(Nov 5, 2022)

    Summary

    HLS.js v1.2.5 includes bug fixes and improvements over the last release.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.2.4...v1.2.5

    Bugfixes and Improvements

    • ID3: add duration to metadata samples, mimic Safari behavior on unbounded cues (#4967) @jprjr
    • Bugfix: Subtitles not working on live with EXT-X-PROGRAM-DATE-TIME gaps (#4999) @erankor
    • Bugfix: Exception when xhr.response is null (#4980) @asashakira
    • Bugfix: MPEG-2 TS segments not starting with TS packet sync byte (#5006) @robwalch
    • Bugfix: MPEG-2 TS DTS/PTS overlap between segments #4976 (#4977) @robwalch
    • Bugfix: HEVC 608 captions (#4972) @erankor
    • Bugfix: Support Opus lowercase CODECS entry (#4526) @stolen
    • Bugfix: Live stream not seeking to start position (#4951) @kmamal

    Tasks

    • Remove redundant discardEPB call & impl in tsdemuxer (#4983) @erankor
    • Webpack 5 Upgrade (#5007) @robwalch

    Documentation

    • Added deprecated event descriptions to API.md and MIGRATING.md (#5009) @tailgo

    Demo Page

    https://hls-js-acf592b8-566a-4553-aa84-d2d6adcdc0db.netlify.app/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.44 MB)
  • v1.2.4(Sep 30, 2022)

    Summary

    HLS.js v1.2.4 includes bug fixes and improvements over the last release.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.2.3...v1.2.4

    • Patch for abandonRulesCheck sudden quality drops (#4917) @robwalch
    • Disable 608 captions on levels with CLOSED-CAPTIONS=NONE (#4916) @robwalch
    • Fixes for Dolby Vision level codecs and filtering of unknown codecs (#4907) @robwalch
    • Fix broken loader link in table of contents (#4924) @littlespex
    • Fix the sampling and channel spellings. (#4896) @kuroishi

    Demo Page

    https://hls-js-357e5663-c334-422c-88d9-fcfbf938b5dc.netlify.app/demo/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.51 MB)
  • v1.2.3(Sep 13, 2022)

    Summary

    HLS.js v1.2.3 includes bug fixes and improvements over the last release.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.2.2...v1.2.3

    • Bugfix: Caption missing after seeking back to start when stream is played from discontinuity break (#4889) @littlespex
    • Bugfix: Load last VTT fragment in infinite loop (WebVTT with AES-128) (#4901) @mtoczko
    • Bugfix: Initial timestamps must be unsigned for tfdt v1 box for Safari iPad OS 16/Ventura (#4900) @robwalch
    • CI: Fix npm publishes not happening (#4892) @tjenkinson

    Demo Page

    https://hls-js-a7277301-16b6-4ae9-b56a-dbb2ae208a9c.netlify.app/demo/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.51 MB)
  • v1.2.2(Sep 9, 2022)

    Summary

    HLS.js v1.2.2 includes bug fixes and improvements over the last release.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.2.1...v1.2.2

    • Fix handling of negative composition timestamps (#4885) @robwalch
    • Fix segment error handling with live streams (#4858) @robwalch
    • Resume streaming after bitrate test with low max buffer (#4866) @robwalch
    • Bugfix: segment loading order with gaps (#4864) @robwalch
      • Fix seek to live start regression in dev (#4887) @robwalch
    • Fix subtitle buffered check (#4863) @robwalch
    • bail if new tag does not directly follow previous version (#4855) @tjenkinson
    • Update transmux state before decryption which can return early (#4857) @robwalch

    Demo Page

    https://hls-js-e9b6f668-5edb-4682-a6af-034455d028b1.netlify.app/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.51 MB)
  • v1.2.1(Aug 17, 2022)

    Summary

    HLS.js v1.2.1 includes bug fixes and improvements over the last release.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.2.0...v1.2.1

    • Determine text track kind based on CHARACTERISTICS (#4850) @lpommers
    • Add WebVTT EXT-X-MAP support (#4839) @robwalch
    • Forward worker logs to main thread logs (#4820) @lpommers
    • Fix audio demuxer contiguity with segments not carrying ID3 timestamps (#4847) @robwalch
    • Fix sidx duration (#4849) @nklhtv
    • Fix attach/detach and recoverMediaError resume with alt audio (#4816) @robwalch
    • Cleanup stream controller logger statements (#4838) @robwalch
    • Docs: Update Loader Composition code example with code that does not produce runtime errors (#4845) @littlespex
    • CI: switch to W3C WebDriver protocol (#4834) @tjenkinson
    • CI: Fix safari on sauce labs: lock selenium-webdriver to 4.1.0 for now (#4827) @tjenkinson
    • CI: Update workflows to use Node.js v16 (#4821) @robwalch

    Demo Page

    https://hls-js-c682795c-032a-4c39-9374-225b776c04f6.netlify.app/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.51 MB)
  • v1.2.0(Jul 27, 2022)

    Summary

    HLS.js v1.2.0 adds enhanced interoperability and accessibility via improved support for various timed metadata, captions, and subtitle formats, along with bug fixes and improvements.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.1.5...v1.2.0

    • Throttle audio stream controller based on main buffer state (#4809) @robwalch
    • Make gap controller wait for active fragments while seeking (#4806) @robwalch
    • Update functional test targets (#4812) @robwalch
    • Bugfix: Use audio PTS over playlist time when aligned with video (#4808) @robwalch
    • Simplify backtracking logic to handle segments without keyframes (#4807) @robwalch
    • Remove Internet Explorer 11 support (#4802) @robwalch https://github.com/video-dev/hls.js/compare/v1.2.0-beta.1...v1.2.0-beta.2
    • Paused-but-seeking video buffer hole gap jump support (#4667) @karendolan
    • Fix loop loading of segments caused by backtracking logic (#4801) @robwalch
    • Fix stalls in streams with segments that have no media (#4800) @robwalch
    • Bugfix: Handle single sample MPEG2-TS video segments (#4794) @robwalch
    • Bugfix: Slow start on stream with CAN-BLOCK-RELOAD=YES (#4793) @robwalch
    • Bugfix: Include NAL filler data in AVC samples (#4789) @robwalch
    • Guard against exceptions caused by destroying player in buffer stall error callbacks (#4786) @robwalch
    • Bugfix: hls.subtitleDisplay doesn't toggle visibility until track selection (#4785) @robwalch
    • Fix typos in design doc (#4790) @saikatmitra91 https://github.com/video-dev/hls.js/compare/v1.1.5...v1.2.0-beta.1
    • Add Support for EXT-X-DATERANGE enhanced parsing and metadata TextTrack Cues (#4720) @robwalch
    • Add support for emsg ID3 metadata in fmp4 segments (#4458) @robwalch
    • Config options to disable metadata TextTrack Cue processing (#4782) @robwalch
    • Add support for CMAF SEI Captions (#4459) @robwalch (Thanks to @gkolb for #2623 and @ioppermann for #4242)
    • Add ignoreDevicePixelRatio configuration option (#3765) @i8beef
    • Add alternate HEVC box to fallback codec string. (#4734) @itsjamie
    • Do not allow cues with negative startTimes to be added to the text track (#4757) @littlespex
    • Update ID3 cues to span until playlist end, or next cue with same tag type (value.key) on cue append (#4719) @robwalch
    • Include Panasonic Smart TVs and other old browsers in positive DTS gate (#4780) @jeremies
    • Allow exact bitrate matches for minAutoLevel getter (#4629) @littlespex
    • Fix nudge retries happening one time fewer than nudgeRetry config (#4485) @tjenkinson
    • Bugfix: Store track info when buffer codec switched (#4308) @albertdaurell
    • Fix handling encrypted AAC frames when there's no encrypted data in a frame (#4514) @loganek
    • Fix AAC overflow when it occurs at ADTS header (#4781) @robwalch
    • Fix sidx parsing (#4334) @nklhtv
    • Fix: level playlist parse error of ProgramDateTime (#4498) @hongfeih-es
    • Bugfix: Incorrect manifest parsing around init segments (#4237) @hongfeih-es
    • Bugfix: Low-Latency HLS endofstream (#4516) @cjpillsbury
    • Bugfix: IAvoid _appendCues exception (#4552) @albertdaurell
    • Bugfix: freeze after buffer full error occur (#4686) @hongfeih-es
    • Bugfix: Network hangs on streaming level switch using fetch loader (#4729) @robwalch
    • Fix exception in fetch-loader error handler (#3929) @softworkz
    • Bugfix: Failed to execute 'update' on 'MediaKeySession (#4577) @hongfeih-es
    • Bugfix: Segmented VTT captions cease downloading on live time shifted streams (#4688) @littlespex
    • Retry aligning audio playlist with main playlist if levelloaded came too early (#4600) @Frenzie
    • Fix: don't re-write baseMediaDecodeTime in tfdt v0 to a negative value (#4670) @jwbrandon
    • Prevent base stream from logging after stop (#4564) @wehriam
    • Bugfix: forwardBufferLength calculation (#4608) @hongfeih-es
    • Bugfix/webvtt-parse: cue offset (subtitle stream without X-TIMESTAMP-MAP) (#4557) @mtoczko
    • Bugfix: IMSC1 parsing error (#4218) @mtoczko
    • Refactor: replace deprecated String.prototype.substr() (#4605) @CommanderRoot
    • Prepare for supporting more audio codecs (#3930) @softworkz
    • Resolve linting issue causing build to fail. (#4604) @itsjamie
    • Fix esllnt not running on precommit (#4593) @tjenkinson
    • Update jsdelivr urls in readme to point at canary and v1 (#4715) @tjenkinson
    • Update documentation on testBandwidth. (#4641) @itsjamie
    • Fix: typos (#4603) @FredZeng
    • chore: replace png logo with svg (#4601) @jungdaniel
    • Add Brid.tv as a player solution that utilizes hls.js in README.md. (#4597) @Sovica

    Demo Page

    https://hls-js-bbdf933d-da48-407d-aaf3-68cc4ee058e7.netlify.app/demo/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.50 MB)
  • v1.2.0-beta.2(Jul 20, 2022)

    Summary

    HLS.js v1.2.0-beta.2 includes bug fixes and improvements over the last release.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.2.0-beta.1...v1.2.0-beta.2

    • Paused-but-seeking video buffer hole gap jump support (#4667) @karendolan
    • Fix loop loading of segments caused by backtracking logic (#4801) @robwalch
    • Fix stalls in streams with segments that have no media (#4800) @robwalch
    • Bugfix: Handle single sample MPEG2-TS video segments (#4794) @robwalch
    • Bugfix: Slow start on stream with CAN-BLOCK-RELOAD=YES (#4793) @robwalch
    • Bugfix: Include NAL filler data in AVC samples (#4789) @robwalch
    • Guard against exceptions caused by destroying player in buffer stall error callbacks (#4786) @robwalch
    • Bugfix: hls.subtitleDisplay doesn't toggle visibility until track selection (#4785) @robwalch
    • Fix typos in design doc (#4790) @saikatmitra91

    Demo Page

    https://hls-js-b6cc3ed7-a51c-46de-9812-73e071127353.netlify.app/demo/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.51 MB)
  • v1.2.0-beta.1(Jul 14, 2022)

    Summary

    HLS.js v1.2.0-beta.1 is a pre-release of v1.2.0. This release adds enhanced interoperability and accessibility via improved support for various timed metadata, captions, and subtitle formats, along with bug fixes and improvements.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.1.5...v1.2.0-beta.1

    • Add Support for EXT-X-DATERANGE enhanced parsing and metadata TextTrack Cues (#4720) @robwalch
    • Add support for emsg ID3 metadata in fmp4 segments (#4458) @robwalch
    • Config options to disable metadata TextTrack Cue processing (#4782) @robwalch
    • Add support for CMAF SEI Captions (#4459) @robwalch (Thanks to @gkolb for #2623 and @ioppermann for #4242)
    • Add ignoreDevicePixelRatio configuration option (#3765) @i8beef
    • Add alternate HEVC box to fallback codec string. (#4734) @itsjamie
    • Do not allow cues with negative startTimes to be added to the text track (#4757) @littlespex
    • Update ID3 cues to span until playlist end, or next cue with same tag type (value.key) on cue append (#4719) @robwalch
    • Include Panasonic Smart TVs and other old browsers in positive DTS gate (#4780) @jeremies
    • Allow exact bitrate matches for minAutoLevel getter (#4629) @littlespex
    • Fix nudge retries happening one time fewer than nudgeRetry config (#4485) @tjenkinson
    • Bugfix: Store track info when buffer codec switched (#4308) @albertdaurell
    • Fix handling encrypted AAC frames when there's no encrypted data in a frame (#4514) @loganek
    • Fix AAC overflow when it occurs at ADTS header (#4781) @robwalch
    • Fix sidx parsing (#4334) @nklhtv
    • Fix: level playlist parse error of ProgramDateTime (#4498) @hongfeih-es
    • Bugfix: Incorrect manifest parsing around init segments (#4237) @hongfeih-es
    • Bugfix: Low-Latency HLS endofstream (#4516) @cjpillsbury
    • Bugfix: IAvoid _appendCues exception (#4552) @albertdaurell
    • Bugfix: freeze after buffer full error occur (#4686) @hongfeih-es
    • Bugfix: Network hangs on streaming level switch using fetch loader (#4729) @robwalch
    • Fix exception in fetch-loader error handler (#3929) @softworkz
    • Bugfix: Failed to execute 'update' on 'MediaKeySession (#4577) @hongfeih-es
    • Bugfix: Segmented VTT captions cease downloading on live time shifted streams (#4688) @littlespex
    • Retry aligning audio playlist with main playlist if levelloaded came too early (#4600) @Frenzie
    • Fix: don't re-write baseMediaDecodeTime in tfdt v0 to a negative value (#4670) @jwbrandon
    • Prevent base stream from logging after stop (#4564) @wehriam
    • Bugfix: forwardBufferLength calculation (#4608) @hongfeih-es
    • Bugfix/webvtt-parse: cue offset (subtitle stream without X-TIMESTAMP-MAP) (#4557) @mtoczko
    • Bugfix: IMSC1 parsing error (#4218) @mtoczko
    • Refactor: replace deprecated String.prototype.substr() (#4605) @CommanderRoot
    • Prepare for supporting more audio codecs (#3930) @softworkz
    • Resolve linting issue causing build to fail. (#4604) @itsjamie
    • Fix esllnt not running on precommit (#4593) @tjenkinson
    • Update jsdelivr urls in readme to point at canary and v1 (#4715) @tjenkinson
    • Update documentation on testBandwidth. (#4641) @itsjamie
    • Fix: typos (#4603) @FredZeng
    • chore: replace png logo with svg (#4601) @jungdaniel
    • Add Brid.tv as a player solution that utilizes hls.js in README.md. (#4597) @Sovica

    Demo Page

    https://hls-js-35b3c8f7-2907-42de-bc7a-4fde8f228842.netlify.app/demo/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.50 MB)
  • v1.1.5(Feb 16, 2022)

    Summary

    HLS.js v1.1.5 includes bug fixes and improvements over the last release.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.1.4...v1.1.5

    • Fixes a bug with ll-hls where ended events would not fire under certain conditions.

    Demo Page

    https://hls-js-eb7b4375-60e8-4617-93ce-d0d9ef584df1.netlify.app/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.43 MB)
  • v1.1.4(Feb 10, 2022)

    Summary

    HLS.js v1.1.4 includes bug fixes and improvements over the last release.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.1.3...v1.1.4

    • Bugfix: Encrypted VTT subtitles not rendered (#4554) @mtoczko
      • Fixes #4182 #4293

    Demo Page

    https://hls-js-42cf332b-b861-4821-9db0-81644f465908.netlify.app/demo/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.42 MB)
  • v1.1.3(Jan 13, 2022)

    Summary

    HLS.js v1.1.3 includes bug fixes and improvements over the last release.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.1.2...v1.1.3

    • Fix off-by-one error in SAMPLE-AES decryption (#4358) @loganek
    • Bugfix: Initial segment change without discontinuity (#4238) @hongfeih-es
    • clear cue start time on reset (#4479) @SivanA-Kaltura
    • Report only 1 FRAG_PARSING_ERROR per parsed TS file (#4481) @albertdaurell
    • issue/4483-CMCD-tb (#4484) @littlespex
    • bugfix: Ignore program-date-time in subtitle track switch (#4399) @NickCis
    • Bugfix: Added --static . in order to fix demo page (#4477) @NickCis
    • fix segment duration for VFR (#4337) @nklhtv

    Demo Page

    Get demo url from https://github.com/video-dev/hls.js/tree/deployments

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.42 MB)
  • v1.1.2(Dec 16, 2021)

    Summary

    HLS.js v1.1.2 includes bug fixes and improvements over the last release.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.1.1...v1.1.2

    • Fix design.md comments problem (#4461) @albertdaurell
    • Fix subtitle loading after switching subtitles off and on (#4457) @robwalch
    • Bugfix: CC of low latency streams not displayed correctly (#4298) @hongfeih-es
    • Fix trackid for audio and id3 tracks as per iso/iec 14496-12 spec (#4156) @SeJIya
    • Fix repeated requests for initialization segments (#4452) @erkreutzer
    • Bugfix: hardware accelerated decoding apple silicon (#4412) @lpommers

    Demo Page

    https://hls-js-f5927d1a-0f8a-48ec-a2a9-a91cc7464d66.netlify.app/demo/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.42 MB)
  • v1.1.1(Nov 11, 2021)

    Summary

    HLS.js v1.1.1 fixes an error that happens when enabling CMCD with useHeaders: true.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.1.0...v1.1.1

    • set headers after XMLHttpRequest OPEN (#4424) @tjenkinson

    Demo Page

    https://hls-js-e0bb5a9d-7de3-4bb0-be45-51b7873ce229.netlify.app/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.42 MB)
  • v1.1.0(Nov 10, 2021)

    Summary

    HLS.js v1.1.0 adds a base level of CMCD support (disabled by default).

    See this issue for more information.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.0.12...v1.1.0

    • Integrate CMCD data into outgoing requests. (#4346) @littlespex
    • docs: Fix a few typos (#4415) @timgates42

    Demo Page

    https://hls-js-b103cfd4-ab79-452f-a81d-63fe23183b39.netlify.app/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.42 MB)
  • v1.0.12(Oct 27, 2021)

    Summary

    HLS.js v1.0.12 includes bug fixes and improvements over the last release.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.0.11...v1.0.12

    • make it clear that the mux test stream is ll-hls fmp4 in the descript… (#4397) @cjpillsbury
    • hold dependency updates back for 7 days (#4394) @tjenkinson
    • add ll-hls stream from mux (#4392) @tjenkinson
    • disable apple ll-hls streams that are unavailable (#4350) @tjenkinson

    Demo Page

    https://hls-js-d7718f70-80ca-4fcb-af34-239228b8a2e5.netlify.app/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.39 MB)
  • v1.0.11(Oct 9, 2021)

    Summary

    HLS.js v1.0.11 includes bug fixes and improvements over the last release.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.0.10...v1.0.11

    • Update demo URL with pushState() (#4327) @Frenzie
    • add space before version in demo page title (#4328) @tjenkinson
    • Bugfix/live start bugs (#4303) @cjpillsbury

    Demo Page

    https://hls-js-a9b3211e-de29-4815-abae-6c220ddfba76.netlify.app/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.39 MB)
  • v1.0.10(Aug 21, 2021)

    Summary

    HLS.js v1.0.10 includes bug fixes and improvements over the last release.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.0.9...v1.0.10

    • Fix type for 'debug' field in config. (#4279) @jwalton

    Demo Page

    https://hls-js-eb62971d-548d-4941-a906-5e5a974d380b.netlify.app/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.39 MB)
  • v1.0.9(Aug 11, 2021)

    Summary

    HLS.js v1.0.9 includes bug fixes and improvements over the last release.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.0.7...v1.0.9

    • Add missing fetchSetup in config.ts (#4217) @brvier
    • use issue forms (#4093) @tjenkinson
    • Only draft release on tag (#4056) @tjenkinson
    • Update Release Drafter template for project workflows (#4025) @robwalch

    Demo Page

    https://hls-js-e0dd83df-f1f7-4ec7-8a0a-189196ba8a4f.netlify.app/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.39 MB)
  • v1.0.7(Jun 8, 2021)

    Summary

    HLS.js v1.0.7 includes bug fixes and improvements over the last release.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.0.6...v1.0.7

    • Fix subtitle segment loading with current time less than target-duration (#4023)
    • Add Release Drafter to project workflows (#4024)

    Demo Page

    https://hls-js-9a58b3b6-df2d-4582-9c4d-6227c559081a.netlify.app/demo/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.39 MB)
  • v1.0.6(Jun 4, 2021)

    Summary

    HLS.js v1.0.6 includes bug fixes and improvements over the last release.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.0.5...v1.0.6

    • Fixed regression that impacted duration with mid-stream insertion of missing AAC audio frames - #3997 Resolves #3976
    • Improved live subtitle and audio playlist alignment and fixed a regression where subtitle tracks were enabled when the backbuffer is cleared - #3993 Resolves #3987
      • Align live WebVTT subtitle playlists with main variant using playlist start when program-date-time is unavailable
      • Fix a regression in v1.0.5 where a subtitle track is enabled after back-buffer removal sets a track's mode to "hidden"
      • Update audio-stream alignment with main to be simpler. Both subtitle and audio live playlists will wait for main before being aligned and loading fragments
      • Subtitle playlists will be realigned with main if they get into a state where a loading fragment candidate cannot be found

    Demo Page

    https://hls-js-191e44fd-b995-45b9-a30d-724b0441df8a.netlify.app/demo/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.39 MB)
  • v1.0.5(Jun 1, 2021)

    Summary

    HLS.js v1.0.5 includes bug fixes and improvements over the last release.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.0.4...v1.0.5

    • Remove subtitle cues and data with the back-buffer - #3969
    • Replace live playlist sliding warnings with improved logging - #3967 Resolves #3933
    • Fixed last segment in live removed "context changed" error - #3965 Relates to #3913
    • Fixed application of EXT-X-START: TIME-OFFSET - #3962 Relates to #3913
    • Fixed forward buffer length estimation and error handling - #3961 Resolves #3914
    • Fixed incorrect audio track segments loaded before video segment with > 0 startPosition - #3951 Fixes #3950
    • Handle AAC overflow with error message - #3926 Resolves #3920

    Demo Page

    https://hls-js-8f0a9826-a78f-47b2-9f46-19122fdf2481.netlify.app/demo/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.38 MB)
  • v1.0.4(May 17, 2021)

    Summary

    HLS.js v1.0.4 includes bug fixes and improvements over the last release.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.0.3...v1.0.4

    • Fixed audio drift in live DAI/SSAI streams with overlapping AAC samples - #3901
    • Fixed redundant levels in streams with multiple CODECS and matching BANDWIDTH attributes - #3889 Resolves #3888
    • Added support for multiple EXT-X-MAP tags - #3859 Resolves #1990

    Thanks to @elv-peter and @erkreutzer for contributing the multiple EXT-X-MAP fixes, @Sylvain228 for chiming in and providing a test vector, and to @ghouet for reporting the issue long ago.

    Demo Page

    https://hls-js-264c6f2a-b41e-4501-ad0f-ca0e2151fd45.netlify.app/demo/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.38 MB)
  • v1.0.3(May 10, 2021)

    Summary

    HLS.js v1.0.3 includes bug fixes and improvements over the last release.

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.0.2...v1.0.3

    • Fixed immediate and prioritized quality switching in FMP4 streams which muxes audio/video.
    • Fix subtitle loading after seeking in tracks with #EXT-X-PROGRAM-DATE-TIME.
    • Fixed frequent reloading of segments in certain circumstances with missing video keyframes.
    • Improved performance in streams with segments that do not start with a video keyframe by performing preemptive backtracking.
    • Improved performance of the demo Timeline chart when interacting with the chart using the mouse.
    • Updated README to highlight "Features" and "Getting started with development".

    Demo Page

    https://hls-js-1a9ddea5-39c7-4191-bc1b-531e40126702.netlify.app/demo/

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.38 MB)
  • v1.0.2(Apr 20, 2021)

    Summary

    HLS.js v1.0.2 includes several bug fixes and improvements over the last release.

    Demo Page

    https://hls-js-9de24021-304f-45c8-9b76-3d123c91c697.netlify.app/demo/

    Changes Since The Last Release

    https://github.com/video-dev/hls.js/compare/v1.0.1...v1.0.2

    • Fixed DEFAULT=YES on caption tracks not being respected - #3781 resolves #3780
    • Fixed audio-buffer stall with frequent audio group switching - #3800 resolves #3770
    • Fixed AES-128 in streams with alt-audio tracks - #3782 resolves #3772
    • Fixed setInterval/Timer regression in fps-controller - #3799 resolves #3790
    • Fixed playlist URL search params being sorted and re-encoded - #3787 resolves #3786
    • Fixed LL-HLS playlist requests with _HLS_part param starting at 0 for next sn - #3784 resolves #3571/#3771
    • Fixed blocking playlist requests with lowLatencyMode set to false - #3792 resolves #3566
    • Fixed fetch-loader progressive bandwidth sampling - #3801 resolves #3789

    API and Breaking Changes

    If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.

    Feedback

    Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

    Source code(tar.gz)
    Source code(zip)
    release.zip(2.43 MB)
Owner
video-dev
Open-Source Software for video engineers, by video engineers
video-dev
HTML5

One file. Any browser. Same UI. Author: John Dyer http://j.hn/ Website: http://mediaelementjs.com/ License: MIT Meaning: Use everywhere, keep copyrigh

MediaElement.js 8k Jan 8, 2023
Advanced Music Bot It is an advance type of discord music bot which plays high quality of music with spotify

Advanced Music Bot It is an advance type of discord music bot which plays high quality of music with spotify, apple music support . You can save your songs and play it. It also has DJ mode system.

Diwas Atreya 65 Dec 25, 2022
Flexible and easy Dash/HLS/DRM integration for HTML5 video.

This project is made possible with Plyr, Hls.js, Dash.js. Features ?? HLS and DASH playback ?? Multi quality supported ?? Drm with custom header suppo

Tuhin Kanti Pal 25 Nov 11, 2022
SRS Player is a video streaming player, supports HLS/HTTP-FLV/WebRTC etc.

WordPress-Plugin-SrsPlayer SRS Player is a video streaming player, supports HLS/HTTP-FLV/WebRTC etc. Usage First, you should get your own video stream

ossrs 3 Jul 27, 2022
SRS Player is a video streaming player, supports HLS/HTTP-FLV/WebRTC etc.

SRS Player is a video streaming player, supports HLS/HTTP-FLV/WebRTC etc.

ossrs 12 Oct 15, 2022
A Javascript library for working with Audio. It provides a consistent API for loading and playing audio on different browsers and devices. Currently supports WebAudio, HTML5 Audio, Cordova / PhoneGap, and a Flash fallback.

SoundJS SoundJS is a library to make working with audio on the web easier. It provides a consistent API for playing audio in different browsers, inclu

CreateJS 4.3k Dec 31, 2022
🟢 OneForAll Support Bot - Is a support bot for the discord server of OFA!

?? OneForAll Support Bot - Is a support bot for the discord server of OFA! Setup You can setup OneForAll Support Bot by simply opening your terminal/c

baby 3 Oct 15, 2022
JavaScript plugin for playing sounds and music in browsers

JavaScript plugin for playing sounds on user actions and page events. Version: 3.0.7 Project page and demos Download ZIP Support the plugin on GitHub

Denis Ineshin 704 Sep 24, 2022
Enables

HTML5 video made easy All it takes is a single line of code to make HTML5 video and audio tags work in all major browsers. How to enable video and aud

Dave Hall 1.3k Dec 17, 2022
Modern browsers already had a vivid player for video

Modern browsers already had a vivid player for video. However, web developers and designers still want to custom their own style player for different situations. Sounds like web component will do a lot favor for this purpose. With <msc-ez-video /> support, customize control panel will become a piece of cake. <msc-ez-video /> adopts CSS custom properties, developers could style them as they want.

Paul 1 Dec 29, 2021
Secretly record audio and video with chromium based browsers

snoop TCC restricts access to the device camera and microphone to protect user data from unauthorized access. But... If you trusted your browser with

BreakPoint Technologies 10 Aug 30, 2022
SuperCollider GUI for browsers with remote sync capablities.

webRTCgui webRTCgui allows to create dynamic GUI elements in the internet or local network from within SuperCollider. Clients get synced among each ot

Dennis Scheiba 9 Dec 24, 2022
A reimplementation of Winamp 2.9 in HTML5 and JavaScript with full skin support

A reimplementation of Winamp 2.9 in HTML5 and JavaScript with full skin support

Jordan Eldredge 8.9k Dec 31, 2022
Prettier embeds for your YouTubes - with nice options like high-res preview images, advanced customization of embed options, and optional FitVids support.

PrettyEmbed.js Prettier embeds for your YouTubes - with nice options like high-res preview images, advanced customization of embed options, and option

Mike Zarandona 1.1k Sep 28, 2022
Discord.js Music Bot with buttons and slash support!

Music Bot Vote for us! (Please) How to use? Download the repo, create a .env file, and add your token into it. You need to change guildOnly to your gu

Garlic Team 59 Nov 24, 2022
A Browserslist configuration which reflects standardized-audio-context support.

@generative-music/browserslist-config-standardized-audio-context A Browserslist configuration which reflects standardized-audio-context support. This

Generative Music 4 Oct 28, 2022
Skeleton for a discord.js v13 bot written in TS with Slash Command support.

Discord.js v13 Bot Skeleton/Core This repository is a template for creating a Discord bot using Discord.js v13 with Slash Command support. This projec

Derock 6 Nov 2, 2022
🤖A small, robust Discord bot to support and manage a daily word game in your server. (soon™)

Wordable ?? Wordable is a small, robust Discord bot to support and manage a daily word game in your server! Commands /ping - Replies with pong! /guess

Vic Trodd 6 Feb 11, 2022
DiscGuardian is the bot for the support of discord.gg/chilledbot

DiscGuardian is the bot for the support of discord.gg/chilledbot

Disc Solutions 4 Jun 9, 2022