Changelog

# What changed in the Bradmax player

A player is a product you keep, so the release history matters as much as the feature list. This changelog is generated from the player source repository, not written by hand, so it reflects what actually shipped.

It covers the last three years of user-facing work: features and fixes, grouped by the month they were released.

## Release cadence

276 releases and 180 user-facing changes over the last 3 years, from v2.14.279 to v2.15.70.

## October 2026

2 releases (v2.15.69 to v2.15.70)

### Fixes

- Unblock DRMToday FairPlay playback and log license errors

## September 2026

3 releases (v2.15.66 to v2.15.68)

### Features

- Upgrade Google Analytics to GA4

## July 2026

4 releases (v2.15.62 to v2.15.65)

### Fixes

- Improving icons alignment for different browsers after Google fonts update

- Fixing splashscreen forward/backward buttons alignment after Google fonts & Chrome/Firefox browser engine update

- Solving problems with duplicate audLang/subLang tags for BradmaxAnalytics

## May 2026

5 releases (v2.15.56 to v2.15.60)

### Features

- Adding audio/subtitles language selection tracking for BradmaxAnalytics

- Adding uid support for BradmaxAnalytics

### Fixes

- Solving problems with edge case with hidden mute button on Smart TV devices

## April 2026

1 release (v2.15.55)

### Fixes

- Updating flutter config - enabling video360 support via plugin

## March 2026

4 releases (v2.15.51 to v2.15.54)

### Features

- Supporting customDimensions via System73 config

### Fixes

- Adding possibility to use HLS.js for Safari and mobile devices as default player

## February 2026

7 releases (v2.15.44 to v2.15.50)

### Fixes

- Solving problem with missing audio track for DASH having not defined kind field

- Adding getVideoTracks() & selectVideoTrack() for Shaka player adapter API for video track change (sign-language)

- Not displaying HTML tags on subtitles in MP4 boxes for DASH

- Making param nol_sdkDebug common for all Nielsen regions

## January 2026

2 releases (v2.15.42 to v2.15.43)

### Fixes

- Handling correctly PlayReady DRMs on MS EdgeChromium browsers (after recent DRM changes)

## December 2025

6 releases (v2.15.36 to v2.15.41)

### Features

- Added dataset active attribute to Quanteec stats panel green power button in QuanteecHtmlRenderer class

### Fixes

- Supporting Quanteec key in iframe embed page URL query params

- Minor fix for destroying LicenseProvider in Video class to prevent errors during player destroy

- Removing legacy Hasplayer & small fixes for VideoWeb & FairPlay DRMs

- Moving registerThumbnailProvider() to onDashJsDurationchange() for dash.js (stable & lower overhead)

- Solved problem with not fully cleaned-up dash.js on destroy

## November 2025

5 releases (v2.15.31 to v2.15.35)

### Features

- Refactored dash and HLS video players to separate System 73 integration into own plugin

- Added the ability to access instances of other plugins in video player plugins

- Added accessibility features for audio, subtitles, and video

### Fixes

- Moving copy Media/Live fields logic into Media & moving retry logic into media for VideoHlsJs

- Allowing retry on DRM license server broken connection & moving retry max count into Media

- Correcting ES/PT spelling UI translations for European region

- Added UI translations for ES/Spanish and PT/Portuguese

- Minor fix for Javascript Api missing event listener

## October 2025

8 releases (v2.15.23 to v2.15.30)

### Features

- Added Quanteec streamboost panel view to player UI

- Initial integration with Quanteec

### Fixes

- Solving problem with play/pause button for ad skin

- Notifying NPAW about out-of-dvr-window situation

- Quick fix for crashing VideoDashJs after recent changes (configuration merging issue)

- Added custom lower buffer level for VideoDashJs for fast networks (quicker startup)

- Improved UI to resolve issues with selecting the current audio and text track

- Solving problem with incorrect Dolby-Digital audio track support by EdgeChromium 141

- Solving problem with audio switch and muted stream after ad break on Smart TV

- Improving error reporting in case of DRM/decoder issues

- Removed unnecessary hlsplayer initialization when appending video tag

## September 2025

3 releases (v2.15.20 to v2.15.22)

### Fixes

- Solving bug with NPAW and not closed by it one /ping timer

## August 2025

1 release (v2.15.19)

### Features

- Created a new plugin "SkinlessInfoWindow" that displays a window with additional player information for debugging purposes

## July 2025

1 release (v2.15.18)

### Fixes

- Adding possibility to disable WidevineMacOSCssBugFix plugin by player variables

## June 2025

4 releases (v2.15.14 to v2.15.17)

### Fixes

- Automatically renewing expired DRM licenses for DASH and renewing tokenised MediaSource URLs if possible

- Solving edge case with buffering events inconsistency for DASH & Smart TV

- Solving problems with live streams "in-sync" & playback start on Safari 18.*

- Solving loader/spinner issue for in-stream ads for Shaka-adapter

- Preventing an error when setting volume using the volume bar in HtmlSkin

- Volume default value set to 0 when mute is on

## May 2025

3 releases (v2.15.11 to v2.15.13)

### Fixes

- Solving problem with buffering start/end inconsistency on ad break start/end

## April 2025

14 releases (v2.14.481 to v2.15.10)

### Features

- Handling non-critical plugins crashes safely (player & playback can still be working)

### Fixes

- Additional system memory info into NPAW device metadata

- Solving performance problems for low-end LG Smart TV devices (frequent buffering caused by overload without drop frames)

- HtmlSkin improved LRUD navigation marker for tiles end splash when page change

- Improved HtmlSkin LRUD navigation marker style

- Removed separate element as LRUD navigation marker and replaced with css rendered element that is "glued" to the focused element

- Solving problems with VAST/VMAP ads and UI nav on Smart TV (specific configuration)

- Resolving problems with HLS content & MP4 ads on Tizen Smart TV

- Improved HtmlSkin end splash rendering for wide and short screens

- Tracking VIDEO_BUFFER_GAP event in NPAW

## March 2025

8 releases (v2.14.473 to v2.14.480)

### Features

- Disabling KeyboardSupport plugin for TV devices

- Added missing onExit handler to HtmlSkin LRUD feature

- Refactored HtmlSkin plugin to add LRUD (left, right, up, down) navigation functionality to support TV remote control

### Fixes

- Solving problem with multiple errors for same cause reported to NPAW

- Including devicePixelRatio in dimension calculation for HtmlSkin LRUD navigation

- Solving problem with unnecessary resetting timing for Live with DVR for Safari

- Handling and displaying parse errors for thumbnails/vtt files

- Improved calling of the LRUD navigation exit method in the HtmlSkin plugin "techno" and "snake" layouts

- Disabling nav.back() method for Smart TV (confusing, not needed yet)

- Resolved bug with muted video on webOS Smart TV after live channel zapping (side effect of VideoElementManager - video reuse)

- Solved problems with base64 encoded config for embed script (edge case)

## February 2025

11 releases (v2.14.462 to v2.14.472)

### Fixes

- Using more accurate wall clock time for live streams for Safari browser

- Scrubbing fixes for Safari browser during playback

- Protecting against not loaded NPAW plugin

- Fixed issue with VideoWeb plugin seek feature when starting DVR content playback

- Supporting HLS with CMAF transport to cast to Chromecast devices

- Solving problem with too long suggestedPresentationDelay for DASH

## January 2025

8 releases (v2.14.454 to v2.14.461)

### Features

- Added a plugin to prevent screen capture via the Widevine css bug on macOS devices

### Fixes

- Solving problems with Smart TV crashes after recent DASH update (edge cases, related to race condition)

- Updated NPAW plugin to use "setAnalyticsOptions" method during initialization and "setVideoOptions" during playback

- Handling HTML entities in WebVTT so video.track will not crash

- Solving edge case with progressbar update for live and old DVR window position

- Solving events inconsistency during DASH start when DRM session is reused

- Solving problems with player crash, when DRM session is reused on Smart TV

## December 2024

11 releases (v2.14.443 to v2.14.453)

### Features

- Added new player configuration variables "audioSelectionVisible" and "subtitleSelectionVisible" and updated the "hideUIElements" variable with new values ​​to allow hiding more UI elements

- HtmlSkin plugin will display a spinner while loading the ad break metadata and before rendering the ad skin

### Fixes

- Not reporting silent-errors or malfunctions to NPAW and correcting error details for malfunctions

- Possibility to hide audio/subtitles selection

- Solving problem with tracking correctly seeking for DASH by NPAW

- Correct the type property value for metadata for ads that start close to the resume playback position reported to Nielsen

- Solving problems with DASH and not consistent DolbyDigital audio tracks for multiple languages

- Solving problem with DASH and buffer management on QUOTA_EXCEEDED_ERR from browser

- Fixing problem with tracking SCTE-35 segment markers for Yospace after recent SCTE-35 adjustments

- Modular Smart TV build will include missing js polyfill for older devices

- Unbind AdEvent listeners while destroying in PlaybackStateMonitor

- For consistency, all VideoEvent.BUFFERING_START events sent by video player plugins will include metadata

## November 2024

6 releases (v2.14.437 to v2.14.442)

### Fixes

- Prevent displaying wrong text tracks in Safari browser on some older iPad devices

- Warming up already DRM initialised video element for faster playback for Smart TV

## October 2024

16 releases (v2.14.421 to v2.14.436)

### Features

- Added minimal drop-shadow to ads progress bar in HtmlSkin layout's

- Implemented Google IMA HTML5 SDK with HtmlSkin support

### Fixes

- Fixed Autoplay feature for Google IMA ads and not working play button in ad skin for non IMA ads

- Update for indicating issues with FairPlay DRM on older macOS devices running Safari versions older than 17

- Improved metadata sent to NPAW analytics

- Improved metadata sent to NPAW to include more device information for Smart TVs

- Fixed an issue with incorrect text height when displaying the current time in the "disco" HtmlSkin theme

- Added missing 'var' in Shaka player adapter

## September 2024

11 releases (v2.14.410 to v2.14.420)

### Fixes

- Fixed an issue with websites performing unwanted scrolling action to a player element (default browser behavior changed when focus() is called on an HTML element)

- Added delay for checking if 'play/pause' action is still required to refresh player on iOS/Safari when seeking on pause at video start position

- Improved buffering timeout error handling on Mobile/Safari in VideoWeb player plugin

- VideoWeb player will try to start playback with resume position if available instead always starting from zero time

- Yospace while triggering events (start/pause/resume) will send current time as playhead instead hardcoded zero

- Improved handling touch devices in HtmlSkin plugin (mobile chrome in desktop mode case)

- Fixed KeyboardSupport plugin to not show keyboard on mobile devices

- Fixed issue with dash.js unable to listen to "progress" events for some XHR calls

## August 2024

10 releases (v2.14.400 to v2.14.409)

### Fixes

- HtmlSkin will store and skinless players will read the muted state from the browser session storage using the "_brplayer_muted" key

- Moved from skin plugins to the video plugin logic responsible for setting the initial volume value to enable this feature for skinless players

## July 2024

6 releases (v2.14.394 to v2.14.399)

### Fixes

- Prevent cannot read properties of 'null' error in VideoHasplayer plugin when DVR window range is not available

- PictureInPicture plugin will try to exit pip mode when destroy is called

## June 2024

12 releases (v2.14.382 to v2.14.393)

### Features

- Refactored HtmlSkin plugin to improve UI/UX on low resolution screens

### Fixes

- Improved NPAW in stream ads reporting and added 'playbackType' as NPAW 'pendingMetadata' option

- Fixed issue with reporting errors to NPAW, before playback starts (only first sent error is visible in suite in such case)

## May 2024

12 releases (v2.14.370 to v2.14.381)

### Features

- Added seek buttons and marker(animation) to HtmlSkin layout splash layer

### Fixes

- Repaired issue with HtmlSkin invalid width of dvr 'live' button

- HtmlSkin will draw progress markers and segments even if duration is not set in player configuration

- Resolved issue with HtmlSkin sending events before other plugins starts to listen

- Fixed detection of media 'complete' state in HtmlSkin for non DVR video (1 sec before actual end)

- Resolved issue with detecting 'seekable' media in HtmlSkin and refactored model classes to keep more detailed data about current time

- Fixed NPAW not reporting '/joinTime' event on iOS 15 devices

## April 2024

13 releases (v2.14.357 to v2.14.369)

### Fixes

- Solved issue with not reporting to NPAW after resuming app (browser tab) from background

- Fixed an issue with popups in the modular player HTML skin not working due to wrapper/proxy on MutationObserver class, e.g. like ngzone does in Angular apps

- Fixed NPAW plugin crash when destroying

- Fixed an issue with casting a non-String value to a number in Yospace3 plugin

- Updates and fixes for NPAW plugin incorrectly sending "/seek" and "/bufferUnderrun" events

- Fixed issue with NPAW plugin sending events after a fatal error

- Fixed a potential issue with casting a non-String value to a number when using the Std.parseInt/Std.parseFloat methods in the NPAW plugin

- Changed initial NPAW options "isLive.noSeek" to "false" to ensure consistent reporting for non-live videos

- Fixed an issue with the NPAW plugin reporting a "/seek" event instead of "/bufferUnderrun" when the buffer has run out and the user has not performed a seek

- Fixed an issue with the NPAW plugin not reporting the "rendition" parameter

## March 2024

23 releases (v2.14.334 to v2.14.356)

### Features

- Implemented JavascriptApi event recorder feature to record and reemit events due to plugin "eventRecorder" configuration value

- Added VideoEvent.FIRST_FRAME dispatched when player receive first video frame with fallback to first currentTime change

- Implemented a "fullscreenOrientationLock" variable setting that allows to change the screen orientation after entering fullscreen mode

### Fixes

- Added to NPAW plugin DISABLED_SUBTITLES constant to fix issue with not reporting when user disable subtitles in player

- Resolved issue when NPAW plugin can in specific condition report invalid duration value for LIVE

- Added to NPAW plugin 'streamProtocol' value formatter

- Updated HtmlSkin plugin 'techno' skin layout and theme to better handle low resolution devices (below 320px width)

- Fixed an issue where the HtmlSkin plugin would not download SVG icon files on modular player builds

- Fixed an issue with the HtmlSkin buffer spinner screen "flashing" during playback (CSS background effects removed). Also added missing buffer spinner animation resizing feature

- Updated setting isLive option for NPAW video analytics

- Set NPAW method option to POST

## January 2024

11 releases (v2.14.307 to v2.14.317)

### Features

- Added custom spinners feature to HtmlSkin plugin

- Added offline assets feature to HtmlSkin plugin

- Implemented 'qualityInitialBandwidthKbs' in VideoHlsJs and VideoDashJs player plugins

- Added restartSkinHide method to the JavascriptApi plugin to display the skin (if hidden) and restart the hiding animation

- The KeyboardSupport plugin will display the skin and restart the hide animation after a backward/forward seek action

### Fixes

- Added css to disable double tap zoom on mobile devices in HtmlSkin plugin

- Fixed a minor null exception bug in the VideoWeb player plugin when selecting an enabled audio track

- Updated the "qualityInitialBandwidthKbs" config variable implementation in the VideoHlsJs player to not "force" a quality level, but suggest an initial level

- Solved issue with HtmlSkin not showing skin on events, when browser drops frame

- JavascriptApi plugin will store last message data to solve the problem of message data loss if the event is fired after the player is created but before listeners are attached

- VideoDashJs will now check if MediaSourceExtension is supported by the browser in the canPlay method

- Embeder after appending player will check if the "_ba_createPlayer" method is available (in the window context) as function before attempting to call it

- From now Storage util checks if read value is not null before trimming it

## December 2023

9 releases (v2.14.298 to v2.14.306)

### Features

- Added requestVideoQualityChange method to JavascriptApi plugin

## November 2023

7 releases (v2.14.291 to v2.14.297)

### Features

- Added BradmaxThumbnailsService plugin to provide thumbnail images from media metadata or video grabber

- Added lit 'popupList' directive to HtmlSkins, responsible for scrolling into view active elements in popup lists

- Added playback quality level indicator to HtmlSkins

- Added 'saveBandwidthMode' to player configuration variables and implemented network bandwidth saving mode in video player plugins

### Fixes

- Fixed an issue where player configuration variables were not parsed correctly in the HtmlSkin plug-in

## October 2023

12 releases (v2.14.279 to v2.14.290)

### Features

- Added namespace alias for accessing JavascriptApi plugin (org: player.modules.JavascriptApi, alias: player.api)

- Added the ability to provide player variables (config) as innerText of HTML script element. Must be valid JSON object

- When iOS is detected, the modular player will set the 'playsinline' video tag attribute to true as the default behaviour if the 'iosInlineVideo' variable is not present or set to false, and in Safari the 'autoplay' and 'mute' variables are not set to true

- HtmlSkin fullscreen feature will try to use the "native" iOS Safari fullscreen before switching to the "emulated" fullscreen

### Fixes

- Fixed modular player error with missing dash XHR addEventListener method when 'lowLatencyEnabled' is set to true

- Fixed an issue with players not selecting audio tracks or subtitles

- Solved issue with ChromecastSender error when instances are not initialised yet

- Fixed an issue where HtmlSkin received Infinity as a duration value when listening to the VideoEvent.DURATION_CHANGE event emitted by the VideoWeb player for a live broadcast

- Fixed an issue in HtmlSkin where the bottom brand image obscures other elements when the player is embedded in a "short" height container

- Fixed an issue in HtmlSkin with the state play button obscuring other elements when the player is embedded in a "short" height container

- Fixed an issue with the HtmlSkin menu always being visible when the player is embedded in a "small" container

## About this changelog

- Entries are generated from the player git history and filtered to features and fixes.

- Commit subjects are lightly edited for spelling and consistent product naming.

- Work delivered under a client-specific engagement is not published here, so the changelog stays about the shared player.

- Dependency bumps, documentation, internal refactoring and anything security-relevant are omitted.

### Try the current release

The free plan runs the same player described in this changelog. Test it on your own streams and see the release cadence for yourself.
