Accurate Player - Release Notes

Here you can find release notes regarding the Accurate Player. Each release note will tell you highlights in each version, what's new and what's been fixed.

15.0.0

Released 2026-10-22
Highlights
  • Player controls now use Lit 3 and include TypeScript definitions. Integrations using Polymer APIs or automatic property-change events must be updated.
  • New ranged playback APIs support looping a selected range or stopping at its end.
  • JITPlayer exposes structured errors and backend diagnostic messages.
Release notes

SDK Player

Breaking

  • Player controls: Replace Polymer set, get, and notifyPath calls with direct JavaScript property access. Assign new objects or arrays instead of modifying them in place to trigger display updates. Adapt Polymer-based control extensions to Lit.
  • Player controls: Automatic property-change events, including checked-changed and player-status-changed, are no longer emitted. Use SDK player events for playback status and control interaction events for user actions. Property assignments still update the display. Await updateComplete before inspecting rendered controls.

Features

  • Core: Added setRangedPlayback() with "loop" and "stop-at-end" modes, cancelRangedPlayback(), rangedPlayback state, and the RangedPlaybackChanged event.
  • JITPlayer: Added JITErrorEvent for structured errors and JITPlayerEventType.BackendMessage for backend diagnostic messages.
  • WebVTTRenderer: Added the opt-in snapPercentageLinePositions setting to keep percentage-positioned cues inside the video in Chromium 154 and later, where multi-line cues can otherwise be clipped.
  • getMediaInfo: Recognizes HEVC MP4 files with hev1 sample entries and returns frame rates and timestamps without a frame-rate override.

Fixes

  • ProgressivePlayer: In Safari, seeking and Play no longer stop working after the page was hidden while playback was paused.
  • AbrPlayer: Fixed missing surround channels in Chromium and playback stalls when switching audio tracks in Firefox.
  • SegmentPlayer: Fixed audio crackling and unintended audio between segments, audio becoming muted during repeated backward scrubbing within an audio adjustment, and scheduling issues affecting seeking.
  • SegmentPlayer: Fixed incorrect video transitions into and out of crossfades when adjacent clips use different sources or non-contiguous source positions.
  • JITPlayer: Connection setup no longer continues after the peer connection enters the failed state.
  • TimedTextPlugin: STL subtitle style changes no longer insert unwanted newlines.
  • WebVTTParser: Cues without identifiers retain their positioning settings instead of reverting to default positioning. This fixes a regression introduced in 14.0.0.
  • TrackExtractor: Uses GET instead of HEAD requests to avoid console errors with pre-signed URLs.

JIT Backend

Features

  • The default av backend decodes media in-process using FFmpeg/PyAV instead of Melt’s subprocess-based media transport.
  • Added backend lifecycle, progress, and error messages over SSE. Messages include operator-facing userMessage text and technical diagnostics, with component versions and exception details when available. Technical diagnostics may contain sensitive URLs or paths and should not be displayed as operator messages.
  • Added optional cpuCount and videoFile.decoderThreads settings to session requests. CPU allocation selects shared logical CPUs, not dedicated reservations, and is independent of decoder-thread count.
  • Added GET /capabilities to discover the configured media backend and supported resource settings.
  • Eligible MXF startup probes now use bounded partition-header prefetch. Set JIT_AV_MXF_PREFETCH_MODE=off to disable it or adapter to use buffered probing without speculative reads. These settings affect probing only, not decoder reads.

Fixes

  • Decodes all native audio streams in input order and preserves source-relative audio timing across output-frame-rate conversion, seeking, and codec priming, including repeated AAC and AC-3 rewinds.
  • Mono sources render as centered stereo so client gain, mute, and routing mixes can be applied.
  • Remote inputs are mounted before probing. Source metadata and compatible warm readers are reused during startup.
  • Media failures no longer leave empty media-track waits and the HTTP event loop blocked after the producer exits.
  • Local instance agents now receive separate runtime-port ranges, preventing overlapping automatic allocations on the same host.
  • SSE connections send an immediate response body to prevent proxies from delaying connection establishment while waiting for the first diagnostic event.

Full Artifact Version List

JIT Backend: 1.5.0

14.0.2

Released 2026-07-03
Highlights
  • fix(ProgressivePlayer): In Safari, seeking and Play no longer stop working after the page was hidden while the player was paused.
Release notes

Fixes

  • - fix(track-extractor): Dispatch GET instead of HEAD to suppress console error messages with pre-signed URLs
    - fix(SegmentPlayer): Fix audio crackle and audio leak issues between segments.
    fix(SegmentPlayer): Fix audio sometimes getting muted when repeatedly scrubbing backwards within an active audio adjustment.
    fix(SegmentPlayer): Fix various scheduling issues that reduced seek performance.
    - feat(WebVTTRenderer): Add the opt-in `snapPercentageLinePositions` setting. It keeps cues positioned with a percentage line, such as `line:95%`, inside the video in Chromium 154 and later, which otherwise clips multi-line cues.
    - fix(WebVTTParser): Preserve cue settings such as `line`, `position`, `align` and `snapToLines` for cues without identifiers. Since 14.0.0 these cues were reset to default positioning, which moved top-positioned subtitles to the bottom.
    - fix(AudioScrubPlugin): In Safari, audio scrubbing no longer fails with "Failed to play audio scrub" after the page was hidden while the player was paused.
    - fix(ProgressivePlayer): In Safari, seeking and Play no longer stop working after the page was hidden while the player was paused.

14.0.1

Released 2026-07-03
Highlights
  • fix(track-extractor): prevent unnecessary buffering of inactive tracks
  • fix(track-extractor): no longer crashes where reading moov box
Release notes

Fixes

  • fix(track-extractor): no longer crashes where reading moov box
  • fix(track-extractor): prevent unnecessary buffering of inactive tracks

14.0.0

Released 2026-06-02
Highlights
  • breaking(AbrPlayer): upgrade shaka player from v4 to v5
Release notes

SDK Player

Breaking

  • breaking(AbrPlayer): upgrade shaka player from v4 to v5. If you are interfacing with the shaka player instance directly this may affect you.

Features

  • features(SegmentPlayer): added support for crossfade transitions

Fixes

  • fix(jit): pass peer id to backend when creating a session to enable reuse of instances
  • fix(TimedTextPlugin): IMSC didn't work in firefox when element is adopted by a new window
  • fix(TimedTextPlugin): fix cue positioning issue in Firefox on seek/scrub
  • fix(SegmentPlayer): an issue where audio adjustments sometimes caused a brief crackle on segment change has been resolved
  • fix(SegmentPlayer): audio effect duration being interpreted as one frame shorter than actual duration
  • fix(plugins): Channel Control now reports a clear error when audio tracks contain more than 32 channels

JIT Backend

Features

  • feature(orchestrator): Mount media files as read-only
  • feature(orchestrator): Add flag to disable playback of local files
  • feature: Add support for Docker version 29+
  • feature: enable host machine access via host.docker.internal

Fixes

  • fix: allow Docker file access without SELinux relabeling
  • fix: make local JIT Docker builds work with either GitLab tokens or SSH access

Full Artifact Version List

JIT Backend: 1.2.0

13.1.0

Released 2026-02-24
Highlights
  • JITPlayer: add support for emitting audio amplitude data
Release notes

Features

  • feature(JITPlayer): add support for emitting audio amplitude data (used by VU-meters e.g.)

Fixes

  • fix(jit): Make JITPlayer work over HTTP by adding a custom randomUUID implementation to replace crypto.randomUUID which only works under HTTPS
  • fix(jit): codec name in RTC video stats is now retrieved correctly
  • fix(jit): offset and drop frame attributes are now updated for the current video file
  • fix(core): improve accuracy in secondsToFrame function
  • fix(TimedTextPlugin): lost styling for IMSC subtitles when element moved to a different window
  • fix(AudioScrubPlugin): a discrete track with an offset can no longer be heard during scrubbing when current time is less than the offset

Full Artefact Version List

JIT Backend: 1.1.0

13.0.1

Released 2025-12-11
Highlights
  • fix(TimedTextPlugin/SCCParser): non consecutive cues were sometimes dropped
Release notes

Fixes

  • fix(TimedTextPlugin/SCCParser): non consecutive cues were sometimes dropped

13.0.0

Released 2025-12-02
Highlights
  • JITPlayer solo/mute support
Release notes

BREAKING

  • feature(TimedTextPlugin)!: TTML/IMSC subtitles with ttp:timeBase="smpte" are now automatically adjusted according to the start time of the loaded video even if SubtitleFormat.IMSC is not included in the setting useStartTimeFallback. We believe this is a better default. Setting the startTime property explicitly on the subtitle overrides this behavior if you need to override the default.
  • feature(TimedTextPlugin): Stricter Typescript definitions

Deprecations

  • The typescript interface MutedState has been moved from @accurate-player/accurate-player-plugins to @accurate-player/accurate-player-core. It is still available under the plugins package, but it will be removed in the next major release.

Features

  • feature(TimedTextPlugin): add support to parse SCC files with non-standard frame rate time codes. To parse an SCC file with non-standard frame rate you need to specify the frameRate in the parserSettings when you load a subtitle using TimedTextPlugin.add.
  • feature(JITPlayer): added APIs: muteChannel, unmuteChannel, soloChannel, unsoloChannel

Fixes

  • fix(JITPlayer): fix issue that caused JITPlayer to fail the connection because a call to play() threw an error
  • fix(ProgressivePlayer): Consistently emit "playerLoaded" after loading a video file
  • fix(SegmentPlayer): Ensure selected playback rate is correctly applied to video segments
  • fix(SegmentPlayer): seeking to an unbuffered segment having a different source no longer pause playback
  • fix(core): looping of short segments when playback rate > 16 or playback rate < 0 did not work properly
  • fix(ABRPlayer): Ensure that "playerLoaded" is emitted after loading a new video file
  • fix: improved error recovery for failing urls for ProgressivePlayer and SegmentPlayer

12.0.1

Released 2025-10-16
Highlights
  • Improved url expiry support
Release notes

Fixes

  • fix(ProgressivePlayer): improved error handling when loading a failing url. The player will now try to refresh the url and re-load on initial load if the updateSrc callback is provided
  • fix(SegmentPlayer): improved error handling when loading a failing url. The player will now try to refresh the url and re-load on initial load if the updateSrc callback is provided.
  • fix(SegmentPlayer): improved error handling when a url for a pre-buffered video or audio element expires. Previously only the active elements was using the error recovery mechanisms, but now all media elements do.

12.0.0

Released 2025-09-30
Highlights
  • Breaking change (JITPlayer): property player.api.reportedQuality has been removed. User player.api.getStatus().quality instead
  • Breaking change (JITPlayer): refactored VideoFile object passed to player.api.loadVideoFile(). Properties jit.widthPx and jit.heightPx are replaced with jit.resolution
  • Add support for JITPlayer to load audio files alongside video
Release notes

Breaking change

  • Breaking change (JITPlayer):
    • property player.api.reportedQuality has been removed. User player.api.getStatus().quality instead.
    • refactored VideoFile object passed to player.api.loadVideoFile(). Properties jit.widthPx and jit.heightPx are replaced with jit.resolution
  • Breaking change (TimedTextPlugin):
    • getSubtitleTimelineMarkers now returns marker intervals as start frame inclusive and end frame exclusive, i.e. [start, end). This is the format that the AP Timeline component expects. Before this change the intervals were end frame inclusive, i.e. [start, end]. The recommended approach to showing the subtitle markers as end frame inclusive is to toggle the endFrameInclusive property on the timeline metadata component (ApTimelineMetadata) instead.

Features

  • feature(JITPlayer): Add support to load audio files alongside video. This requires version 1.0.0 of JIT backend
  • feature(jit): remove need of autoplay property on video element

Fixes

  • fix(SegmentPlayer): Reduce audio crackling between segment changes
  • fix(SegmentPlayer): Fixed an issue where an incorrect frame would sometimes be briefly displayed when playing or frame stepping between two segments
  • fix(SegmentPlayer): Fixed an issue where audio would continue playing after segment end, if the segment was one frame long
  • fix(JITPlayer): Fixed issues related to when the player reaches the end of the video:
    • JITPlayer now emit PlayerEventType.Ended when playback reaches the end
    • player.api.getStatus() now includes the "ended" property
    • player.api.play() now restart playback from the beginning of the video after the playback have reached the end
  • fix(TrackExtractor): reported tracks now follow the same order as defined in the source file
  • fix(TimedTextPlugin): fix issue in Safari which caused VTT subtitles to be misplaced when a TTML subtitle was loaded at the same time
  • fix(jit): no feedback was given when WebRTC stream closed unexpectedly
  • fix(controls): hide "Original audio" toggle if video file does not have any muxed audio channels
  • fix(TimedTextPlugin): fixed timing floating point rounding errors when applying start time offset to subtitle cues
  • fix(CutlistPlayer, DiscreteAudioPlugin, ProgressivePlayer, SegmentPlayer): Fixed an issue where the updateSrc callback would not trigger for relative file URLs that expired

Full Artefact Version List

JIT Backend: 1.0.0

11.0.0

Released 2025-04-22
Highlights
  • Breaking change: player functions mute() and unmute() no longer affect the player status property muxedAudio
  • CutlistPlayer: fix bug that prevents user from seeking to last frame in preview mode
Release notes

Breaking change

  • Core: player functions mute() and unmute() no longer affect the player status property muxedAudio
    • The muxedAudio property describes if muxed audio is enabled in the player while mute() and unmute() control the global muted state on the player

Fixes

  • CutlistPlayer: fix bug that prevents user from seeking to last frame in preview mode
  • HotkeyPlugin: change behavior of hotkeys for stepping 1 second, 10 seconds, 1 minute, and 10 minutes to step according to the timecode instead of using wall clock time

10.4.1

Released 2025-03-14
Highlights
  • CutlistPlayer: fix bug that prevents user from seeking to the last frame
Release notes

Fixes

  • CutlistPlayer: fix bug that prevents user from seeking to the last frame

10.4.0

Released 2025-02-18
Highlights
  • getMediaInfo: ensure requests are not out of bounds
  • TimedTextPlugin: abort network requests when the plugin is destroyed or if the load timeout is reached
Release notes

Features

  • TimedTextPlugin/WebVTTParser: abort network requests when the plugin is destroyed or if the load timeout is reached

Fixes

  • getMediaInfo: ensure requests are not out of bounds
  • TimedTextPlugin: fix .pac parsing bug where some cues were missed because of separator characters 0x63-0x67 not being identified
  • TimedTextPlugin: fix issue with colors not displaying for subtitles after calling getSubtitleTimelineMarkers()

10.3.0

Released 2024-12-03
Highlights
  • SubtitleSource: Add event (cueclear) that clears all cues
Release notes

Features

  • SubtitleSource: Add event (cueclear) that clears all cues
  • DiscreteAudioPlugin: Deprecate the setting frozenTimeout and disable it by default

Fixes

  • TimedTextPlugin: correctly unregister plugin from the player when destroyed

10.2.2

Released 2024-09-13
Highlights
  • Fixes
Release notes

Fixes

  • TimedTextPlugin: Correctly unregister the plugin from the player when using destroy()

10.2.1

Released 2024-07-02
Highlights
  • Fix intermittent player error when using track extractor
Release notes

Fixes

  • DiscreteAudioPlugin: Deprecate setting frozenTimeout and disable it by default
  • DiscreteAudioPlugin: Fix intermittent player error when using track extractor