## 2.31.2

Released 2023-09-13

** Changed**

  • Bitmovin Player: Player Startup Time is set to fixed value of 1ms.

## 2.31.1

Released 2023-07-18


  • issues with enabling analytics via the Bitmovin player config

## 2.31.0

Released 2023-07-04


  • Amazon IVS Player: VOD seek tracking

## 2.30.0

Released 2023-06-13


  • Amazon IVS Player: quality change tracking

  • Amazon IVS Player, HTML5 native, Video.js, Dash.js, Hls.js, Shaka: `droppedFrames` calculation

## 2.29.4

Released 2023-06-01


  • `videoDuration` for live streams was reported as `null`

## 2.30.0-beta.1

Released 2023-05-26


  • `AmazonIVSAdapter` added to enable analytics for the Amazon IVS player


  • fix `ShakaAdapter` to catch error from `shaka.Player.load()`

## 2.29.3

Released 2023-05-15


  • missing declaration for `PlayerModule`

## 2.29.2

Released 2023-04-21


  • Shaka, Dash.js player: made more resilient to errors when fetching underlying HTMLVideoElement


  • Removed Bitmovin7Adapter

## 2.29.1

Released 2023-02-27


  • Only ECMAScript 5 features are used during modules bundling to enable support for older TV devices

## 2.29.0

Released 2023-02-16


  • Update of internal dependencies and webpack

**Known Issues** This release contains update of a way declaration files are generated. All declaration files are now bundled in one file and stored in the root of the package.

This change might cause customers who are using declaration imports similar to the following one to see compile time errors:

`import { CustomDataValues } from 'bitmovin-analytics/js/types/CustomDataValues';`

This can be fixed by importing everything from 'bitmovin-analytics' like:

`import { CustomDataValues } from 'bitmovin-analytics';`


  • `Bitmovin7Adapter`

## 2.28.1

Released 2022-12-22


  • URL truncation didn't comply with official limits

## 2.28.0

Released 2022-11-14


  • Missing custom data fields to `AnalyticsConfig`


  • Session data not being reset after loading new source

  • Dash.js player: tracking of errors during source loading

  • Chromecast: detection of live streams

**Known Issues**

  • Shaka player: tracking of errors related to manifest loading does not work for player versions before 2.5.12

## 2.27.3

Released 2022-09-06


  • Shaka Player: stop reporting short nonexistent buffering events

## 2.27.2

Released 2022-07-14


  • Bitmovin Player 8: tracking of `videotime_start` and `videotime_end` during ads

## 2.27.1

Released 2022-06-20


  • Video.js: adapter is more compatible with newer versions


  • Video.js, Dash.js, Hls.js, Shaka: fixed spamming `unmute` event when user drags volume control

## 2.27.0

Released 2022-04-25


  • `getUserId` to adapter API for retrieving the `userId`

## 2.26.3

Released 2022-04-22


  • Chromecast: improved player startup time tracking

## 2.26.2

Released 2022-04-06


  • Shaka: tracking of `videoStartuptime`

## 2.26.1

Released 2022-03-31


  • Shaka: tracking of errors during loading of source

  • Chromecast: fixed formatting on error data

  • Chromecast: updated tracking when new source is being played

## 2.26.0

Released 2022-03-09


  • `video.js`: detection of video codec and audio codec


  • `video.js`: improved detection of stream type

## 2.25.0

Released 2022-03-01


  • VideoJsAdapter: properlly release of BitmovinCollector on `dispose` event

  • improved releasing of resources after player shutdown

## 2.24.1

Released 2022-01-31


  • Bitmovin Player: reset DRM related data on source change

## 2.24.0

Released 2022-01-16


  • tracking of queue items transition for `chromecast`

  • `customData26` to `customData30` to the sample payload

## 2.23.0

Released 2021-12-14


  • `customData8` to `customData25` to the sample payload


  • analytics instance can be attached only once to the same player instance

## 2.22.0

Released 2021-10-05


  • BitmovinPlayer 8: HttpRequestTracking feature

  • ErrorDetailTracking feature


  • fix missing sample `startup` on iOS devices because of not supported `MediaSource`

## 2.21.2

Released 2021-08-26


  • `HTML5 native`, `video.js`: detection of `streamFormat` and `streamURL` when source URL contains queryParameters

## 2.21.1

Released 2021-08-11


  • Bitmovin Player 8: incorrect state transition after ads to `STARTUP` state.

## 2.21.0

Released 2021-08-02


  • Bitmovin Player: `castTech` types `Airplay, GoogleCast, and WebSocket` are now detected via player API

## 2.20.2

Released 2021-07-19


  • BitmovinPlayer 8: improved stability of collector when destroying player

## 2.20.1

Released 2021-07-05


  • BitmovinPlayer 8: collector gets stuck in ad event and sends samples with wrong state

## 2.20.0

Released 2021-05-10


  • updated `setCustomData` and `setCustomDataOnce` logic for sending additional samples

## 2.19.2

Released 2021-01-10


  • Typings for `setCustomData` and `setCustomDataOnce`


  • Bug where `setCustomData` would override already present customDataValues even if the new values are undefined

## 2.19.1

Released 2021-01-10


  • Failed Play Attempts, due to a timeout, are now considered as an `ANALYTICS_VIDEOSTART_TIMEOUT_REACHED`

  • Chromecast v3 Adapter for Shaka Player


  • Collector will shut down and stop collecting after a `rebufferTimeout` or `videoStartupFailed` is detected


  • Bug where `videotime_start` and `videotime_end` values were incorrect for errors of type `ANALYTICS_QUALITY_CHANGE_THRESHOLD_EXCEEDED`

## 2.18.0

Released 2020-10-11


  • Bitmovin 8: ignores seek events whose seek distance is less than 3 sec (e.g. keyboard triggered seeks)

  • Bitmovin 8: no seek tracking during `PAUSED` state

  • if `cookieEnabled` is false we ensure that a previously saved cookie is not being used but rather a new userID is generated for every session


  • exception during Browser event `unload` for Bitmovin 7, Bitmovin 8 and VideoJS

  • negative/multiple seek events being emitted for Bitmovin 7, Bitmovin 8

  • issue with where Seeking could get stuck in loop on Bitmovin 8

## 2.17.2

Released 2020-07-29


  • A bug where quality change threshold info carried over to subsequent sessions causing `ANALYTICS_QUALITY_CHANGE_THRESHOLD_EXCEEDED` errors to sometimes happen too soon on the new play session.

## 2.17.1

Released 2020-07-20


  • Ad module wasn't initialized properly for Bitmovin8

## 2.17.0

Released 2020-07-19


  • `cookiesDomain` field to the Analytics configuration, which defines at domain-level the cookie will be set


  • Bitmovin Player: tracking of video startup times when transitioning from pre-roll ads to main content


  • video.js exception with progressive sources

## 2.16.0

Released 2020-07-05


  • maximum threshold for quality change events

  • `error` sample sent if quality change threshold has been exceeded [(ANALYTICS_QUALITY_CHANGE_THRESHOLD_EXCEEDED)](🔗)

  • `error` sample sent if continuous buffering exceeds threshold [(ANALYTICS_BUFFERING_TIMEOUT_REACHED)](🔗)

## 2.15.2

Released 2020-06-21


  • remove persistence of `drmLoadTime` in every sample

## 2.15.0

Released 2020-06-21


  • video completion tracking for Video.js

  • improved source change tracking


  • persist DRM information fields `drmLoadTime` and `drmType` in every sample

## 2.14.0

Released 2020-06-07


  • `completed` and `completedTotal` to sample to track video completion

  • Bitmovin, Dash.js, Shaka, hls.js: video completion tracking


  • Dash.js: `attachSource` from Dash MediaPlayer now resets the `impressionId` correctly.

  • Dash.js, Hls.js, Shaka: track correct `videoTimeEnd` for the playing event if seek occurs during playing

  • `Bitmovin8AnalyticsStateMachine` didn't call `manualSourceChange` on Tizen devices

## 2.13.0

Released 2020-05-24


  • Configuration field `customUserId` that is an alias for `userId` to avoid confusion. Both fields will populate the `CUSTOM_USER_ID` metric.

  • Sending out an additional `closed` sample when a user unloads the page to be able to track `STREAM_EXIT` events


  • Hlsjs: Improved error rate reporting by ignoring warning errors that did not prevent stream playback.


  • A rare bug in Dash.js where the state machine could end up stuck in startup if a `PLAY` event is encountered before the `READY` event.

## 2.12.0

Released 2020-04-13


  • Playback start failure and reason tracking for video.js, shaka, dash.js and hls.js

## 2.11.0

Released 2020-03-22


  • To improve accuracy and timeliness of reported rebuffering events we introduced a incremental heartbeat that sends out events after `3s, 5s, 10s, 30s, 60s`.

## 2.10.0

Released 2020-03-19


  • Hlsjs: audio- and subtitle language tracking


  • Shaka: wait until player initialized media element before attaching analytics

## 2.9.0

Released 2020-02-19


  • Tracking of playback start failures and their reason


  • window onclose handler was overwritten by the advertising module

## 2.8.1

Released 2019-12-19


  • Hlsjs: error events were not registered by analytics HlsAdapter

  • Hlsjs: isLive check throws unhandled error and cancled sending of sample

## 2.8.0

Released 2019-12-08


  • Bandwidth measurements for hls.js


  • log level to `warning` of failed license calls due to `Do Not Track` enabled

## 2.7.1

Released 2019-10-28


  • Issue with `userId` cookie not being set to root path

  • Incorrect `userId` cookie expiry

## 2.7.0

Released 2019-10-27


  • Subtitle tracking in VideoJS (`subtitleEnabled` and `subtitleLanguage`)

  • Audio language tracking in VideoJS

## 2.6.0

Released 2019-10-13


  • New boolean configuration field called `isLive` to indicate if the upcoming stream is a live stream. Will be overriden once playback metadata is available.


  • Unused config variables `ads` and `cast`

## 2.5.2

Released 2019-08-28


  • API to indicate a source change in VideoJS


  • Crash on IE11 due to a missing polyfill for `String.endsWith` not being available.

  • When changing sources, the collector `config` was lost if none was passed

  • `Origin` from `collectorConfig` was not updated after a manual sourceChange

**Known Issues**

  • VideoJS cannot correctly detect autoplay

  • VideoJS doesn't support correct startup time tracking for source changes

  • VideoJS: Metadata from the first source change is ignored

## 2.5.1

Released 2019-08-18


  • API to indicate a source change in VideoJS


  • VideoJS rebuffering measurement method to be more accurate


  • Metadata supplied in first `player.load` `SourceConfig` after initial setup is now updated correctly

  • `droppedFrames` was incorrectly measued and was always `0`

  • For VideoJS player: Prevent exception when the HLS `RESOLUTION` is undefined

## 2.5.0

Released 2019-08-04


  • `origin` to Analytics Collector configuration to set the origin on samples for devices that do not send the origin header in requests.

  • `cookiesEnabled=true|false` to Analytics Collector configuration to disable cookies. Defaults to `true`. If cookies are disabled, `userId` is not persisted across collector sessions.

  • For Bitmovin Player v7 and v8: The selected audio language is available as `audioLanguage` in the sample.

  • For Bitmovin Player v7 and v8: Sample now contains `subtitleEnabled` and `subtitleLanguage`.


  • `timeInViewport` wasn't calculated correctly if ad playback was initially started outside of the viewport.

## 2.4.3

Released 2019-06-25


  • Exception handling for very rare cases where sending a post request via XMLHttpRequest failed because the containing iFrame was already detached

## 2.4.2

Released 2019-05-16


  • If using deferred license loading via the Player+Analytics bundling mechanism, the license key wasn't being updated in the samples.

## 2.4.1

Released 2019-05-13


  • Ability to prevent initialization of the Analytics Module for Bitmovin Player v8 by setting `analytics: false` in the config.


  • `window.setInterval` leak when `player.destroy` was called in the `adstarted` callback.

  • Removed confusing `console.error` on license responses that didn't specify an analytics key.

## 2.4.0

Released 2019-05-05


  • TypeScript declaration files

  • Ability to enable/disable the collector for specific sessions on each call of `player.load`

  • Starting with Bitmovin Player v8.10, Analytics will get the analytics license key automatically from the player, if a default license is specified in the dashboard.


  • Collector Sessions that initially started with enabled: false did not report playerStartupTime, pageLoadTime, startupTime. They now get sent with the first enabled startup sample.

## 2.3.0

Released 2019-04-14


  • Added tracking of used `audioCodec` and `videoCodec`

  • Tracking of the client's supported video codecs


  • possible crash of ad module on Safari related to the viewport tracker

## 2.2.0

Released 2019-03-24


  • Added `config` to analytics configuration

  • Configure backend url via `analyticsConfig.config.backendUrl`

  • Error segment tracking

  • Sample now contains `errorData` JSON with additional information for Bitmovin 8 errors.

  • Bitmovin Player v8.3 compatibility

  • Improvements to the Ad Module with 8.3 (FallbackIndex and Waterfall level)

## 2.1.1

Released 2019-01-16


  • `version` property on all analytics instances to get analytics collector version

  • `player.analytics.version` property to get analytics collector version

  • `window.bitmovin.analytics.version` property to get analytics collector version


  • Bitmovin collector no longer pollutes the global scope when used in a requirejs/es6 context

## 2.1.0

Released 2019-01-13


  • Added ads tracking (Bitmovin 8 only)

  • Added bandwith measurements

  • Sample now sends `web` in a platform field

  • AdSample now sends `web` in in the platform field

  • Sample now contains a `sequenceNumber` field


  • Bitmovin7Adapter now checks if another analytics collector is already registered up


  • Looping a video (Calling `.play()` after `playbackFinished` occured) did not correctly generate a new impressionId

## 2.0.0

Released 2018-10-23


  • `AnalyticsPlayerModule` class

  • `Analytics.version` returns the version of the analytics collector

  • Added support for native HTML5 Video playback via the `HTMLVideoElementAdapter`

  • Added specific adapter classes for each supported player technology

  • `Bitmovin8Adapter`

  • `Bitmovin7Adapter`

  • `VideojsAdapter`

  • `ShakaAdapter`

  • `HlsAdapter`

  • `DashjsAdapter`

  • `HTMLVideoElementAdapter`


  • Setup API has been reworked to use JavaScript classes and specific adapters per player technology


  • `.augment` syntax removed in favor of ES6 classes

  • `.register` syntax removed in favor of ES6 classes

  • `window.bitmovin.analytics`

  • `window.bitmovin.analytics.Players`

  • `window.bitmovin.analytics.CdnProviders`

  • `window.bitmovin.analytics.PlayerModule`

  • `window.bitmovin.analytics.version`

  • Automatic Player detection is deprecated in favor of explicit Adapter creation


  • Video Bitrate is now correctly reported before the first quality change events in all adapters

  • Player version reporting has been improved.

  • Fixed incorrect handling of `videoWindowWidth` and `videoPlaybackWidth` in HLS.js and Shaka.

  • When loading a new video with Bitmovin Player v7 and v8, a new impression id was assigned before the last sample of the old impression has been sent to the server.

  • Fixed error being thrown when `hls.destroy()` is called because of a not correctly cleared timeout.

**Known Issues**

  • `getPlayerVersion` will return `unkown` for video.js if included via npm or requirejs

  • Not calling `player.load` in the same code-path after `new bitmovin.player.Player()` will skew the `PLAYER_STARTUPTIME` metric.

  • Bitrate Information is not collected when using Native Safari Playback using the `HTMLVideoElementAdapter`. This is due to the limitations of the Browser and not a bug.

  • The HTML5 adapters and the VideoJs adapter won't assign a new impression id on `Analytics.sourceChange()`

  • Destroying a Shaka instance will not correctly clear all event handlers on the VideoElement. Re-Using the VideoElement with another Shaka instance will lead to the impression being tracked twice

## 1.7.4

Released 2018-10-23


  • Player detection for Shaka when loaded via require and `window.Shaka` is not available.

  • Player detection for HLS.js when loaded via require and `window.HLS` is not available.

  • Beta-Support for Shaka 2.3.7

  • Beta-Support for HLS.js 0.7.11

**Known Issues**

  • Shaka/HLS Adapter: Video width/heigth/bitrate is only available after the first videoQuality change event.

## 1.7.3

Released 2018-10-04


  • `pageLoadType` was not correctly detected for subsequent sessions in the same player

  • `playerStartupTime` was reported as `NULL` instead of `0` for subsequent sessions in the same player

  • Internal improvements and refactorings

## 1.7.2

Released 2018-09-20


  • `isLive` detection was broken in subsequent sessions on the same player

## 1.7.1

Released 2018-09-09


  • added default export for es6 style imports

## 1.7.0

Released 2018-09-06


  • **Bitmovin Player v8 Support**

  • `title` configuration attribute

  • introduced [new "embedded" configuration API](🔗)

  • DRM performance tracking


  • Bitmovin Player v6 support

  • Chromecast receiver side support

## 1.6.0

Released 2018-04-22


  • DASH.js support

  • HLS.js support

  • Shaka player support

  • HTML5 media element support


  • various internal refactorings

  • added source-maps to the NPM package


  • inaccuracies in seek time tracking

  • video.js adapter bugfixes