Release Notes (iOS)

Release notes for the v2 version of the iOS SDK can be found here.


3.57.2

Released: 2024-03-22

Fixed

  • Potentially missing SeekedEvent when seeking rapidly after each other across sources

3.57.1

Released: 2024-03-14

Changed

  • Updated documentation on BitmovinCastManagerOptions.enableBackgroundSessions behavior

Fixed

  • Invalid current time displayed on the Player UI when entering and leaving background mode during casting

3.57.0

Released: 2024-03-08

Changed

  • SourceConfig.metadata and Source.metadata now accepts AVMetadataItem values on iOS and visionOS as well
  • Improved documentation on Player.maxSelectableBitrate scope

3.56.3

Released: 2024-03-04

Fixed

  • Duplicated ScalingModeChangedEvent delivered when using System UI
  • Subtitle track selection not working while casting when deselecting and reselecting the same track

3.56.2

Released: 2024-02-19

Fixed

  • Potential crash when an IMA Ad results in an error

3.56.1

Released: 2024-02-16

Fixed

  • AdStartedEvent.skipOffset is now correctly populated
  • Potential crash when calling Player.load

3.56.0

Released: 2024-02-09

Added

  • ImaAdsManager.clicked() to perform a clickthrough on the advertisement in case the IMA UI was disabled
  • New top level factory functions for Player:
    • PlayerFactory.createPlayer(playerConfig:, analytics:) to create a Player instance
    • AnalyticsPlayerConfig to configure analytics data collection on Player instances
    • PlayerCoreFactory.createPlayer(playerConfig:) to create a Player instance in case of standalone Player Core usage
  • New top level factory functions for Source:
    • SourceFactory.createSource(sourceConfig:, sourceMetadata:) to create a Source instance

Changed

  • The minimum BitmovinPlayerCollector version to 3.4.0

Deprecated

  • PlayerFactory.create(playerConfig:, analyticsConfig:, defaultMetadata:) in favor of PlayerFactory.createPlayer(playerConfig:analytics:)
  • PlayerFactory.create(playerConfig:) in favor of PlayerFactory.createPlayer(playerConfig:). In case of standalone Player Core usage, update to PlayerCoreFactory.createPlayer(playerConfig:)
  • SourceFactory.create(sourceConfig:, sourceMetadata:) in favor of SourceFactory.createSource(sourceConfig:, sourceMetadata:)

3.55.0

Released: 2024-01-26

Added

  • Support for side-loaded SRT (SubRip) subtitles

3.54.0

Released: 2024-01-19

Added

  • Privacy manifests for BitmovinPlayer and BitmovinPlayerCore frameworks

Changed

  • Updated the documentation of Player.skipAd to indicate changed IMA SDK behavior

3.53.0

Released: 2024-01-11

Changed

  • visionOS support is now built with Xcode 15.2

3.52.0

Released: 2023-12-21

Added

  • NetworkConfig.preprocessHttpResponse to allow modifying the response before it is passed to the player

Changed

  • NetworkConfig.retryHttpRequest is now called for FairPlay related requests such as license and certificate requests in case of a failure
  • Update Google IMA SDK for iOS to latest stable version (3.19.1)
  • Update Google IMA SDK for tvOS to latest stable version (4.9.2)

3.51.0

Released: 2023-12-15

Changed

  • Xcode 14.2 or newer is required to integrate the SDK. This change was required to fix a Swift Concurrency backport issue on iOS 14.
  • CFBundleShortVersionString no longer contains a pre-released version suffix e.g. -rc.1. This change was made as it's no longer possible to override this value for Frameworks when using Xcode 15 and Apple rejects non-numeric values.

Fixed

  • Pre-release SDK versions e.g. -rc.1 could not be used for uploading applications to App Store Connect
  • Ads scheduled via player.scheduleAd for the same playback position played back in reverse order

3.50.0

Released: 2023-12-01

Added

  • LicenseValidatedEvent which is emitted when a licensing call succeeded. It contains additional LicenseData as returned by the license server

3.49.0

Released: 2023-11-17

Added

  • Support for visionOS for the BitmovinPlayer package

Changed

  • The System UI is now the default UI on visionOS
  • The minimum BitmovinPlayerCollector version was increased to 3.3.0 when using Swift 5.9

3.48.0

Released: 2023-11-13

Added

  • Support for visionOS on Apple Vision Pro
    • The following features are currently unsupported: Google IMA SDK integration, Google Cast SDK integration and AirPlay support
    • Using CocoaPods in a visionOS project is currently not possible due to a known CocoaPods issue

Fixed

  • Crash on iOS Simulators if the IMA SDK was not present
  • Player gets frozen when loading a new source during ad playback

Changed

  • Improved the accuracy of MetadataEvents for ID3 metadata tags
  • MetadataParsedEvents for ID3 metadata tags will be emitted once the information is downloaded instead of when the metadata is due
  • Updated Bitmovin Player Web UI to 3.52.1

3.47.0

Released: 2023-10-23

Added

  • ImaAdvertisingConfig.preferredUiType of type ImaUiType to control which UI should be used for ad playback. This is only available on iOS. Possible values are:
    • .disabled: Disables all UI elements during ad playback if the played ad allows hiding the UI
    • .ima: Shows default IMA UI elements during ad playback. Further customization may be done via ImaAdvertisingConfig.adAttributionUiMode

3.46.0

Released: 2023-10-09

Added

3.45.0

Released: 2023-10-02

Changed

  • Allow adding sources, using player.playlist.add(source:), after playback finished. If the Source was added at the end, it is required to manually transition to the new Source afterwards.
    player.events.on(PlaybackFinishedEvent.self)
        .receive(on: RunLoop.main)
        .sink { _ in
            player.playlist.add(source: sourceToAdd)
            player.playlist.seek(source: sourceToAdd, time: 0)
            player.play() // If desired to start playback automatically
        }
        .store(in: &cancelables)
    

3.44.2

Released: 2023-09-11

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 TimelineMarkers of type InterstitialMarker
    • Source.markers to add a list of TimelineMarkers 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 PlayerEvents or SourceEvents on Player using Combine framework
    • SourceEventsApi.on for subscribing to SourceEvents on Source using Combine framework
    • PlayerViewEventsApi.on for subscribing to PlayerViewEvents 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 Sources 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

  • CueExitEvents 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 Sources into the playlist
  • player.playlist.add(source:) to dynamically add Sources at the end of the playlist
  • SourceRemovedEvent to notify about a Sources removed from the playlist
  • player.playlist.remove(sourceAt:) to dynamically remove Sources 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

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 SubtitleTracks
  • CueEnter.html is empty for SubtitleTracks 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

  • HttpRequestTypes 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 Sources 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 MetadataEvents 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 SourceConfigs 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 SubtitleTracks 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 BMPMetadataEvents 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 BMPSubtitleTracks 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