* select next segment using buffered.end + padding or early return until next playlist refresh
* update comments
* update tests
* add comment
* use const for 2 * TIME_FUDGE_FACTOR
* Update src/segment-loader.js
Co-authored-by: Adam Waldron <awaldron@brightcove.com>
* chore: update tests
* chore: call done after 2 sec play
---------
Co-authored-by: Dzianis Dashkevich <ddashkevich@brightcove.com>
Co-authored-by: Adam Waldron <awaldron@brightcove.com>
* feat: handle rollover for vtt cues
* add comments
* handle rollover only if mpegts is not equal to 0
---------
Co-authored-by: Dzianis Dashkevich <ddashkevich@brightcove.com>
* fix: select next if we are at the of the current segment
* chore: fix tests
* chore: move up
---------
Co-authored-by: Dzianis Dashkevich <ddashkevich@brightcove.com>
* Revert "fix: check for transmuxer for vtt-segment-loader (#1452)"
This reverts commit b4dd7480dd.
* Revert "fix: fix several issues with calculate timestamp offset for each segment (#1451)"
This reverts commit 3bbc6ef4ed.
* Revert "fix: replaceSegmentsUntil flag resetting too early (#1444)"
This reverts commit af39ba59b0.
* Revert "fix: prevent wrapping in resetMainLoaderReplaceSegments (#1439)"
This reverts commit 719b7f44d9.
* Revert "feat: Add feature flag to calculate timestampOffset for each segment to handle streams with corrupted pts or dts timestamps (#1426)"
This reverts commit 2355ddc409.
* Revert "fix: fastQualityChange refactor (#1414)"
This reverts commit 4590bdd05a.
* cherry-pick: use transmuxer time info instead of probeTs
* feat: sync controller media sequence strategy (#1458)
* feat: add media sequence sync strategy
* fix: fix current media sequence increment
* chore: update logs
* feat: use exact segment match in sync-controller
* fix: fix race condition for a fast quality switch
* chore: add additional logs for choose next request
* feat: force timestamp after resync
* chore: fix or skip tests
* Update src/segment-loader.js
Co-authored-by: Walter Seymour <walterseymour15@gmail.com>
---------
Co-authored-by: Dzianis Dashkevich <ddashkevich@brightcove.com>
Co-authored-by: Walter Seymour <walterseymour15@gmail.com>
---------
Co-authored-by: Dzianis Dashkevich <ddashkevich@brightcove.com>
Co-authored-by: Walter Seymour <walterseymour15@gmail.com>
* fix: account replaceSegmentsUntil_ when calculating timestampOffset
* fix: do not reset transmuxer if this is not a discontinuity
* chore: update tests
* chore: update tests
* fix: set fetch at buffer when replace segments until is null
---------
Co-authored-by: Dzianis Dashkevich <ddashkevich@brightcove.com>
* Use audio/video start time info from Transmuxer instead of probeTs because Transmuxer aligns time between audio and video in the timestampRollover stream.
* Add a feature flag to calculate timestampOffset for each segment, regardless of its timeline, so timestampOffset should always be valid.
---------
Co-authored-by: Dzianis Dashkevich <ddashkevich@brightcove.com>
* feat: add event stream support
* tests and cue fix
* test description
* remove value
* fix timestamp offset and refactor
* refactor and fix tests
* logs and spacing
* additional test manifest
* remove extra line
* fix test sourceupdater assignment
* update supported feature doc
* specify DASH
* Get Codecs: Always use playlist for current pending segment instead of currently loaded playlist.
* Clear active segment id during reset everything
---------
Co-authored-by: Dzianis Dashkevich <ddashkevich@brightcove.com>
* fix: Add exception guard for VTT parsing state if vtt.js is not loaded for any reasons.
* fix: Do not override native for all iOS/iPadOS browsers
* fix: Add guard for vtt-segment-loader to actually load vtt.js in case we do not have it loaded
* chore: fix eslit errors
* chore: Add loadVttJs test
* chore: Add test for parse exception if no vtt.js is loaded for any reason
Co-authored-by: Dzianis Dashkevich <ddashkevich@brightcove.com>
Previously, if there was a segment timeout and
`experimentalBufferBasedABR` was set to `true`, then the main segment
loader would stay in a `READY` state and never resume loading segments.
This is because the buffer based ABR path doesn't follow the same flow
as non buffer based ABR, where a new playlist would be loaded
immediately and it would trigger a load. Buffer based ABR may determine
that no rendition change should be made, despite the timeout, leading
to nothing happening. This change makes the call to load explicit, but
only for buffer based ABR on timeouts.
The current live DASH playback test source uses a source where segments
are referenced by a SegmentTemplate and duration, but the server
doesn't have time syncing and appears to be about two minutes behind
local time. This leads to requests for segments beyond expected and
occasional failures.
Until that issue is fixed in VHS, switch to a live source that uses
SegmentTemplate, to be a more reliable basic live DASH playback test.
Co-authored-by: Pat O'Neill <pgoneill@gmail.com>
`PlaylistController#excludePlaylist` now takes a single object with 3 properties:
* `playlistToExclude`, defaults to the currently selected playlist
* `error`
* `playlistExclusionDuration`, defaults to the value passed in the constructor
BREAKING CHANGE: This changes the arguments for the `PlaylistController#excludePlaylist` method to take a single object instead of multiple arguments.
* `experimentalBufferBasedABR` becomes `bufferBasedABR`
* `experimentalLLHLS` becomes `llhls` (and is now `true` by default)
* `experimentalExactManifestTimings` becomes `exactManifestTimings`
* `experimentalLeastPixelDiffSelector` becomes `leastPixelDiffSelector`
BREAKING CHANGE: This renames four experimental options to no longer be experimental and enables Low Latency HLS support by default (`llhls: false` will still disable it, if desired).