Release Notes (iOS)

iOS SDK Release Notes

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


3.81.0

Released: 2024-12-19

Added

  • Thumbnail rendering support for custom native UI via Player.thumbnails
    • ThumbnailsApi.registerContainer(_:) to register a container for the thumbnails to be rendered into.
    • ThumbnailsApi.renderThumbnail(forTime:toleranceBefore:toleranceAfter) to render the thumbnail for a specific time into the registered container.
    • ThumbnailsApi.renderThumbnail(for:time:toleranceBefore:toleranceAfter) to render the thumbnail for a specific source in the playlist at a specific time into the registered container.

3.80.0

Released: 2024-12-12

Added

  • Player.thumbnails namespace of type ThumbnailsApi to access thumbnails related APIs.
    • ThumbnailsApi.thumbnail(forTime:) to retrieve the thumbnail for a specific time, if available.

Deprecated

  • Player.thumbnail(forTime:) in favor of Player.thumbnails.thumbnail(forTime:).

Fixed

  • Missing PlayingEvent when calling play() while seeking when AirPlay is active.

3.79.0

Released: 2024-12-06

Changed

  • During playback of progressive ads, the UI configured through StyleConfig is now used. Before, progressive ads were not played with a UI. This previous behaviour can be restored by setting AdItem.linearAdUiConfig.requestsUi = false

Fixed

  • Stalling indicator is always displayed during ad playback when System UI is used

3.78.0

Released: 2024-11-22

Added

  • .verbose logging level for DebugConfig.logging.logger?.level. This enables logging all events the Player SDK produces, useful to diagnose problems and trace the flow of execution within the Player.

Changed

  • All public API types from BitmovinPlayer and BitmovinPlayerCore now conform to Sendable protocol to support Swift Concurrency with Swift 6
  • PlayerView is now MainActor isolated to conform to Swift Concurrency requirements with Swift 6 for UIView subclasses
  • APIs in BitmovinPlayerAnalytics now conform to Sendable protocol to support Swift Concurrency with Swift 6

Fixed

  • AdStartedEvent.indexInQueue is always 0 when using AdSourceType.bitmovin
  • Ads from the same VAST ad tag do not play in order according to the sequence attribute value of the <Ad> tag when using AdSourceType.bitmovin

Known issues

  • Stalling indicator is always displayed during ad playback when System UI is used

3.77.0

Released: 2024-10-30

Added

  • BitmovinPlayer and BitmovinPlayerCore are now published to the public CocoaPods registry. New updates will be only published there. This simplifies integration effort as it no longer requires to specify a custom spec source.
  • BitmovinCastManagerOptions.stopReceiverApplicationWhenEndingSession to control whether the receiver application should be terminated when the user ends the session

3.76.0

Released: 2024-10-25

Added

  • Player.allowsAirPlay and RemoteControlConfig.allowsAirPlay to control whether AirPlay is allowed
  • AirPlayAvailabilityChangedEvent to notify about AirPlay availability changes

Deprecated

  • Player.isAirPlayAvailable in favor of Player.allowsAirPlay
  • AirPlayAvailableEvent in favor of AirPlayAvailabilityChangedEvent
  • RemoteControlConfig.isAirPlayEnabled in favor of RemoteControlConfig.allowsAirPlay

3.75.0

Released: 2024-10-14

Added

  • ImaAdvertisingConfig.shouldPauseOnTap to control whether the ad should pause when the user taps the screen on iOS.

Changed

  • During casting, Player.currentTime, Player.currentTime(.absoluteTime) and CastTimeUpdatedEvent.currentTime APIs return absolute unix timestamp values instead of relative time

3.74.1

Released: 2024-10-09

Fixed

  • Player.timeshift sometimes not changing playback position for specific live streams

3.74.0

Released: 2024-10-04

Changed

  • BufferLevel is now open and can be subclassed for testing purposes
  • BufferLevel's initializer is now public and can be used to create custom instances for testing purposes

Fixed

  • Cast receiver not always starting playback at the same position as local player when starting to cast a live stream

3.73.0

Released: 2024-09-27

Added

  • Cue.rawText to access the raw string exactly as it appears in the caption file. The property can be retrieved through CueEvent.rawText, making it accessible from CueParsedEvent, CueEnterEvent, and CueExitEvent.
  • Cue.attributedText to access the formatted text content of the cue. This property provides the cue's text content with attributes in the UIKitAttributes format, making it directly usable with UIKit and SwiftUI components that support attributed strings. It can be retrieved through CueEvent.attributedText, making it accessible from CueParsedEvent, CueEnterEvent, and CueExitEvent.

Removed

  • Cue's convenience initializers for Objective-C: now it will be necessary to use the complete initializer.
    • initWithStartTime:endTime:text
    • initWithStartTime:endTime:text:vttProperties
    • initWithStartTime:endTime:html
    • initWithStartTime:endTime:image

Known Issues

  • Cue.rawText has the same value as Cue.text in case the caption is embedded in the manifest file

3.72.0

Released: 2024-09-19

Added

  • TweaksConfig.dateBasedTimeShiftingForLiveStreams to improve accuracy of reaching target latency when SourceLiveConfig.targetLatency is set for HLS Low Latency streams

Removed

  • Method not implemented warning when the Web UI is calling getSeekableRange

3.71.1

Released: 2024-09-11

Fixed

  • Unnecessarily downloading the first segment of live HLS streams when initially loading the asset
  • Potential infinite buffering with HLS Low Latency stream when initially loading the asset

3.71.0

Released: 2024-09-06

Added

  • iOS 18, tvOS 18 and visionOS 2 support
  • SystemUiApi.contextualActions to allow setting contextual actions on tvOS 15 and above

Fixed

  • Missing AudioChangedEvent and SubtitleChangedEvent during AirPlay when selecting tracks on the receiver with iOS 18 sender used

3.70.0

Released: 2024-09-02

Added

  • adQuartileFinished methods to Analytics SSAI API

Fixed

  • AdStartedEvent.clickThroughUrl was nil even though AdStartedEvent.ad.clickThroughUrl was set. Both are set to the same value now.
  • Unexpected CueEnterEvents and CueExitEvents emitted after unloading a stream with side-loaded subtitles and loading a different stream

3.69.0

Released: 2024-08-23

Added

  • NetworkConfig.preprocessHttpRequest to preprocess HTTP requests before they are sent

Changed

  • Pre-roll ads start loading on the first play intention (PlayEvent) instead of waiting for ReadyEvent. When PlaybackConfig.isAutoplayEnabled is set to true, the ad will start loading simultaneously with the main content.

Fixed

  • NetworkConfig.preprocessHttpRequestDelegate is called two times for every FairPlay license request
  • Duplicated MetadataParsedEvent and MetadataEvent emitted on iOS 18, tvOS 18 and visionOS 2

Deprecated

  • NetworkConfig.preprocessHttpRequestDelegate in favor of NetworkConfig.preprocessHttpRequest

3.68.0

Released: 2024-08-07

Added

  • The NetworkConfig is now respected for poster image requests
    • HttpRequestType.mediaPoster to identify the request
  • NowPlayingConfig to enable the current Now Playing information for the application. This information will be displayed wherever Now Playing information typically appears, such as the lock screen and inside the control center. This config can be accessed through PlayerConfig.nowPlayingConfig.
  • BitmovinUserInterfaceConfig.customOptions to provide custom configuration options for a customized Bitmovin Player Web UI
  • BitmovinUserInterfaceConfig.metadata of type BitmovinUserInterfaceMetadata to provide default metadata values for the Bitmovin Player Web UI
    • BitmovinUserInterfaceMetadata.title to provide default title of the video source
    • BitmovinUserInterfaceMetadata.sourceDescription to provide default description of the video source
  • BitmovinUserInterfaceConfig.uiManagerFactoryFunction to specify a custom UIManager factory method for the Bitmovin Player Web UI

Changed

  • The poster image is now cached and not downloaded again during the lifecycle of a Source e.g. when the Source is inside a playlist and isPosterPersistent is active
  • Extend documentation for closures within NetworkConfig by adding an usage example

Fixed

  • Properly destroy and release IMAAdsManager instances after ads finished playing

Deprecated

  • TweaksConfig.updatesNowPlayingInfoCenter in favor of NowPlayingConfig.nowPlayingConfig. Enabling Now Playing information via PlayerConfig.nowPlayingConfig will bypass the flag, disabling AVKit's automatic updates.
  • ImaSettings.disableNowPlayingInfo in favor of NowPlayingConfig.nowPlayingConfig. Enabling Now Playing information via PlayerConfig.nowPlayingConfig will bypass the flag, disabling IMA's updates.

Known Issues

  • There is an unexpected behaviour when using the IMA SDK together with NowPlayingConfig. The Google IMA SDK adds its own MPRemoteCommand for play/pause right when the ad starts loading (not when it started playing). Within this time window (approximately around 10 seconds) it's possible that the Ad and the main content are playing at the same time when a user interacts with the Now Playing feature. We raised this issue (link) with the IMA team and are awaiting an update for the IMA iOS SDK.

3.67.0

Released: 2024-07-19

Added

  • TweaksConfig.enforcedMinimumBufferLevelForPlayback to configure the minimum buffer level, in seconds, required for transitioning into the playing state. It can be used to avoid flickering StallStartedEvent, StallEndedEvent and improper TimeChangedEvent invocations caused by unexpected AVPlayer behaviour when stalling on an audio-only stream with an empty buffer
  • More details to the error messages if a manifest request failed

Fixed

  • An issue with the IMA SDK on tvOS where certain ad tags would not emit the STARTED event resulting in a missing AdStartedEvent

3.66.1

Released: 2024-06-28

Fixed

  • Seek events not being emitted after reaching PlaybackFinishedEvent

3.66.0

Released: 2024-06-21

Added

  • Support for streaming ads with the Bitmovin Advertising Module (BAM)
  • Improved VAST MediaFile selection by ignoring unsupported MIME-Types and preferring streaming over progressive media files
  • AdSource.videoLoadTimeout to configure the timeout for loading media files of advertisements

Changed

  • Update Google IMA SDK for iOS to latest stable version (3.23.0)
  • Update Google IMA SDK for tvOS to latest stable version (4.13.0)
  • Update Google Cast iOS sender SDK to latest stable version (4.8.1)

Fixed

  • Safe areas not respected for the Bitmovin Player Web UI in landscape

3.65.0

Released: 2024-06-10

Changed

  • Xcode 15.4 and Swift 5.10 or newer is required to integrate the SDK

3.64.0

Released: 2024-05-29

Added

  • PlayerAnalyticsApi.AnalyticsSsaiApi to provide access to the manual SSAI tracking of our Analytics Collector.
  • Buffering overlay is displayed during ad loading for all ad source types (.bitmovin, .ima, .progressive).
  • VastAdData.wrapperAdSystems and VastAdData.wrapperCreativeIds to the Ad.data for VAST ads handled by the Google IMA SDK.

Fixed

  • Playback error of FairPlay content without setting the FairPlayConfig.prepareLicense callback.
  • Two touch interactions needed to skip an ad or open the click-through link when the Bitmovin Advertising Module is used in combination with our Bitmovin Player Web UI.
  • Performance degradation when using side-loaded subtitles.

Changed

  • PlayingEvent, in case of pre-roll ad playback, is now emitted after AdStartedEvent.
  • StallStartedEvent and StallEndedEvent are now emitted during ad loading for all ad source types (.bitmovin, .ima, .progressive).
  • The minimum BitmovinPlayerCollector version to 3.7.0.
  • Updated Bitmovin Player Web UI to 3.64.0.

3.63.0

Released: 2024-05-17

Changed

  • Updated Bitmovin Player Web UI to 3.62.0.
  • Bitmovin Advertising Module macro replacement no longer replaces all unknown macros with -1. Default value replacement can be managed using VastMacroConfig.valueProvider if required.

Fixed

  • Bitmovin Advertising Module macro replacement not working if the macro markers are url encoded.

3.62.0

Released: 2024-05-08

Added

  • SourceConfig.liveConfig namespace of type SourceLiveConfig to configure behaviour when playing live content.
    • SourceLiveConfig.targetLatency to configure the players offset from the live edge.
    • SourceLiveConfig.automaticallyPreservesLatency to configure if the current latency should be automatically preserved.
    • SourceLiveConfig.minTimeshiftBufferDepth to configure the minimum buffer depth needed to enable time shifting in a stream.
  • Source.latency namespace of type SourceLatencyApi to access latency related APIs for live-streams.
    • SourceLatencyApi.automaticallyPreservesLatency to dynamically configure if the current latency should be automatically preserved.
    • SourceLatencyApi.recommendedLatency to provide the system's recommended latency.
  • Player.latency namespace of type LatencyApi to access live stream related APIs.
    • LatencyApi.currentLatency to get the current latency in seconds.
  • BitmovinUserInterfaceConfig.enableWebViewInspecting for debugging of custom Bitmovin Player Web UIs.

Changed

  • Added DOCTYPE declaration to the HTML document used to render the Bitmovin Player Web UI to prevent quirks mode

Deprecated

  • PlayerConfig.liveConfig in favor of SourceConfig.liveConfig.

3.61.0

Released: 2024-04-26

Added

  • Support for WebVTT coloring information (text and background colors) for side-loaded WebVTT subtitles, and WebVTT subtitles referenced in the manifest. Subtitle cues containing coloring information are provided as HTML through the Cue.html property.

Changed

  • When using the LogEntry initializer from Swift, the code and data properties can be omitted.

Fixed

  • A memory leak of internal components after the Player was released.

3.60.0

Released: 2024-04-12

Added

  • The poster-image is now supported when using the System UI (UserInterfaceType.system) on iOS and tvOS.
  • TweaksConfig.updatesNowPlayingInfoCenter to decide whether AVKit should update Now Playing information automatically when using System UI. You may want to disable automatic updates in case they are interfering with manual updates you are performing.
  • Minimalistic Advertising UI during ad playback when the System UI is used in combination with the Bitmovin Advertising Module.
    • It contains a skip button respecting the customization options from the LinearAdUiConfig.
    • It reacts to user interaction for controlling playback.
    • It handles the clickThroughUrl on iOS and visionOS.

Changed

  • text property of CueEnterEvent and CueExitEvent contain no HTML tags from side-loaded subtitle tracks.

Fixed

  • Clipped subtitle cues in case of side-loaded subtitle track containing multi-byte unicode characters.
  • Ad not visible when the System UI is used in combination with the Bitmovin Advertising Module.

3.59.0

Released: 2024-04-05

Added

  • Bitmovin Advertising Module as an alternative to using IMA SDK to playback VAST-compliant ads. Using Bitmovin Advertising Module doesn't require any additional dependencies and offers a drop in replacement for the IMA SDK for the most common advertising scenarios. It supports seamless integration with the latest VAST 4.3 standard while offering reliable backward compatibility down to VAST 2.0.

    • AdSourceType.bitmovin to enable Bitmovin Advertising Module for an AdSource.

      // Create an `AdItem` with one `AdSource` of type `.bitmovin`
      let adItem = AdItem(
          adSources: [AdSource(tag: adTagUrl, ofType: .bitmovin)],
          // Configure the ad as a pre-roll ad
          atPosition: "pre"
      )
      // You can either create the schedule before player creation using the advertising config
      let advertisingConfig = AdvertisingConfig(schedule: [adItem])
      
      // Add the config to your PlayerConfig
      playerConfig.advertisingConfig = advertisingConfig
      
      // Or use the PlayerAPI to scheduled the ad
      player.scheduleAd(adItem: adItem)
      
    • LinearAdUiConfig to customise the Bitmovin Advertising UI when AdSourceType.bitmovin is configured.

      let linearAdUiConfig = LinearAdUiConfig()
      linearAdUiConfig.message = "This ad will end in {remainingTime}"
      linearAdUiConfig.untilSkippableMessage = "This ad is skippable in {remainingTime}"
      linearAdUiConfig.skippableMessage = "You can skip this ad now."
      
      // Create an `AdItem` with one `AdSource` of type `.bitmovin`
      let adItem = AdItem(
          adSources: [AdSource(tag: adTagUrl, ofType: .bitmovin)],
          // Configure the ad as a pre-roll ad
          atPosition: "pre",
          // Provide a LinearAdUiConfig instance to have built-in support for our default ad UI
          linearAdUiConfig: linearAdUiConfig
      )
      
    • AdvertisingConfig.bitmovin namespace to configure Bitmovin Advertising Module features.

    • BitmovinAdvertisingConfig.macro to configure macro replacement when using Bitmovin Advertising Module. See VastMacroConfig for more details.

    • VastMacro, VastMacroContext and VastMacroScope to facilitate the macro value providing process.

    • Ad.clickThroughUrlOpened callback to track the opening of the clickThroughUrl in case a custom UI is used.

  • AdvertisingConfig.shouldLoadAdItem(adItem:) callback that can be used to decide whether an AdItem should start loading. It is called once for each AdItem when its loading time is reached.

Fixed

  • Player UI partially or completely covered by the video after exiting Picture in Picture mode

Known Issues

  • Ad playback while in Picture in Picture mode will result in the ad being played in the main view instead of the Picture in Picture view
  • Using System UI via StyleConfig.userInterfaceType with value .system does not render advertisements when Bitmovin Advertising Module is used
  • Bitmovin Advertisement UI needs two taps during ad playback for clickthrough and skip ad interactions
  • URL encoded macros in VAST URLs will not be replaced when using the Bitmovin Advertising Module

3.58.0

Released: 2024-03-29

Changed

  • NetworkConfig.retryHttpRequest, NetworkConfig.preprocessHttpRequestDelegate and NetworkConfig.preprocessHttpResponse are now called when requesting thumbnail tracks and side-loaded subtitle tracks

Fixed

  • LinearAd.skippableAfter returning 0 instead of .nan for non-skippable advertisements
  • AdFinishedEvent emitted when the ad gets skipped by starting a cast session during ad playback
  • Crash when requesting a thumbnail track or side-loaded subtitle track with a non-200 response status code

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-15

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 3.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 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-13

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

Fixed

  • Accessing the absolute current time via player.currentTime(.absolute) returns a wrong value for live-streams that do not have a EXT-X-PROGRAM-DATE-TIME tag in their manifest

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
  • 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 a Sources removed from the playlist
  • PlaylistOptions.preloadAllSources flag is respected when adding a new source to the playlist
  • Implement removing sources with dynamic playlist API for CAF

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

Changed

  • VideoDownloadQualityChangedEvent is now conforming to SourceEvent instead of PlayerEvent

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

Removed

  • Underscored methods and properties from documentation

Changed

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

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
  • AudioAddedEvent, AudioChangedEvent and AudioRemovedEvent are now emitted for inactive sources in a playlist when audio events occur
  • Improved documentation of consequences when enabling/disabling TweaksConfig.isCustomHlsLoadingEnabled and TweaksConfig.isNativeHlsParsingEnabled

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

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

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 3.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* (e.g. playing) 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