Release notes for the v2 version of the iOS SDK can be found [here](🔗).




## 3.44.2

**Fixed**

  • Potential crash in `ConsoleLogger` in case there are unexpected `String` formatting specifiers in the log message

## 3.44.1

Released: 2023-09-04

**Fixed**

  • Unexpected caching of the `FairplayConfig` if it was updated through the `SourceConfig` on subsequent calls to `OfflineManager.getOfflineContentManager(for:)`

## 3.44.0

Released: 2023-08-28

**Added**

  • `AdSource.vastLoadTimeout` which can be used to change the timeout for VAST ad manifest downloads

**Changed**

  • Update Google Cast SDK to latest stable version (4.8.0)

## 3.43.1

Released: 2023-08-24

**Fixed**

  • Inconsistent version number for the `BitmovinPlayerAnalytics` framework

## 3.43.0

Released: 2023-08-16

**Added**

  • `TweaksConfig.discardAdsWhileCasting` to control behavior when casting with advertisements scheduled

**Fixed**

  • Settings Panel not closing on first touch on the close button

  • `PlaybackFinishedEvent` emitted unnecessarily while casting. `CastPlaybackFinishedEvent` was already emitted for this.

**Changed**

  • Updated Bitmovin Player Web UI to v3.50.0

**Known Issues**

  • Due to an inconsistency in the `MARKETING_VERSION` field, it's not possible to submit an App to Apple's Review process with this version. This is fixed in version `3.43.1`.

## 3.42.0

Released: 2023-08-01

**Added**

  • Bitmovin Analytics support. Initially, version `3.0.0` of `BitmovinAnalytics` collector library is used, but it can be updated independently from the `Player` to newer versions. If you are currently using the standalone `BitmovinAnalytics` framework you can remove it and use the built-in dependency and APIs instead. See our [migration guide](🔗) for details.

  • The following APIs are available:

    • `PlayerFactory.create(analyticsConfig:)` to allow enabling and configuring Analytics

    • `SourceFactory.create(from:sourceMetadata:)` to allow configuring Analytics metadata

    • `Player.analytics` namespace to control Analytics related features. See `PlayerAnalyticsApi` for available APIs.

    • `Source.analytics` namespace to control Analytics related features. See `SourceAnalyticsApi` for available APIs.

    • `PlayerAnalyticsApiAccessor` to allow access to the `PlayerAnalyticsApi` from Obj-C

    • `SourceAnalyticsApiAccessor` to allow access to the `SourceAnalyticsApi` from Obj-C

**Fixed**

  • Duplicated `onFullscreenEnabled` events when attaching new `FullscreenHandler` instance to `PlayerView`

  • Missing `onFullscreenEnter`/`onFullscreenExit` events when attaching new `FullscreenHandler` instance to `PlayerView` with different fullscreen state

**Known Issues**

  • Due to an inconsistency in the `MARKETING_VERSION` field, it's not possible to submit an App to Apple's Review process with this version. This is fixed in version `3.43.1`.

## 3.41.2

Released: 2023-07-24

**Fixed**

  • `DownloadConfig.minimumBitrate` not respected in case it contains a floating point value

## 3.41.1

Released: 2023-07-17

**Fixed**

  • Playback pauses on an AirPlay receiver after putting app back in foreground on iOS 16 and above

## 3.36.1

Released: 2023-07-11

**Fixed**

  • Advertisements playing on sender when casting to a Chromecast device

  • `PlaybackFinishedEvent` emitted unnecessarily while casting. `CastPlaybackFinishedEvent` was already emitted for this.

## 3.41.0

Released: 2023-06-26

**Added**

  • `TimelineMarker` API to represent a timeline marker that can be visualised in the player UI

    • `InterstitialMarker` to mark time range of an interstitial for asset when presented in tvOS system UI

    • `SourceConfig.markers` to add a list of `TimelineMarker`s of type `InterstitialMarker`

    • `Source.markers` to add a list of `TimelineMarker`s of type `InterstitialMarker`

    • `TimelineMarkerEnterEvent` and `TimelineMarkerExitEvent`

    • `SystemUserInterfaceConfig.timeToSeekAfterUserSeeked` which is called when the user seeks or timeshifts when using tvOS system UI. It can be used to override the target time of the seek or timeshift operation.

## 3.40.0

Released: 2023-06-12

**Added**

  • `BitmovinPlayerCore` framework to lay the groundwork for modularization. See `Changed` section for more details.

  • A modern way to subscribe to `Player`, `Source` and `PlayerView` events using combine:

    • `Player.events`, `Source.events` and `PlayerView.events` namespaces for accessing event publishers

    • `PlayerEventsApi.on` for subscribing to `PlayerEvent`s or `SourceEvent`s on `Player` using Combine framework

    • `SourceEventsApi.on` for subscribing to `SourceEvent`s on `Source` using Combine framework

    • `PlayerViewEventsApi.on` for subscribing to `PlayerViewEvent`s on `PlayerView` using Combine framework

  • `FairplayLicenseAcquiredEvent` with `PlayerListener.onFairplayLicenseAcquired` and `SourceListener.onFairplayLicenseAcquired` listeners to get notified when a FairPlay license is successfully acquired

  • The possibility of renewing an expiring FairPlay license:

    • `SourceDrmFairplayApi.renewExpiringLicense` for renewing an expiring FairPlay license

    • `Source.drm` namespace for access DRM specific APIs on a source

    • `Source.drm.fairplay` namespace for access FairPlay DRM specific APIs on a source

    • `SourceDrmApi.fairPlay` namespace for access FairPlay DRM specific APIs on a source

  • SwiftUI support:

    • `VideoPlayerView` for built-in SwiftUI support

  • Allow custom Bitmovin Player Web UI to access current source's `metadata`

**Changed**

  • From `3.40.0` onwards, the `BitmovinPlayer` framework is a collection of multiple frameworks which defines the final `Player` product. For now, the only dependency is the `BitmovinPlayerCore` framework. This dependency will always have an exact version match. This means it is not possible to mix incompatible versions together.

  • For ObjC users only:

    • The import for the `Player` changes from `<BitmovinPlayer/BitmovinPlayer.h>` to `<BitmovinPlayerCore/BitmovinPlayerCore.h>`.

**Removed**

  • Bitcode support. As Apple deprecated bitcode since Xcode 14, we are now also disabling this configuration.

## 3.39.0

Released: 2023-05-30

**Removed**

  • Deprecated methods and properties from `OfflineManager`:

    • `offlineState(for:)`

    • `deleteOfflineData(for:)`

    • `fetchAvailableTracks(for:)`

    • `download(sourceConfig:)`

    • `download(sourceConfig:, downloadConfig:)`

    • `download(sourceConfig:, tracks:, downloadConfig:)`

    • `cancelDownload(for:)`

    • `suspendDownload(for:)`

    • `resumeDownload(for:)`

    • `syncOfflineDrmLicenseInformation(for:)`

    • `offlineDrmLicenseInformation(for:)`

    • `renewOfflineLicense(for:)`

    • `createOfflineSourceConfig(for:, restrictedToAssetCache:)`

    • `add(listener:, for:)`

    • `remove(listener:, for:)`

    • `isPlayableOffline(sourceConfig:)`

    • `usedStorage(for:)`

  • Deprecated `OfflineManagerListener`

**Fixed**

  • Missing types from API documentation

## 3.38.0

Released: 2023-05-15

**Changed**

  • `FullscreenEnterEvent`, `FullscreenExitEvent`, `FullscreenEnabledEvent`, `FullscreenDisabledEvent`, `ControlsShowEvent`, `ControlsHideEvent`, `PictureInPictureEnterEvent`, `PictureInPictureEnteredEvent`, `PictureInPictureExitEvent`, `PictureInPictureExitedEvent` and `ScalingModeChangedEvent` are now conforming to `PlayerViewEvent` instead of `PlayerEvent`

**Fixed**

  • `SourceConfig.options.startOffset` not being respected when using Chromecast

## 3.37.2

Released: 2023-04-24

**Fixed**

  • Stalling when a progressive source is loaded into a `Player` instance that has a source loaded already with autoplay enabled

## 3.37.1

Released: 2023-04-11

**Fixed**

  • Ads are covered by main content after exiting Picture-in-Picture playback when another UI is used that is not Bitmovin Player UI

## 3.37.0

Released: 2023-04-03

**Added**

  • `Logger` and related components `LogLevel`, `LogSender` and `LogEntry` for the logging facility

  • `LoggingConfig` to provide logging related configuration options

  • `DebugConfig.logging` to configure logging in the SDK

  • `BitmovinUserInterfaceConfig.forceSubtitlesIntoViewContainer` to provide access to the `UIConfig.forceSubtitlesIntoViewContainer` of our Bitmovin Player Web UI

  • `TweaksConfig.delayInitialSubtitleSelection` which can be enabled to prevent race conditions with `AVPlayer`'s internal subtitle selection logic. When this race condition occurs, it can have unexpected side effects, like playback starting at the beginning of the DVR window instead of at the live-edge for live streams with growing DVR window.

**Changed**

  • Increased minimum required versions to iOS 14.0 and to tvOS 14.0

  • Updated Bitmovin Player Web UI to version `3.46.0`

**Fixed**

  • Out-of-view-port caption rendering on iOS 16 by setting `UIConfig.forceSubtitlesIntoViewContainer` to `true` per default in our Bitmovin Player Web UI

**Deprecated**

  • `PlayerWarningEvent`, `SourceWarningEvent`, `PlayerListener.onPlayerWarning` and `SourceListener.onSourceWarning`. Warnings are now communicated through logs with level `.warning`.

## 3.36.0

Released: 2023-03-20

**Changed**

  • Updated Bitmovin Player Web UI to version `3.45.0`

**Fixed**

  • Potential crashes when `Player` gets deallocated or destroyed

## 3.35.1

Released: 2023-03-06

**Fixed**

  • Buffer level indicator exceeding right edge of seek bar when seeking close to the end in Bitmovin Web UI

  • A memory leak of our internal retry handler

  • Crash during casting when time shifting before a source was loaded

## 3.35.0

Released: 2023-02-12

**Changed**

  • `Xcode 14.1` or newer is required to integrate the SDK

**Fixed**

  • `SourceUnloadEvent` and `SourceUnloadedEvent` are now emitted correctly after (and not before) the `PlayerErrorEvent` when a player error occurs

  • `DestroyEvent` is now emitted correctly after (and not before) the `PlayerErrorEvent` when a licensing error occurs




## 3.34.1

Released: 2023-01-30

**Changed**

  • Removed main-thread assertion leading to runtime crashes when accessing video-quality related API from a background thread

**Fixed**

  • `Player.timeShift` returning `0` after time-shifting when the System UI is used.

  • `TimeShiftEvent.timeShift` returning `0` when the System UI is used for time-shifting.

  • Missing `PausedEvent` during group playback when pausing right after seeking




## 3.34.0

Released: 2023-01-19

**Added**

  • `PlayerView.pictureInPicture` API namespace to group picture in picture related APIs together going forward

  • `PictureInPictureApi.showSkipControls` to dynamically specify if skip-backward and skip-forward buttons are visible when Picture in Picture is active on iOS

  • `PictureInPictureConfig.restoreUserInterfaceHandler` to provide the possibility to restore the user interface before Picture in Picture stops




## 3.33.0

Released: 2023-01-17

**Added**

  • `BitmovinCastManagerOptions.deviceDiscoveryMode` to specify when cast devices discovery should start

**Changed**

  • Update Google IMA SDK for iOS to latest stable version (3.18.4)

  • Update Google IMA SDK for tvOS to latest stable version (4.8.2)

**Fixed**

  • Potential crash when using `TweaksConfig.isCustomHlsLoadingEnabled` with value `true`

  • Missing `PausedEvent` when a participant is doing stall recovery during group playback and the group pauses while the stalling participant is suspended

  • Potential memory leak when using the Bitmovin Player UI




## 3.32.0

Released: 2022-12-20

**Added**

  • `PlayerViewConfig` to configure `PlayerView` behavior

  • `PictureInPictureConfig` to group configurations for Picture in Picture playback

    • `showSkipControls` to specify if skip-backward and skip-forward buttons are visible when Picture in Picture is active on iOS

    • `shouldEnterOnBackground` to specify if Picture in Picture playback should start automatically when the App enters background

  • `PlayerView(player:,frame:,playerViewConfig:)` initializer to the `PlayerView` to allow setting the new `PlayerViewConfig`

  • `.dSYM` and `.bcsymbolmap` files to XCFramework product in order to support crash report symbolication

**Deprecated**

  • `PlaybackConfig.isPictureInPictureEnabled` in favor of `PictureInPictureConfig.isEnabled`

**Removed**

  • Deprecated `RenderFirstFrameEvent` event data object and `onRenderFirstFrame` event listener from `PlayerListener`




## 3.31.0

Released: 2022-12-06

**Added**

  • `Player.sharePlay` namespace to control SharePlay related features. SharePlay allows synchronized group playback between participants that are on a FaceTime call together. A SharePlay sample application can be found in our [sample repository](🔗). The `Player.sharePlay` namespace offers the following APIs:

    • `coordinate(with groupSession:)` lets the player join the `groupSession` to allow group playback

    • `isInGroupSession` describes whether the player is currently participating in group playback

    • `beginSuspension(for suspensionReason:)` starts a suspension. The player is not participating in group playback while the suspension is active

    • `endSuspension(_ suspension:)` and `endSuspension(_ suspension:, proposingNewTime newTime:)` ends the suspension and optionally proposes a new time that every participant should seek to

    • `isSuspended` describes whether the player is currently suspended and not able to participate in group playback

    • `suspensionReasons` describes why the player is currently not able to participate in group playback

  • `NetworkConfig.retryHttpRequest` callback that can be used to implement a custom retry logic for failed HLS playlist requests

**Fixed**

  • Potential crash when hitting play on the System UI when no `Source` is currently loaded

**Known Issues**

Missing features and known limitations for the SharePlay feature:

  • Trick play (slow/fast-forward and rewind) is not supported

  • Synchronized ad playback and ad break management is not supported

  • Casting is not supported

  • Playlists are not supported

  • Scrubbing suspensions when using Bitmovin UI are not supported

  • System UI is not supported

  • AirPlay and Picture in Picture (PiP) are not fully supported. Playback changes done with the AirPlay receiver or PiP mini player are not synchronized with the group. Playback changes done on the AirPlay sender device are working as expected




## 3.30.0

Released: 2022-11-22

**Changed**

  • `PlayerConfig` from `open` to `final` to restrict subclassing

**Removed**

  • `NSCopying` conformance for `Config`

  • `Config` as super type from all configs

**Fixed**

  • Endless stalling after seeking on iOS 16.1 when `TweaksConfig.unstallingBehaviour` is set to `.aggressive` for HLS assets

  • Bad structure of `TweaksConfig.isCustomHlsLoadingEnabled` documentation




## 3.29.0

Released: 2022-11-08

**Added**

  • `ImaSettings` type to improve usability when Google IMA SDK is used

  • `ImaAdsManager` type to improve usability when Google IMA SDK is used

  • `VideoPlaybackQualityChangedEvent` which is emitted when the playback video quality changes

**Changed**

  • Improved documentation on `AdBreak.ads` to state limitations

  • `AdvertisingConfig.beforeInitialization` property now uses our own `ImaSettings` type instead of Google IMA SDK to improve usability

  • `AdvertisingConfig.onAdsManagerAvailable` property now uses our own `ImaAdsManager` type instead of Google IMA SDK to improve usability

**Removed**

  • `autoPlayAdBreaks` property when using `IMASettings` from `AdvertisingConfig.beforeInitialization`, as using this property has no effect on ad playback

  • `playerType` property when using `IMASettings` from `AdvertisingConfig.beforeInitialization`, as using this property has no effect on ad playback

  • `enableDebugMode` property when using `IMASettings` from `AdvertisingConfig.beforeInitialization`, as using this property has no effect on ad playback

  • `delegate` property when using `IMAAdsManager` from `AdvertisingConfig.onAdsManagerAvailable`, as using this caused undefined behavior, potentially breaking playback

  • `adPlaybackInfo` property when using `IMAAdsManager` from `AdvertisingConfig.onAdsManagerAvailable`, as all of this information is available via `Player` API during ad playback

  • `volume` property when using `IMAAdsManager` from `AdvertisingConfig.onAdsManagerAvailable`, as this is available via `Player.volume` API during ad playback

  • `delegate` property when using `IMAAdsManager` from `AdvertisingConfig.onAdsManagerAvailable`, as using this caused undefined behavior

  • `initialize(with:)` when using `IMAAdsManager` from `AdvertisingConfig.onAdsManagerAvailable`, as this had no effect

  • `start()` method when using `IMAAdsManager` from `AdvertisingConfig.onAdsManagerAvailable`, as ads are starting automatically when scheduled if playing, or can be started using via `Player.play()`

  • `pause()` method when using `IMAAdsManager` from `AdvertisingConfig.onAdsManagerAvailable`, as this is available via `Player.pause()` API during ad playback

  • `resume()` method when using `IMAAdsManager` from `AdvertisingConfig.onAdsManagerAvailable`, as this is available via `Player.play()` API during ad playback

  • `skip()` method when using `IMAAdsManager` from `AdvertisingConfig.onAdsManagerAvailable`, as this is available via `Player.skipAd()` API during ad playback

  • `clicked()` when using `IMAAdsManager` from `AdvertisingConfig.onAdsManagerAvailable`, as this API had no effect when used

  • `destroy()` when using `IMAAdsManager` from `AdvertisingConfig.onAdsManagerAvailable`, as using this caused undefined behavior, potentially breaking playback

**Fixed**

  • `Seek`/`TimeShift` and `Seeked`/`TimeShifted` event emitting when multiple seek or timeShift operations are done after each other

  • Missing `onVideoDownloadQualityChanged` listener method in `SourceListener`




## 3.28.0

Released: 2022-09-27

**Added**

  • `player.isOutputObscured` property that returns whether visual output is obscured due to insufficient external protection for the content.

  • `OutputObscuredEvent` and `OutputUnobscuredEvent` which are emitted when `player.isOutputObscured` changes its value

**Deprecated**

  • `TweaksConfig.disableSubtitleTracksWhileSeeking` without replacement




## 3.27.0

Released: 2022-09-13

**Added**

  • `SystemUiApi.customInfoViewControllers` which allows adding custom info view controllers that are presented as content tabs on tvOS 15 and above

  • Event emitting for `Seek`/`TimeShift` and `Seeked`/`TimeShifted` events during casting

**Fixed**

  • Playback on cast receiver not continuing when destroying the local player

  • Outdated and incomplete documentation for `NetworkConfig`

  • Performance issues when running on iOS or tvOS simulator

  • Horizontal positioning for cues in WebVTT subtitle tracks on iOS and tvOS 16




## 3.26.0

Released: 2022-08-30

**Added**

  • Possibility to remove faulty `Source`s from a `SourceErrorEvent`. See [`onSourceError`](🔗) for details.




## 3.25.0

Released: 2022-08-16

**Changed**

  • Change `TimeMode` to a `@frozen` enum

  • `SourceConfig.metadata` in Swift now uses `[String: Any]` type

**Removed**

  • Deprecated APIs from `SourceConfig`:

    • `HlsSource`

    • `DashSource`

    • `ProgressiveSource`

    • `SourceConfig` initializers:

      • `init(adaptiveSource:)`

      • `init(HlsSource)`

      • `initWithDASHSource:`

      • `initWithProgressiveSource:`

    • `SourceConfig` properties and methods:

      • `urlForType:`

      • `hasSourceOfType:`

      • `addSource:error:`

      • `addAdaptiveSource:error:`

      • `addProgressiveSource:error:`

  • `AdaptiveSource`, `DASHSource`, `HLSSource`, `ProgressiveSource`, `MediaSource` classes

**Fixed**

  • `CueExitEvent`s firing continuously when external subtitles are added to `SourceConfig`

  • Incorrect playback position when using an UNIX timestamp for time-shifting using `player.timeShift`




## 3.24.0

Released: 2022-08-02

**Added**

  • `SystemUiApi.infoViewActions` which allows dynamically changing info view actions on tvOS 15 and above




## 3.23.1

Released: 2022-07-19

**Fixed**

  • Google IMA SDK overlay not respecting safe area layout of the `PlayerView`

  • Compilation error when BitmovinPlayer is used within an Objective-C++ (`.mm`) file

  • Broken `PlayerView` subclassing for a custom view implementation




## 3.23.0

Released: 2022-07-05

**Added**

  • `PlayerFactory.sdkVersion` to retrieve the current version of the BitmovinPlayer SDK

  • `SystemUserInterfaceConfig.transportBarCustomMenuItems` to configure custom transport bar items on tvOS 15 and above

  • `PlayerView.systemUi` API namespace of type `SystemUiApi` for interactions regarding the system UI

  • `SystemUiApi.transportBarCustomMenuItems` which allows dynamically changing custom transport bar items on tvOS 15 and above

  • `AdvertisingConfig.ima` property and `ImaAdvertisingConfig` type to customize Google IMA SDK

  • `ImaAdvertisingConfig.adAttributionUiMode` to customize Ad attribution appearance when using Google IMA SDK

**Fixed**

  • Setting `PlayerView.scalingMode` having no effect when Subtitle UI is used




## 3.22.0

Released: 2022-06-21

**Added**

  • Picture In Picture support on tvOS 14 and above

  • `AdBreakStartedEvent.adBreak.totalNumberOfAds` and `AdBreakFinishedEvent.adBreak.totalNumberOfAds` properties to provide the number of ads in an ad break

**Fixed**

  • Incorrect handling when the application enters background on tvOS, resulting in restarted streams when the application enters foreground again

  • `UserInterfaceType.subtitle` not properly respected on tvOS resulting in displaying the system UI

  • `AdStartedEvent.indexInQueue` always returned `0` instead of the proper value




## 3.21.0

Released: 2022-06-07

**Added**

  • Ads support on tvOS

    • Google IMA tvOS SDK `4.6.1` and higher

    • Progressive ads

  • `player.playlist.add(source:at:)` to dynamically add `Source`s into the playlist

  • `player.playlist.add(source:)` to dynamically add `Source`s at the end of the playlist

  • `SourceRemovedEvent` to notify about a `Sources` removed from the playlist

  • `player.playlist.remove(sourceAt:)` to dynamically remove `Source`s from the playlist

  • `SourceAddedEvent` to notify about new Sources added into the playlist

  • `SourceRemovedEvent` to notify about Sources removed from the playlist

**Fixed**

  • No replay overlay visible on the sender when playback finished during casting

  • Inconsistent player state and event emitting during loading a new `Source` while casting

  • UI seekbar flickering when loading a live-stream while casting




## 3.20.0

Released: 2022-05-24

**Added**

  • Support for `PreprocessHttpRequestDelegate` of the `NetworkConfig` for HLS Playlist requests

**Fixed**

  • Incorrect `onCastTimeUpdated` event fired after pausing the player while casting

  • During casting, after pausing playback and seeing the expected `onCastPaused` event, an incorrect event sequence of `onCastPlaying`, `onCastTimeUpdated` and `onCastPaused` is seen




## 3.19.0

Released: 2022-05-10

**Added**

  • `cea` to `SubtitleFormat` to represent closed captions

**Changed**

  • Type of `position` from `String?` to `CuePosition?` in `CueEvent`, `CueEnterEvent`, `CueExitEvent` and `CueParsedEvent`

**Fixed**

  • Positioning information not available on `CueEnterEvent` and `CueExitEvent` for closed caption tracks

  • `hideFirstFrame` not working when using `UserInterfaceType.system`




## 3.18.0

Released: 2022-04-12

**Removed**

  • `AudioQuality` as it was unused

**Fixed**

  • Player getting stuck when new source is loaded directly from `onSourceError` listener

  • `SourceErrorEvent` emitted twice when new source is loaded directly from `onSourceError` listener

  • Missing `AdErrorEvent` event for ads with non-supported file types within VMAP manifests

  • Thumbnails not showing on the Bitmovin Player UI

  • Absolute-path relative references not resolved correctly for WebVTT `ThumbnailTrack`




## 3.17.0

Released: 2022-03-29

**Added**

  • `replayMode` property to the `PlaylistOptions` to make playlist replay behavior configurable

**Removed**

  • Support for [Bitmovin Player Web U](🔗)I below version `3.19.0`

**Fixed**

  • `offlineDrmLicenseInformation.isDrmLicenseExpired` is always showing as expired for FPS protected content

  • Background Playback not working when `uiEnabled` is false

**Changed**

  • `OfflineContentManager.offlineDrmLicenseInformation` to return optional value in order to always represent the correct state

  • `OfflineManager.offlineDrmLicenseInformationForSourceConfig:` to return optional value in order to always represent the correct state

**Deprecated**

  • `OfflineContentManager.isDrmLicenseExpired` in favor of optional `OfflineContentManager.offlineDrmLicenseInformation` value




## 3.16.0

Released: 2022-03-15

**Added**

  • Swift Package Manager support. To use our SDK with the Swift Package Manager we created [this](🔗) repository including all releases starting from 3.0.0

  • `SubtitleRemovedEvent`, `SubtitleChangedEvent`, `SubtitleAddedEvent` and `CueParsedEvent` to be emitted for inactive sources in a playlist

**Fixed**

  • Incorrect SCTE tag timing when the initial variant playlist has a `EXT-X-MEDIA-SEQUENCE` of 0

  • `CueEnter.text` property containing `<br>` as new-line representation instead of `\n`

  • `CueEnter.html` property containing `\n` as new-line representation instead of `<br>` for external `SubtitleTrack`s

  • `CueEnter.html` is empty for `SubtitleTrack`s that are present in the manifest

**Changed**

  • `SubtitleRemovedEvent`, `SubtitleChangedEvent`, `SubtitleAddedEvent` and `CueParsedEvent` are now conforming to `SourceEvent` instead of `PlayerEvent`

  • `CueEvent` is now a protocol instead of a class conforming to `PlayerEvent`




## 3.15.0

Released: 2022-03-01

**Added**

  • `isCastEnabled` property to the `RemoteControlConfig` to enable or disable casting functionality for a player instance

  • Support for `ID` and `CLASS` properties for `EXT-X-DATERANGE` metadata

**Fixed**

  • Some internal events are emitted through the `onEvent` listener method




## 3.14.0

Released: 2022-02-16

**Added**

  • `MetadataParsedEvent` to be emitted for inactive sources in a playlist when SCTE metadata is parsed for HLS content

  • `MetadataParsedEvent` to be emitted for inactive sources in a playlist when Id3 metadata is parsed for HLS content

  • Allow seeking and time shifting as soon as `PlayerActiveEvent` is seen. Before, it was required to wait until the `ReadyEvent` is received.

  • Support for negative values for `player.playbackSpeed` to allow reverse playback

  • `Player.canPlayAtPlaybackSpeed` API to check if given `playbackSpeed` value is supported by the currently loaded source

**Fixed**

  • Missing `TimeShiftEvent` and `TimeShiftedEvent` on tvOS when live stream contains `EXT-X-PROGRAM-DATE-TIME`

  • Playback via AirPlay for HLS streams hosted on Akamai using Token Authentication

  • Unnecessary caching of HLS playlist requests

**Known Issues**

  • Picture in Picture mode is not working on iOS 14.0 and iOS 14.1

  • Playback gets stuck when playing a Progressive Ad that results in an `AdError`

  • Loading a new \`Source from a PlayerErrorEvent or a SourceErrorEvent does not work

  • Loading a new `Source` from a `PlaybackFinishedEvent` sometimes does not start playback automatically when `PlaybackConfig.isAutoPlayEnabled` is set to `true`

  • When our default Bitmovin Player Web UI is used it can happen that the label of an `AudioTrack` keeps the value of the previous source




## 3.13.0

Released: 2022-02-01

**Added**

  • Automatic retries for HLS playlist requests when the previous request failed with an non-2xx HTTP status code

**Fixed**

  • Time shifting not always working properly when being connected to AirPlay on iOS versions lower than iOS 14.7

  • Potential runtime crash when using Google IMA SDK

**Known Issues**

  • Picture in Picture mode is not working on iOS 14.0 and iOS 14.1

  • Playback gets stuck when playing a Progressive Ad that results in an `AdError`

  • Loading a new \`Source from a PlayerErrorEvent or a SourceErrorEvent does not work

  • Loading a new `Source` from a `PlaybackFinishedEvent` sometimes does not start playback automatically when `PlaybackConfig.isAutoPlayEnabled` is set to `true`

  • When our default Bitmovin Player Web UI is used it can happen that the label of an `AudioTrack` keeps the value of the previous source




## 3.12.0

Released: 2022-01-18

**Added**

  • `HttpRequestType` enum when used from Swift

  • `DownloadFinishedEvent.requestType` to make use of the new `HttpRequestType` enum

**Changed**

  • Updated Google Cast SDK to latest stable version (4.7.0)

**Removed**

  • Underscored methods and properties from documentation

**Fixed**

  • Partially downloaded offline data getting discarded when upgrading from version 2.64.2 or below

  • Resuming offline downloads after upgrading from version 2.64.2 or below

  • Crash during seeking while connecting to Google Cast device

  • `PlayEvent` is fired too late when `PlaybackConfiguration.isAutoplayEnabled` is set to `true`

  • Documentation generation for various types

  • Missing documentation for tvOS only properties

**Deprecated**

  • `HttpRequestType`s constants when used from Swift in favour of the new `HttpRequestType` enum

  • `DownloadFinishedEvent.downloadType` in favour of the new properly typed `requestType` property

**Known Issues**

  • Picture in Picture mode is not working on iOS 14.0 and iOS 14.1

  • Playback gets stuck when playing a Progressive Ad that results in an `AdError`

  • Loading a new \`Source from a PlayerErrorEvent or a SourceErrorEvent does not work

  • Loading a new `Source` from a `PlaybackFinishedEvent` sometimes does not start playback automatically when `PlaybackConfig.isAutoPlayEnabled` is set to `true`

  • When our default Bitmovin Player Web UI is used it can happen that the label of an `AudioTrack` keeps the value of the previous source




## 3.11.0

Released: 2021-12-21

**Changed**

  • Updated Google IMA SDK to latest stable version (3.14.5)

**Fixed**

  • Missing `PlayingEvent` when `SourceOptions.startOffset` is configured and `PlaybackConfiguration.isAutoplayEnabled` is set to `true`

  • Deprecation message pointing to non-existing API for `OfflineManager.isPlayableOffline`

  • Content being paused on Google Cast receiver when sender device gets locked

  • Content being reloaded unnecessarily on Google Cast receiver when sender application is brought back to foreground

**Known Issues**

  • Picture in Picture mode is not working on iOS 14.0 and iOS 14.1

  • Playback gets stuck when playing a Progressive Ad that results in an `AdError`

  • Loading a new \`Source from a PlayerErrorEvent or a SourceErrorEvent does not work

  • Loading a new `Source` from a `PlaybackFinishedEvent` sometimes does not start playback automatically when `PlaybackConfig.isAutoPlayEnabled` is set to `true`

  • When our default Bitmovin Player Web UI is used it can happen that the label of an `AudioTrack` keeps the value of the previous source

  • Already partially downloaded data for offline playback will be lost and has to be re-downloaded after updating from below `2.64.2` to this version




## 3.10.0

Released: 2021-12-07

**Added**

  • `OfflineContentManager` to manage all offline content and offline DRM related tasks for a single `SourceConfig`

  • `OfflineContentManagerListener` to receive updates regarding offline content and offline DRM related tasks

  • `OfflineManager.offlineContentManager(for:)` to retrieve a `OfflineContentManager` instance for a certain `SourceConfig`

  • `OfflineEvent` as parent type for all other events emitted by an `OfflineContentManager`

  • `AvailableTracksFetchedEvent` to get notified when the available tracks were fetched

  • `OfflineContentLicenseExpiredEvent` to get notified when the stored license is expired

  • `OfflineContentLicenseRenewedEvent` to get notified when the license was renewed

  • `ContentDownloadCanceledEvent` to get notified when the content download was cancelled

  • `ContentDownloadResumedEvent` to get notified when the content download was resumed

  • `ContentDownloadProgressChangedEvent` to get notified for every progress change during the content download

  • `ContentDownloadSuspendedEvent` to get notified when the content download was suspended

  • `ContentDownloadFinishedEvent` to get notified when the content download finished successfully

  • `OfflineErrorEvent` to get notified about any error that happened

  • `offlineContentManager(for:id:)` to `OfflineManager` to define a custom unique identifier for `OfflineContentManager`

  • `OfflineContentManager.tweaks` namespace to control tweaks for offline content downloads

  • `OfflineContentManagerTweaksApi.migrateDownload(remoteAssetUrl:resourceIdentifierCallback:)` to enable updating download URL for offline content downloads

**Changed**

  • `AudioAddedEvent`, `AudioChangedEvent` and `AudioRemovedEvent` are now conforming to `SourceEvent` instead of `PlayerEvent`

  • Improved documentation of consequences when enabling/disabling `TweaksConfig.isCustomHlsLoadingEnabled` and `TweaksConfig.isNativeHlsParsingEnabled`

**Removed**

  • Internal types from public documentation

**Fixed**

  • Downloading ClearKey (AES-128) protected content when `SourceConfig.title` is not set

  • Calling `player.audio` or `player.setAudio(trackIdentifier:)` before the source finishes loading blocks the main thread

**Deprecated**

  • All methods on the `OfflineManager` which are `SourceConfig` related. From now on the `OfflineContentManager` should be used

  • `OfflineManagerListener` and all its methods. From now on the `OfflineContentManagerListener` should be used

**Known Issues**

  • Picture in Picture mode is not working on iOS 14.0 and iOS 14.1

  • Playback gets stuck when playing a Progressive Ad that results in an `AdError`

  • Loading a new \`Source from a PlayerErrorEvent or a SourceErrorEvent does not work

  • Loading a new `Source` from a `PlaybackFinishedEvent` sometimes does not start playback automatically when `PlaybackConfig.isAutoPlayEnabled` is set to `true`

  • When our default Bitmovin Player Web UI is used it can happen that the label of an `AudioTrack` keeps the value of the previous source

  • Already partially downloaded data for offline playback will be lost and has to be re-downloaded after updating from below `2.64.2` to this version




## 3.9.2

Released: 2021-11-23

**Fixed**

  • Performance issues on iOS 15 when preloading a playlist with many sources

  • A potential crash on iOS 15 when preloading a playlist with many sources

**Known Issues**

  • Picture in Picture mode is not working on iOS 14.0 and iOS 14.1

  • Playback gets stuck when playing a Progressive Ad that results in an `AdError`

  • Loading a new \`Source from a PlayerErrorEvent or a SourceErrorEvent does not work

  • Loading a new `Source` from a `PlaybackFinishedEvent` sometimes does not start playback automatically when `PlaybackConfig.isAutoPlayEnabled` is set to `true`

  • When our default Bitmovin Player Web UI is used it can happen that the label of an `AudioTrack` keeps the value of the previous source

  • Already partially downloaded data for offline playback will be lost and has to be re-downloaded after updating from below `2.64.2` to this version




## 3.9.1

Released: 2021-11-11

**Fixed**

  • Broken playback of downloaded FairPlay protected content when upgrading from SDK version 2.64.2 or below to v3 or from 3.3.0 or below to v3

**Known Issues**

  • Picture in Picture mode is not working on iOS 14.0 and iOS 14.1

  • Playback gets stuck when playing a Progressive Ad that results in an `AdError`

  • Loading a new \`Source from a PlayerErrorEvent or a SourceErrorEvent does not work

  • Loading a new `Source` from a `PlaybackFinishedEvent` sometimes does not start playback automatically when `PlaybackConfig.isAutoPlayEnabled` is set to `true`

  • When our default Bitmovin Player Web UI is used it can happen that the label of an `AudioTrack` keeps the value of the previous source

  • Already partially downloaded data for offline playback will be lost and has to be re-downloaded after updating from below `2.64.2` to this version




## 3.9.0

Released: 2021-10-12

**Added**

  • `thumbnail(forTime:)` API to `Source` to retrieve thumbnails for non-active sources.

**Fixed**

  • A memory leak inside a `Source` object after it was loaded into a player, which lead to never releasing it

**Known Issues**

  • Picture in Picture mode is not working on iOS 14.0 and iOS 14.1

  • Playback gets stuck when playing a Progressive Ad that results in an `AdError`

  • Loading a new \`Source from a PlayerErrorEvent or a SourceErrorEvent does not work

  • Loading a new `Source` from a `PlaybackFinishedEvent` sometimes does not start playback automatically when `PlaybackConfig.isAutoPlayEnabled` is set to `true`

  • When our default Bitmovin Player Web UI is used it can happen that the label of an `AudioTrack` keeps the value of the previous source

  • Already partially downloaded data for offline playback will be lost and has to be re-downloaded after updating from below `2.64.2` to this version

  • When upgrading to this version, FairPlay protected streams that were downloaded with a version before `2.64.2` for v2 to v3 upgrade or before `3.3.0` for a v3 to v3 upgrade (using `OfflineManager`) are not playable anymore when the device is offline




## 3.8.0

Released: 2021-09-28

**Added**

  • `showTitleInSeekBar` property in the `SystemUserInterfaceConfig` to control the visibility of the title above the seek bar on tvOS 15 and above

**Fixed**

  • Crash when stopping the cast session after a `SourceConfig` was used for loading an asset

**Changed**

  • The documentation for `showSeekBar` and `showInfoViews` on the `SystemUserInterfaceConfiguration` to properly reflect it's behaviour on tvOS 15

**Known Issues**

  • Picture in Picture mode is not working on iOS 14.0 and iOS 14.1

  • Playback gets stuck when playing a Progressive Ad that results in an `AdError`

  • Loading a new \`Source from a PlayerErrorEvent or a SourceErrorEvent does not work

  • Loading a new `Source` from a `PlaybackFinishedEvent` sometimes does not start playback automatically when `PlaybackConfig.isAutoPlayEnabled` is set to `true`

  • When our default Bitmovin Player Web UI is used it can happen that the label of an `AudioTrack` keeps the value of the previous source

  • Already partially downloaded data for offline playback will be lost and has to be re-downloaded after updating from below `2.64.2` to this version

  • When upgrading to this version, FairPlay protected streams that were downloaded with a version before `2.64.2` for v2 to v3 upgrade or before `3.3.0` for a v3 to v3 upgrade (using `OfflineManager`) are not playable anymore when the device is offline




## 3.7.0

Released: 2021-09-14

**Added**

  • `movpkg` to `SourceType` to support playback of local MOVPKG files

  • `provideLicenseData` and `persistLicenseData` to `FairplayConfig` for advanced use-cases and external FairPlay license handling

**Fixed**

  • Seeking backwards within a playlist is never finished on iOS 15

  • `isPlaying` occasionally returned `false` inside an `onPlaylistTransition` listener method

  • Bitmovin Player Web UI occasionally stays visible after a transition to a subsequent source

  • `AirPlayToggleButton` not updating to active state when AirPlay is active

**Changed**

  • The `ad` parameter of the `init` function in the `AdStartedEvent` from Optional to non-Optional

  • `FairplayConfig.certificateUrl` changed from type `URL` to `URL?` to enable advanced FairPlay license handling




## 3.6.1

Released: 2021-08-31

**Fixed**

  • AirPlay playback session is paused when iOS device gets locked

  • Subsequent `Source`s within a playlist don't finish preloading before transitioning on iOS 12

**Changed**

  • Making several `Events` open for extending and changed their initializers to public for better integration support




## 3.6.0

Released: 2021-08-19

**Added**

  • `BitmovinCastManagerOptions` to specify `applicationId`, `namespace` and `enableBackgroundSessions` when initializing `BitmovinCastManager`

  • `BitmovinCastManagerOptions.enableBackgroundSessions` to keep Google Cast sessions active when the app is in background

  • `OfflineConfig` to configure the offline functionality

  • `OfflineConfig.restrictMediaDownloadsToWiFi` to specify if an active WiFi connection is required for downloading media for offline playback

  • `OfflineManager.initializeOfflineManagerWithOfflineConfig` to set the `OfflineConfig`

  • `OfflineManager.isOfflineManagerInitialized` to check if the shared instance is already initialized

  • `restrictMediaDownloadsToWiFi` property on `OfflineManager` to specify if an active WiFi connection is required for downloading media for offline playback

  • `OfflineManagerDelegate` which will act as the delegate for `OfflineManager`

  • `areSuspendedDownloadsRestored` property on `OfflineManager` to specify if the `OfflineManager` has finished restoring suspended downloads

**Deprecated**

  • `BitmovinCastManager.initializeCasting(applicationId:)` and `BitmovinCastManager.initializeCasting(applicationId:messageNamespace:)` in favor of `BitmovinCastManager.initializeCasting(options:)`

**Fixed**

  • Offline FairPlay license renewal and synchronization

  • Failing offline playback for assets with dual-expiry FairPlay licenses

  • Removed internal types from public documentation




## 3.5.0

Released: 2021-08-03

**Added**

  • `OfflineAudioTrack` model that represents audio track for offline download

  • `audioTracks` property to `OfflineTrackSelection` for selecting audio tracks to download for offline playback

**Fixed**

  • Different text size between single-line and multi-line subtitles when using Bitmovin Player Web UI

**Changed**

  • Make `AdErrorEvent` open

  • Rename `DRMConfig` to `DrmConfig` to follow CamelCase style

  • Rename `DRMSystems` to `DrmSystems` to follow CamelCase style




## 3.4.0

Released: 2021-07-20

**Added**

  • `showSeekBar` and `showInfoViews` properties in `SystemUserInterfaceConfig` for `tvOS` to control UI elements' visibility

  • Support to call `OfflineManager.usedStorage(for:)` during ongoing downloads to keep track of disk storage used

**Changed**

  • The parent type of `DrmDataParsedEvent` from `PlayerEvent` to `SourceEvent`

  • `DrmDataParsedEvent` to be emitted for inactive sources in a playlist when DRM data is parsed for HLS content

**Fixed**

  • No audio on playback when there is no default audio track defined in the asset

  • Unexpected `TimeChanged` events when calling play right after the `PlaybackFinished` event

  • Online playback occasionally not starting for AES-128 protected streams

  • `StallingEnded` event being emitted after `Playing` event

  • Unexpected `MetadataEvent`s for SCTE tags during seeking

**Deprecated**

  • Deprecated `RenderFirstFrameEvent` as this event is never emitted




## 3.3.0

Released: 2021-06-22

**Added**

  • `MetadataParsedEvent` to be emitted for inactive sources in a playlist when Daterange metadata is parsed for HLS content

**Changed**

  • The parent type of `MetadataParsedEvent` from `PlayerEvent` to `SourceEvent`.

**Fixed**

  • Issue that `SourceConfig`s that are not downloaded for offline playback were marked as already downloaded.

  • Offline playback of AES-128 encrypted HLS content when only a variant playlist is used

  • Removed internal extensions from public documentation




## 3.2.0

Released: 2021-06-08

**Added**

  • HTTP response status code to `SourceErrorEvent.data` for failed DRM requests




## 3.1.0

Released: 2021-05-26

**Added**

  • `isAirPlayEnabled` property in `RemoteControlConfig` to enable or disable the AirPlay functionality

  • HTTP response status code to `SourceErrorEvent.data` for failed DRM requests

**Fixed**

  • Incorrect value of `isPlaying` and `isPaused` inside the Bitmovin Player Web UI when the `PlaybackFinishedEvent` is received.




## 3.0.1

Released: 2021-05-11

**Changed**

  • A `StallStartedEvent` will now be emitted after a `SeekedEvent` and `TimeShiftedEvent` if the seek or timeShift results in stalling

**Fixed**

  • Crash when destroying player during ad playback

  • No stalling indicator visible when stalling is in progress when transitioning from one Source to another happens

  • Incorrect `Source.loadingState` when the following event listeners were called: `SourceLoad` / `SourceLoaded` / `SourceUnload` / `SourceLoaded`

  • Additional `SourceLoaded` events when a `Source` already finished preloading during playback of the previous `Source`

  • Player is returning data from the previous source inside the `PlaylistTransitionEvent` (e.g. `Player.availableAudio`, `Player.availableSubtitles`)




## 3.0.0

Released: 2021-04-27

**Added**

  • Native support for running the SDK on iOS/tvOS simulators on `Apple Silicon`

  • `Player` protocol, which replaces the `BitmovinPlayer` as the main player type

  • `PlayerFactory` to create `Player` instances

  • `Source` protocol as top-level type

  • `SourceFactory` to create `Source` instances

  • `SourceState` indicating the current state of a Source

  • `Player.source` that returns the currently active source

  • `Player.load(source:)` to load a single `Source`

  • `PlaylistConfig` to configure playback of multiple sources

  • `PlaylistOptions` to customize additional playlist behaviour

  • `Player.playlist` namespace to control playback of multiple sources

  • `Player.load(playlistConfig:)` to load multiple Sources

  • `Player.registerPlayerLayer` for custom native UI support using an `AVPlayerLayer`

  • `Player.registerPlayerViewController` for custom native UI support using an `AVPlayerViewController`

  • `Player.registerAdContainer` for custom native UI support to register the container view which should be used for Ad rendering

  • `TweaksConfiguration.seekToEndThreshold` to configure the threshold when seeking to the end in seconds

  • The sender to the each `PlayerListener` method to distinguish which `Player` emitted an event

  • Events

    • `PlaybackTransitionEvent` to indicate a transition from one `Source` to another

    • `PlayerActiveEvent` to indicate the player got a source to load

    • `PlayerInactiveEvent` to indicate when a player does not have any source anymore

**Fixed**

  • `AdaptationConfig` and `NetworkConfig` not extending `Config`

  • `CloseButton` of the `SettingsPanel` sliding out of Safe Area in Bitmovin Player Web UI v3

  • Subtitles are rendered very close to the bottom Safe Area in Bitmovin Player Web UI v3

**Changed**

  • The `BitmovinPlayer` framework is now shipped as `XCFramework`

  • All `Configurations` were renamed to `Config`

  • `DurationChangedEvent` is no longer fired initially

  • Renamed `SourceItem` to `SourceConfig`

  • Renamed `SourceItem.itemTitle` to `SourceConfig.title`

  • Renamed `SourceItem.itemDescription` to `SourceConfig.sourceDescription`

  • Removed `SourceConfig.drmConfigs` and introduced `SourceConfig.drmConfig` to only handle a single `DrmConfig`

  • Removed `SourceConfig.progressiveSources` and introduce `SourceConfig.progressiveSource` to only handle a single `ProgressiveSource`

  • `SourceConfig.options` is no longer an optional type

  • Renamed `BitmovinPlayerView` to `PlayerView`

  • Moved `Player.sourceMetadata` to `Source.metadata`

  • Removed `BMP` prefix from all public types used from `Swift`

  • Increased minimum required `Google Cast SDK` version to `4.4.1+`

  • Renamed `MediaSourceType` to `SourceType`

  • Rewrote all abbreviations and acronyms to follow CamelCase style

  • Renamed `RemoteControlAPI` to `RemoteControlApi`

  • Renamed `UserInterfaceAPI` to `UserInterfaceApi`

  • CAF is now used as the default cast receiver

  • Bitmovin Player Web UI v3.25.0 is now used as the default UI

**Removed**

  • `Player.setup` - Pass the `PlayerConfig` to the `PlayerFactory` instead

  • `PlayerConfig.sourceConfig` - Loading a source from the `PlayerConfig` is no longer supported

  • `ConfigurationUpdatedEvent`

  • `PlayerView` - The `BitmovinPlayerView` from v2 became the new `PlayerView`

  • `PlaybackType`

  • `SourceConfig.drmConfigs`

  • `SourceConfig.add(drmConfig:)`

  • `Player.streamType` - Use `SourceConfig.type` instead

  • `Jsonable` implementation

  • All non is\* boolean properties on the API when used from ObjC

  • `Player.preload`

  • iOS/tvOS 10 Support

  • iOS/tvOS 11 Support

  • Support for non CAF Cast Receivers

  • Support for Bitmoivn Player Web UI v2

**Deprecated**

  • Deprecated `MediaSource`, `AdaptiveSource`, `HlsSource`, `ProgressiveSource` and `DashSource`. `SourceConfig` should instead be constructed using an url and the according `SourceType`




## 2.64.1

Released: 2021-05-26

**Fixed**

  • Incorrect value of `isPlaying` and `isPaused` inside the Bitmovin Player Web UI when the `PlaybackFinishedEvent` is received




## 2.64.0

Released: 2021-04-27

**Added**

  • Support for side-loaded `SubtitleTrack`s when casting to a v3 (CAF) receiver

  • `UserInterfaceAPI.scalingMode` to dynamically get or set `BitmovinPlayerView`'s `ScalingMode`

  • `ScalingModeChangedEvent` to be emitted when `BitmovinPlayerView.scalingMode` changed

  • `SystemUserInterfaceConfiguration#hideFirstFrame` to prevent rendering of the first video frame before playback starts when the system UI is used

**Fixed**

  • Unexpected `TimeChangedEvent` is emitted between `PlayEvent` and `PlayingEvent`




## 2.63.0

Released: 2020-04-13

**Added**

  • `TweaksConfiguration.playbackStartBehaviour` to configure the player behaviour when `Player.play` is called

  • `TweaksConfiguration.unstallingBehaviour` to configure the player behaviour when stalling should be exited

**Fixed**

  • Local playback starts in addition to remote playback when joining an existing Google Cast session with `PlaybackConfiguration.isAutoplayEnabled` set to `true`




## 2.62.0

Released: 2021-03-30

**Added**

  • Properties `sendManifestRequestsWithCredentials`, `sendSegmentRequestsWithCredentials` and `sendDrmLicenseRequestsWithCredentials` to the `RemoteControlConfiguration` to control cookies and credentials on requests made on Chromecast CAF (v3) receivers

**Changed**

  • Type of `AdSurvey.uri` from `URL` to `String` (see the ### Fixed section for more details)

**Fixed**

  • Crash if an `AdSurvey` URL in `VAST` ad tag contains invalid characters.




## 2.61.1

Released: 2021-03-16

**Fixed**

  • Missing seekbar when joining an existing Google Cast session

  • Live stream starting at wrong playback position when casting

  • Current time is not updating when joining a cast session while remote playback is paused

  • Seek bar is jumping when seeking on the sender device while casting

  • Incorrect values on `CastTimeUpdatedEvent` when casting to a V2 receiver

  • `isMuted` returning wrong value when calling `mute` before `load`

  • Ad playback does not respect muted state of the player when changed before `load`




## 2.61.0

Released: 2021-03-02

**Added**

  • `PlaybackConfiguration.isPictureInPictureEnabled` to enable/disable Picture-In-Picture support

  • Picture-In-Picture support with BitmovinPlayer UI

**Fixed**

  • Missing events when casting to a V2 receiver

  • `TimeChanged` events before `StartOffset` is applied




## 2.60.1

Released: 2021-03-02

**Fixed**

  • Missing events when casting to a V2 receiver




## 2.60.0

Released: 2021-02-16

**Added**

  • Support for `ControlsShow` and `ControlsHide` events on tvOS when the system UI is used

  • `LiveConfiguration` to configure live-stream specific settings

  • `LiveConfiguration#minTimeshiftBufferDepth` to specify a threshold when `timeShift` should be possible

**Changed**

  • Exclude BitmovinPlayer SDK from arm64 simulator builds when integrated via CocoaPods.

**Fixed**

  • Missing payload values on `Metadata` and `MetadataParsed` events for SCTE tags containing a `=` sign




## 2.59.1

Released: 2021-03-02

**Fixed**

  • Missing events when casting to a V2 receiver




## 2.59.0

Released: 2021-01-19

**Changed**

  • `metadata` property from the `SourceItem` is automatically passed to CAF (v3) receivers whenever the source is loaded

**Fixed**

  • Duplicated `Metadata` and `MetadataParsed` events for SCTE tags

  • `isBackgroundEnabled` not respected for audio-only assets

**Known issues**

  • Picture in Picture mode (on System UI) is not working on iOS 14.0 and iOS 14.1

**Removed**

  • Internal type from online documentation




## 2.58.0

Released: 2020-12-22

**Changed**

  • `Player.currentTime` and `Player.duration` during ad playback now return current time and duration of the currently playing ad

  • `onPause`, `onPlay`, `onPlaying` and `onTimeChanged` events are now also emitted during IMA ad playback

**Fixed**

  • Stuck playback when loading an IMA Playlist or a VMAP containing an empty tag

  • Duplicated `onPlay` and `onPlaying` events when VMAP ads are started




## 2.57.1

Released: 2020-12-09

**Fixed**

  • Values returned via `PlayerAPI.isPlaying` and `PlayerAPI.isPaused` when the player is stalled

  • Missing `onTimeChanged` events when external playback (e.g. AirPlay) was started during playback

  • Scheduling ads into live-streams results in ads not being played

**Removed**

  • Internal type from online documentation




## 2.57.0

Released: 2020-11-24

**Added**

  • `beforeInitialization` callback to the `AdvertisingConfiguration` to allow customization of `IMASettings`

  • `disableSubtitleTracksWhileSeeking` property to the `TweaksConfiguration` for temporarily disabling selected subtitle track while seeking to avoid `AVPlayer` getting stalled permanently with assets having conflicting information about subtitle track duration

**Fixed**

  • Missing `onPlaying` event when play was called during stalling

  • Local UI getting reset when connecting or disconnecting to a Chromecast device

  • Crash if the license key was only configured via the `PlayerConfiguration`

**Removed**

  • Internal logging being exposed in release builds




## 2.56.0

Released: 2020-11-10

**Added**

  • Support for controlling audio tracks when using a CAF (v3) receiver

**Fixed**

  • Invalid URL generation for backup manifest URLs, leading to playback failures

  • Background playback on iOS 14.2+ devices

**Removed**

  • Internal types from online documentation




## 2.55.0

Released: 2020-10-27

**Added**

  • `onAdsManagerAvailable` callback to `AdvertisingConfiguration` to give access to the `IMAAdsManager` currently in use once it becomes available

  • `Id3Metadata`, now also holding `startTime` property

  • `startTime` to `ScteMetadata`

  • Support for subtitles loaded from manifest when using a CAF (v3) receiver

**Fixed**

  • Inconsistent and jumping `timeShift` values while playing back live-streams




## 2.54.1

Released: 2020-10-13

**Fixed**

  • Offline playback on iOS 12 and below did not work for certain streams




## 2.54.0

Released: 2020-10-13

**Changed**

  • Increased minimum deployment target to iOS 10 and tvOS 10

**Fixed**

  • Background playback on iOS 14

  • Stability of `onPlay`, `onPlaying` and `onPause` events by relying on `AVPlayer.timeControlStatus` instead of `AVPlayer.rate`

**Removed**

  • Support for building for iOS 9 and tvOS 9 in order to ensure stability of `onPlay`, `onPlaying` and `onPause` events




## 2.53.0

Released: 2020-09-29

**Added**

  • `DrmDataParsedEvent` which is fired when `EXT-X-KEY` information is found in a manifest for FairPlay protected streams. `TweaksConfiguration.isNativeHlsParsingEnabled` needs to be set to `true` to receive those events.

  • `DrmRequest` as subclass of `HttpRequest` in order to expose FairPlay key request data to the `PreprocessHttpRequestDelegate`

**Changed**

  • Improved HLS parsing performance when `PlayerConfiguration.tweaksConfiguration.isNativeHlsParsingEnabled` is enabled

**Fixed**

  • Crash when `PlayerConfiguration.tweaksConfiguration.isNativeHlsParsingEnabled` is enabled and `EXT-X-KEY` tags are present

  • Crash when `PlayerConfiguration.tweaksConfiguration.isNativeHlsParsingEnabled` is enabled and `SCTE35` tags are present

  • Downloading an asset resulted in only main tracks being downloaded on iOS 14

  • Offline download did not resume after application gets killed before main tracks were downloaded




## 2.52.1

Released: 2020-09-17

**Fixed**

  • Invalid value reported for offline download progress on iOS 14 devices for some assets

  • Inconsistent offline download progress distribution when downloading only specific subtitle tracks

  • Crash when passing a `SourceConfiguration` without a `SourceItem` to the load call




## 2.52.0

Released: 2020-09-15

**Added**

  • CAF (v3) sender with basic media controls

  • Support for DRM protected content when casting to CAF (v3) receiver

  • `BitmovinCastManager.send(metadata:)` for sending custom metadata to the cast receiver

  • `PlayerAPI.load(sourceItem:)` to load a `SourceItem` directly

  • `PlaylistApi` to control playlist workflow. Accessible via `PlayerAPI.playlist`

  • `PlaylistConfiguration` to configure the playlist feature

  • `PlayerAPI.load(playlistConfiguration:)` to load a playlist

  • `PlayerAPI.load(sourceItem:)` to load a single source

**Changed**

  • Update Google IMA SDK to latest stable version (3.12.1)

**Deprecated**

  • `BitmovinCastManager.initializeCasting(applicationId:messageNamespace:)` in favor of `BitmovinCastManager.initializeCasting(applicationId:castReceiverVersion:messageNamespace:)`

  • `PlayerApi.load(sourceConfiguration:)` in favor of `PlayerAPI.load(sourceItem:)`

**Removed**

  • Support for Google IMA SDK below version 3.12.1




## 2.51.1

Released: 2020-09-01

**Changed**

  • Make `playerUiCss`, `supplementalPlayerUiCss` and `playerUiJs` of `BMPStyleConfiguration` unavailable on tvOS

**Fixed**

  • Replaying a source while casting (after playback has finished) did not work




## 2.51.0

Released: 2020-08-18

**Added**

  • `isDestroyed` property to `BMPBitmovinPlayer`

  • Support for VTT positioning for subtitle tracks which are present in the manifest in combination with our v3 Web-UI (required version > `v3.16.0`)

  • `BMPVttProperties` to `BMPCue` and `BMPCueEvent`

**Changed**

  • Modernizing our SDK requires the type `BitmovinPlayer` being renamed to `Player` to avoid a known [Swift limitation](🔗) due to name collision with the module name. To handle the breaking change as smooth as possible we suggest defining a `typealias` (`typealias BitmovinPlayer = Player`) as a top level declaration in any Swift file in the affected target.

  • `Xcode 11.4` or newer is required to integrate the SDK

  • Types prefixed with `_` are subject to change and not intended to be used outside of the SDK




## 2.50.0

Released: 2020-08-05

**Fixed**

  • Main content (video and audio) occasionally being perceivable before a pre-roll ad when `autoplay` was enabled even though `hideFirstFrame` was set to `true` in `BMPBitmovinUserInterfaceConfiguration`

**Changed**

  • `Google IMA SDK` does not need to be linked anymore to enable progressive ad playback




## 2.49.1

Released: 2020-08-04

**Fixed**

  • Possible incorrect event ordering in case a post-roll ad is configured




## 2.49.0

Released: 2020-07-21

**Added**

  • Picture In Picture support while background playback is enabled

  • Support for progressive video ads. They can be served from the network or from the device storage which enables basic offline ad support. To schedule progressive video ads, `BMPAdSourceTypeProgressive` should be used for the according `BMPAdSource`

  • `BMPAdSourceTypeProgressive`

**Fixed**

  • Replacing the player on the `BitmovinPlayerView` would result in inconsistent UI behaviour

  • Inconsistent subtitle styling in landscape if Bitmovin Player UI v3 was used

  • Missing `onSubtitleChanged` event when subtitles are switched via `PlayerAPI.setSubtitle(trackIdentifier:)` and via System UI consecutively

  • Disabling subtitles during casting does not work

  • Possible memory leak when scheduling Ads

  • Invalid progress calculation when downloading content for offline playback

## [2.48.0]

**Added**

  • Support for configuring external playback mode while mirroring via AirPlay by setting `usesExternalPlaybackWhileExternalScreenIsActive` within `RemoteControlConfiguration`

## [2.47.0]

**Added**

  • Possibility to select text tracks to be downloaded or ignored for offline playback




## 2.46.1

Released: 2020-06-09

**Fixed**

  • Missing `onSubtitleChanged` event when subtitles are switched via System UI

  • Empty thumbnail preview on `tvOS` when `EXT-X-I-FRAME-STREAM-INF` playlists are referenced with relative URLs

  • Missing metadata events for consecutively loaded sources

  • Missing metadata events on stream start-up due to race condition




## 2.46.0

20202-05-26

**Added**

  • `BMPAdManifestLoadEvent`, which is triggered when the download of an ad manifest starts

  • `BMPDownloadConfiguration.tweaksConfiguration` along with `DownloadTweaksConfiguration.shouldInsertPlaylistTypeTagIfMissing` to ensure offline playback of VOD content where the `EXT-X-PLAYLIST-TYPE` tag is missing

**Fixed**

  • Missing `BMPMetadataEvent`s for live streams

**Changed**

  • Update Google IMA SDK to latest stable version (3.11.4)

**Removed**

  • Support for Google IMA SDK below version 3.11.1




## 2.45.0

Released: 2020-05-12

**Added**

  • `BMPDownloadConfiguration` along with `BMPOfflineManager.download(sourceItem:downloadConfiguration:)` to allow configuring content downloads for offline playback

  • Support for offline playback of AES-128 encrypted HLS content. Set `BMPDownloadConfiguration.supportClearKeyContent` to enable it when downloading AES-128 encrypted content

  • `PlayerConfiguration.key` to be able to overwrite the Bitmovin license key that is stated in the `Info.plist`. This enables using different player instances with different license keys.

**Changed**

  • Reduced time needed to parse huge M3U8 playlists

**Deprecated**

  • `BMPOfflineManager.download(sourceItem:minimumBitrate:)` in favor of `BMPOfflineManager.download(sourceItem:downloadConfiguration:)`




## 2.44.0

Released: 2020-04-14

**Added**

  • Support for Chapter Markers on `tvOS`. These can be set via `BMPSourceItem.metadata` by setting an array of `AVNavigationMarkersGroup` using the `BMPMetadataIdentifierNavigationMarker` identifier.

**Fixed**

  • HLS master playlist is no longer being downloaded twice

**Changed**

  • `PlayerAPI.videoQuality` now returns `nil` instead of a default quality with `0` values for variant playlist only sources

  • `PlayerAPI.availableVideoQualities` is now empty for variant playlist only sources




## 2.43.0

Released: 2020-03-31

**Added**

  • `BMPImaAdData.traffickingParameters` to provide trafficking parameters associated with an ad when using the IMA SDK

**Fixed**

  • Potential crash when delivering the `BMPAdStartedEvent`




## 2.42.0

Released: 2020-03-16

**Added**

  • Support for forced subtitles

**Fixed**

  • Potential missing initial `SubtitleChanged` event if no default or forced subtitle is present




## 2.41.0

Released: 2020-03-02

**Added**

  • `BMPSourceItem.options` to configure a custom `startOffset`

**Changed**

  • Live-streams without a `EXT-X-START` tag will no longer start at the live-edge. Per default it will start at the point in time where the stream was loaded into the player (this is the default behaviour of `AVPlayer`). To always start at the live-edge make sure to enable `autoplay` or make use of the new `BMPSourceOptions.startOffset` configuration.

**Fixed**

  • `EXT-X-START` was not respected correctly




## 2.40.0

Released: 2020-02-17

**Added**

  • `BMPBitmovinUserInterfaceConfiguration#hideFirstFrame` to prevent rendering of the first video frame before playback starts

  • `AdBreakStarted` and `AdBreakFinished` events now include information about the related AdBreak

  • `AdStarted`, `AdFinished` and `AdSkipped` events now include information about the related Ad

  • `AdError` event now includes the AdConfiguration that caused the error, if this information is available

  • `AdManifestLoaded` event after an ad manifest has finished downloading, which includes information about the download timing and the AdBreak, or the AdConfiguration for ad tags that do not result in an AdBreak like VMAP tags

  • `AdQuartile` event contains information about triggered quartile

**Fixed**

  • Seekbar position marker not updating while casting

**Changed**

  • The poster image now hides on `playing` instead of `play`




## 2.39.0

Released: 2020-02-03

**Added**

  • Support for side-loaded `VTT` subtitles in combination with our Bitmovin UI by providing them via `BMPSubtitleTrack`s on the `BMPSourceItem`




## 2.38.0

Released: 2020-01-20

**Added**

  • `customHlsLoadingEnabled` property to the `TweaksConfiguration` to disable custom HLS playlist loading. I.e. if disabled, the playlists will be loaded by the `AVFoundation` framework instead of the Bitmovin Player




## 2.37.0

Released: 2019-12-18

**Added**

  • API call to get `currentTime` either as `relative` or `absolute` value in case of live-streams




## 2.36.1

Released: 2019-12-11

**Fixed**

  • No inband caption rendering if `BMPBitmovinPlayerView` is used with user interface type `system`




## 2.36.0

Released: 2019-12-09

**Added**

  • Warning if `#EXT-X-PLAYLIST-TYPE` tag is not present in a variant playlist

**Fixed**

  • Potential crash if the `BMPBitmovinPlayerView` is created for an active player

**Changed**

  • Documentation for `OfflineManager#createSourceItemForSourceItem:restrictedToAssetCache:` is now reflecting prerequisites if DRM protected content is used.




## 2.35.1

Released: 2019-11-20

**Fixed**

  • Wrong character encoding of Bitmovin Player UI

  • Live streams not starting on the live edge




## 2.35.0

Released: 2019-11-11

**Added**

  • Buffer API implementation to provide information about available buffer

**Changed**

  • Whenever an additional sender wants to connect to an already running cast session, the according receiver app gets restarted.

**Fixed**

  • Manifest loading for certain SSAI streams

  • Not updating Bitmovin Player UI V3 during casting.

  • Potentially incorrect asset download state after app was killed and restarted while downloading




## 2.34.0

Released: 2019-10-28

**Fixed**

  • Wrong timing of `onControlsHide` event

  • `-12645` system error when trying to play offline content

**Changed**

  • The system's default subtitle selection is now respected if no default track is present in the manifest




## 2.33.0

Released: 2019-10-14

**Fixed**

  • Touching the live button (or duration label) results in UI staying visible

**Changed**

  • Update Bitmovin Player UI to version 2.22.1.




## 2.32.1

Released: 2019-10-09

**Added**

  • Support for parsing URL parameters of multiple `#EXT-X-KEY` tags

**Fixed**

  • Crash while parsing `#EXT-X-KEY` tag with `METHOD=NONE`




## 2.32.0

Released: 2019-09-30

**Added**

  • `timeChangedInterval` to `BMPTweaksConfiguration` to specify how frequent an `TimeChangedEvent` should be fired




## 2.31.0

Released: 2019-09-16

**Added**

  • Convenience method `BitmovinCastManager`.`sendMessage` for sending messages to the cast receiver

**Fixed**

  • No variant playlist parsing when the master manifest was redirected

  • ClearKey (AES-128) streams not playing

**Changed**

  • Timing of impression tracking




## 2.30.0

Released: 2019-09-02

**Added**

  • Send `BMPDownloadFinishedEvent` also for playlist downloads

  • Property `lastRedirectLocation` to the `BMPDownloadFinishedEvent`

  • Update Google Cast SDK to latest stable version (4.4.4)

  • Update Google IMA SDK to latest stable version (3.9.2)

  • Support to set custom artwork data when downloading assets to show up in "Review Downloaded Videos"

  • Include `BMPSourceItem#metadata` attribute when sending the source to the cast device

**Fixed**

  • Missing hour representation in Bitmovin Player UI v3

  • Unloading of currently playing ad when player is destroyed

  • Redirected master manifest requests are now handled properly




## 2.29.2

Released: 2019-08-19

**Fixed**

  • Possible runtime crash caused by incorrect thread handling

  • Download percentage calculation when app is terminated and restarted while downloads are running




## 2.29.1

Released: 2019-08-13

**Fixed**

  • Pass current timeshift value via `source.options` to the cast receiver app even when the cast source is configured via `prepareSource`




## 2.29.0

Released: 2019-08-05

**Added**

  • Error propagation when DRM license key could not be persisted

  • Pass current timeshift value via `source.options` to the cast receiver app when starting a cast session

**Fixed**

  • `SubtitleSelectBox` not updating in Web UI v3 when changing the subtitles via `setSubtitle` API method

  • `AudioTrackSelectBox` was missing when using the Bitmovin Web UI v3

  • Multiple `MetadataParsed` events for the same SCTE tag




## 2.28.3

Released: 2019-08-01

**Added**

  • Retry logic for failed requests when downloading thumbnail images for offline playback

**Fixed**

  • False error state when `NSURLSession` delegate has been called multiple times for the same asset download




## 2.28.2

Released: 2019-07-22

**Fixed**

  • Stuck background download tasks of thumbnails under certain circumstances




## 2.28.1

Released: 2019-07-11

**Fixed**

  • Background download of thumbnails

  • Display of thumbnails when WebVTT file doesn't include coordinates




## 2.28.0

Released: 2019-07-08

**Added**

  • `BMPTweaksConfiguration` to apply preset tweaks to the `BitmovinPlayer`

  • Possibility to communicate between a custom Bitmovin Player UI and the native environment by using a `CustomMessageHandler` which can be set on the `BitmovinUserInterfaceConfiguration`.

  • EXT-X-SCTE35 Tags Support

**Fixed**

  • Downloading a source with minimum bitrate also downloads the highest rendition for non-muxed streams




## 2.27.0

Released: 2019-06-11

**Added**

  • Possibility to synchronize expiration dates for an offline DRM license

**Fixed**

  • `SourceError` when trying to play back an offline asset after license has been renewed.




## 2.26.1

Released: 2019-05-16

**Fixed**

  • Downloading a `SourceItem` with provided minimum bitrate




## 2.26.0

Released: 2019-05-13

**Fixed**

  • (De-)Serialization of Widevine DRM headers

  • Offline thumbnail scrubbing for independent images




## 2.25.0

Released: 2019-05-02

**Fixed**

  • Notification handling if system storage runs out of space during download

  • `BMPBitmovinPlayer` returned wrong states for `isPlaying`, `isPaused` and `isMuted` if an ad was playing.

  • Resuming the download of an asset after the app was killed




## 2.24.0

Released: 2019-04-17

**Added**

  • AirPlay icon within the default Bitmovin UI




## 2.23.1

Released: 2019-04-12

**Fixed**

  • Set volume level and mute state also for the currently playing ad and not just for queued ads




## 2.23.0

Released: 2019-04-08

**Added**

  • API call to the `BMPOfflineManager` to renew an offline DRM license

  • Error in case an DRM certificate request fails

**Fixed**

  • Downloading a source after it was deleted previously




## 2.22.0

Released: 2019-04-03

**Added**

  • Codec property to the quality model classes (`BMPVideoQuality`, `BMPAudioQuality`)




## 2.21.0

Released: 2019-03-20

**Added**

  • `prepareLicenseServerUrl` callback to the `BMPFairplayConfiguration` to manipulate license request URIs.

  • API call `currentVideoFrameRate` to fetch the currently playing video frame rate from the player.

  • Ability to integrate frameworks via Carthage. Read more on how to get started with it [here](🔗).

  • Bitmovin UI v3 support

**Changed**

  • For live streams, `currentTime` now returns the current playback time as a Unix timestamp.




## 2.20.0

Released: 2019-03-07

**Added**

  • `ErrorEvent` from the `OfflineContentManager` when the download fails due to insufficient storage

  • Chromecast button to Bitmovin UI

  • API call `usedStorageForSourceItem:` on `BMPOfflineManager` to check the used disk space for a specific offline source item

**Fixed**

  • TimeShift behavior when casting a live stream

  • Mutated while being enumerated exception when initializing `BitmovinPlayerView`




## 2.19.0

Released: 2019-02-20

**Added**

  • Support for timed `onMetadata` events for `EXT-X-DATERANGE` metadata contained in HLS manifests

  • Support for offline thumbnail scrubbing

  • Error event if player item fails to play to end

**Fixed**

  • Unmute via the UI did not unmute the player

  • Wrong `seekTarget` values in `SeekEvent` when using `BMPUserInterfaceTypeSystem`

  • Provide overall download progress for a single source item instead of reporting the progress of its sub-tasks.

  • Jumping scrubber in the Bitmovin Player UI for live streams when autoplay is enabled




## 2.18.0

Released: 2019-02-06

**Added**

  • `setSubtitleStyles` API call to `BitmovinPlayerView` to allow changing subtitle styles during playback

  • Explicit reporting of DRM license errors

  • A flag to the `BMPSystemUserInterfaceConfiguration` to enable/disable the 'Auto' subtitle option on tvOS.

**Fixed**

  • `onSubtitleChanged` event was never fired on tvOS




## 2.17.0

Released: 2018-01-24

**Added**

  • `onPlaying` event listener in combination with `BMPPlayingEvent` to `BMPPlayerListener`

  • `onMetadataParsed` with corresponding `BMPMetadataParsedEvent`

  • Support for `EXT-X-DATERANGE` tags in HLS manifests

  • `onAirplayChanged` event listener to get notified when an AirPlay session starts or ends

  • `sourceMetadata` API call to `BitmovinPlayer` to allow setting/changing source related metadata during playback

**Fixed**

  • Ad events not being fired if multiple ad breaks are scheduled at the same position

  • Support any metadata of type `AVMetadataItem` for the `BMPSourceItem`




## 2.16.0

Released: 2018-12-21

**Added**

  • Thumbnail support to the `BitmovinPlayer`

  • Support of local certificate URLs for FairPlay streaming

  • Property `scalingMode` to `BMPStyleConfiguration` to control scaling/stretching of video content

  • Property `userInterfaceConfiguration` to `BMPStyleConfiguration` to allow user-interface specific style configurations

  • Property `metadata` to `BMPSourceItem` to allow setting metadata on the source item

**Fixed**

  • Documentation of `BMPSourceItem#progressiveSources`

  • Broken local Web-UI when casting live streams




## 2.15.0

Released: 2018-11-29

**Added**

  • Official support for iOS Cast Sender SDK 4.3.3

  • `BMPAdSourceTypeUnknown` to `BMPAdSourceType` enum

**Changed**

  • Property `clickThroughUrl` is now optional when instantiating `BMPAdStartedEvent`

**Fixed**

  • `BMPDestroyEvent` does not get fired

  • Indirect retain-cycle between `BitmovinPlayer` and `BitmovinPlayerView` when IMA ad integration is used




## 2.14.0

Released: 2018-11-15

**Added**

  • Warning events are delivered to the `onWarning` event listener method in the `PlayerListener` protocol.

**Fixed**

  • Player continues playback after it was destroyed




## 2.13.3

Released: 2018-11-01

**Fixed**

  • Crash when using latest Google Cast sender library version 4.3.3 in production application




## 2.13.2

Released: 2018-10-25

**Added**

  • Missing documentation for configuration classes

  • Support for FairPlay Key Rotation

**Fixed**

  • Web UI is rendered in an incorrect state when a `BitmovinPlayer` instance is attached to a `BitmovinPlayerView` after playback has started




## 2.13.1

Released: 2018-10-10

**Fixed**

  • Web UI breaks after system picker view was shown on iOS 12 +




## 2.13.0

Released: 2018-10-09

**Added**

  • First version of CHANGELOG.md

  • Support for image subtitles in Bitmovin UI

  • Support for custom receiver configuration values (key/value pairs) within the `RemoteControlConfiguration`

  • `DownloadFinishedEvent` for DRM license request and DRM certificate requests

**Changed**

  • Updated to web UI version 2.19.0