Release Notes (iOS)
iOS SDK Release Notes
Release notes for the v2 version of the iOS SDK can be found here.
3.77.0
Released: 2024-10-30
Added
BitmovinPlayer
andBitmovinPlayerCore
are now published to the public CocoaPods registry. 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
andRemoteControlConfig.allowsAirPlay
to control whether AirPlay is allowedAirPlayAvailabilityChangedEvent
to notify about AirPlay availability changes
Deprecated
Player.isAirPlayAvailable
in favor ofPlayer.allowsAirPlay
AirPlayAvailableEvent
in favor ofAirPlayAvailabilityChangedEvent
RemoteControlConfig.isAirPlayEnabled
in favor ofRemoteControlConfig.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)
andCastTimeUpdatedEvent.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 nowopen
and can be subclassed for testing purposesBufferLevel
's initializer is nowpublic
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 throughCueEvent.rawText
, making it accessible fromCueParsedEvent
,CueEnterEvent
, andCueExitEvent
.Cue.attributedText
to access the formatted text content of the cue. This property provides the cue's text content with attributes in theUIKitAttributes
format, making it directly usable with UIKit and SwiftUI components that support attributed strings. It can be retrieved throughCueEvent.attributedText
, making it accessible fromCueParsedEvent
,CueEnterEvent
, andCueExitEvent
.
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 asCue.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 whenSourceLiveConfig.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
andSubtitleChangedEvent
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
wasnil
even thoughAdStartedEvent.ad.clickThroughUrl
was set. Both are set to the same value now.- Unexpected
CueEnterEvent
s andCueExitEvent
s 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 forReadyEvent
. WhenPlaybackConfig.isAutoplayEnabled
is set totrue
, the ad will start loading simultaneously with the main content.
Fixed
NetworkConfig.preprocessHttpRequestDelegate
is called two times for every FairPlay license request- Duplicated
MetadataParsedEvent
andMetadataEvent
emitted on iOS 18, tvOS 18 and visionOS 2
Deprecated
NetworkConfig.preprocessHttpRequestDelegate
in favor ofNetworkConfig.preprocessHttpRequest
3.68.0
Released: 2024-08-07
Added
- The
NetworkConfig
is now respected for poster image requestsHttpRequestType.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 throughPlayerConfig.nowPlayingConfig
.BitmovinUserInterfaceConfig.customOptions
to provide custom configuration options for a customized Bitmovin Player Web UIBitmovinUserInterfaceConfig.metadata
of typeBitmovinUserInterfaceMetadata
to provide default metadata values for the Bitmovin Player Web UIBitmovinUserInterfaceMetadata.title
to provide default title of the video sourceBitmovinUserInterfaceMetadata.sourceDescription
to provide default description of the video source
BitmovinUserInterfaceConfig.uiManagerFactoryFunction
to specify a customUIManager
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 theSource
is inside a playlist andisPosterPersistent
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 ofNowPlayingConfig.nowPlayingConfig
. Enabling Now Playing information viaPlayerConfig.nowPlayingConfig
will bypass the flag, disabling AVKit's automatic updates.ImaSettings.disableNowPlayingInfo
in favor ofNowPlayingConfig.nowPlayingConfig
. Enabling Now Playing information viaPlayerConfig.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 ownMPRemoteCommand
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 flickeringStallStartedEvent
,StallEndedEvent
and improperTimeChangedEvent
invocations caused by unexpectedAVPlayer
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 missingAdStartedEvent
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
andSwift 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
andVastAdData.wrapperCreativeIds
to theAd.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 afterAdStartedEvent
.StallStartedEvent
andStallEndedEvent
are now emitted during ad loading for all ad source types (.bitmovin
,.ima
,.progressive
).- The minimum
BitmovinPlayerCollector
version to3.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 usingVastMacroConfig.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 typeSourceLiveConfig
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 typeSourceLatencyApi
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 typeLatencyApi
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 ofSourceConfig.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, thecode
anddata
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.
- It contains a skip button respecting the customization options from the
Changed
text
property ofCueEnterEvent
andCueExitEvent
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. The initial version of BAM only supports the VAST standard.
-
AdSourceType.bitmovin
to enable Bitmovin Advertising Module for anAdSource
.// 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 whenAdSourceType.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. SeeVastMacroConfig
for more details. -
VastMacro
,VastMacroContext
andVastMacroScope
to facilitate the macro value providing process. -
Ad.clickThroughUrlOpened
callback to track the opening of theclickThroughUrl
in case a custom UI is used.
-
-
AdvertisingConfig.shouldLoadAdItem(adItem:)
callback that can be used to decide whether anAdItem
should start loading. It is called once for eachAdItem
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
andNetworkConfig.preprocessHttpResponse
are now called when requesting thumbnail tracks and side-loaded subtitle tracks
Fixed
LinearAd.skippableAfter
returning0
instead of.nan
for non-skippable advertisementsAdFinishedEvent
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
andSource.metadata
now acceptsAVMetadataItem
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 aPlayer
instanceAnalyticsPlayerConfig
to configure analytics data collection onPlayer
instancesPlayerCoreFactory.createPlayer(playerConfig:)
to create aPlayer
instance in case of standalone Player Core usage
- New top level factory functions for
Source
:SourceFactory.createSource(sourceConfig:, sourceMetadata:)
to create aSource
instance
Changed
- The minimum
BitmovinPlayerCollector
version to3.4.0
Deprecated
PlayerFactory.create(playerConfig:, analyticsConfig:, defaultMetadata:)
in favor ofPlayerFactory.createPlayer(playerConfig:analytics:)
PlayerFactory.create(playerConfig:)
in favor ofPlayerFactory.createPlayer(playerConfig:)
. In case of standalone Player Core usage, update toPlayerCoreFactory.createPlayer(playerConfig:)
SourceFactory.create(sourceConfig:, sourceMetadata:)
in favor ofSourceFactory.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
andBitmovinPlayerCore
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 additionalLicenseData
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 to3.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
MetadataEvent
s for ID3 metadata tags MetadataParsedEvent
s 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 typeImaUiType
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 viaImaAdvertisingConfig.adAttributionUiMode
3.46.0
Released: 2023-10-09
Added
BitmovinUserInterfaceConfig.playbackSpeedSelectionEnabled
to provide access to theUIConfig.playbackSpeedSelectionEnabled
of our Bitmovin Player Web UIBitmovinUserInterfaceConfig.enableSeekPreview
to provide access to theUIConfig.enableSeekPreview
of our Bitmovin Player Web UI
3.45.0
Released: 2023-10-02
Changed
- Allow adding sources, using
player.playlist.add(source:)
, after playback finished. If theSource
was added at the end, it is required to manually transition to the newSource
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 unexpectedString
formatting specifiers in the log message
3.44.1
Released: 2023-09-04
Fixed
- Unexpected caching of the
FairplayConfig
if it was updated through theSourceConfig
on subsequent calls toOfflineManager.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 version3.43.1
.
3.42.0
Released: 2023-08-01
Added
- Bitmovin Analytics support. Initially, version
3.0.0
ofBitmovinAnalytics
collector library is used, but it can be updated independently from thePlayer
to newer versions. If you are currently using the standaloneBitmovinAnalytics
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 AnalyticsSourceFactory.create(from:sourceMetadata:)
to allow configuring Analytics metadataPlayer.analytics
namespace to control Analytics related features. SeePlayerAnalyticsApi
for available APIs.Source.analytics
namespace to control Analytics related features. SeeSourceAnalyticsApi
for available APIs.PlayerAnalyticsApiAccessor
to allow access to thePlayerAnalyticsApi
from Obj-CSourceAnalyticsApiAccessor
to allow access to theSourceAnalyticsApi
from Obj-C
Fixed
- Duplicated
onFullscreenEnabled
events when attaching newFullscreenHandler
instance toPlayerView
- Missing
onFullscreenEnter
/onFullscreenExit
events when attaching newFullscreenHandler
instance toPlayerView
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 version3.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 UIInterstitialMarker
to mark time range of an interstitial for asset when presented in tvOS system UISourceConfig.markers
to add a list ofTimelineMarker
s of typeInterstitialMarker
Source.markers
to add a list ofTimelineMarker
s of typeInterstitialMarker
TimelineMarkerEnterEvent
andTimelineMarkerExitEvent
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. SeeChanged
section for more details.- A modern way to subscribe to
Player
,Source
andPlayerView
events using combine:Player.events
,Source.events
andPlayerView.events
namespaces for accessing event publishersPlayerEventsApi.on
for subscribing toPlayerEvent
s orSourceEvent
s onPlayer
using Combine frameworkSourceEventsApi.on
for subscribing toSourceEvent
s onSource
using Combine frameworkPlayerViewEventsApi.on
for subscribing toPlayerViewEvent
s onPlayerView
using Combine framework
FairplayLicenseAcquiredEvent
withPlayerListener.onFairplayLicenseAcquired
andSourceListener.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 licenseSource.drm
namespace for access DRM specific APIs on a sourceSource.drm.fairplay
namespace for access FairPlay DRM specific APIs on a sourceSourceDrmApi.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, theBitmovinPlayer
framework is a collection of multiple frameworks which defines the finalPlayer
product.
For now, the only dependency is theBitmovinPlayerCore
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>
.
- The import for the
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
andScalingModeChangedEvent
are now conforming toPlayerViewEvent
instead ofPlayerEvent
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 componentsLogLevel
,LogSender
andLogEntry
for the logging facilityLoggingConfig
to provide logging related configuration optionsDebugConfig.logging
to configure logging in the SDKBitmovinUserInterfaceConfig.forceSubtitlesIntoViewContainer
to provide access to theUIConfig.forceSubtitlesIntoViewContainer
of our Bitmovin Player Web UITweaksConfig.delayInitialSubtitleSelection
which can be enabled to prevent race conditions withAVPlayer
'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
totrue
per default in our Bitmovin Player Web UI
Deprecated
PlayerWarningEvent
,SourceWarningEvent
,PlayerListener.onPlayerWarning
andSourceListener.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
andSourceUnloadedEvent
are now emitted correctly after (and not before) thePlayerErrorEvent
when a player error occursDestroyEvent
is now emitted correctly after (and not before) thePlayerErrorEvent
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
returning0
after time-shifting when the System UI is used.TimeShiftEvent.timeShift
returning0
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 forwardPictureInPictureApi.showSkipControls
to dynamically specify if skip-backward and skip-forward buttons are visible when Picture in Picture is active on iOSPictureInPictureConfig.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 valuetrue
- 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 configurePlayerView
behaviorPictureInPictureConfig
to group configurations for Picture in Picture playbackshowSkipControls
to specify if skip-backward and skip-forward buttons are visible when Picture in Picture is active on iOSshouldEnterOnBackground
to specify if Picture in Picture playback should start automatically when the App enters background
PlayerView(player:,frame:,playerViewConfig:)
initializer to thePlayerView
to allow setting the newPlayerViewConfig
.dSYM
and.bcsymbolmap
files to XCFramework product in order to support crash report symbolication
Deprecated
PlaybackConfig.isPictureInPictureEnabled
in favor ofPictureInPictureConfig.isEnabled
Removed
- Deprecated
RenderFirstFrameEvent
event data object andonRenderFirstFrame
event listener fromPlayerListener
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. ThePlayer.sharePlay
namespace offers the following APIs:coordinate(with groupSession:)
lets the player join thegroupSession
to allow group playbackisInGroupSession
describes whether the player is currently participating in group playbackbeginSuspension(for suspensionReason:)
starts a suspension. The player is not participating in group playback while the suspension is activeendSuspension(_ suspension:)
andendSuspension(_ suspension:, proposingNewTime newTime:)
ends the suspension and optionally proposes a new time that every participant should seek toisSuspended
describes whether the player is currently suspended and not able to participate in group playbacksuspensionReasons
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
fromopen
tofinal
to restrict subclassing
Removed
NSCopying
conformance forConfig
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 usedImaAdsManager
type to improve usability when Google IMA SDK is usedVideoPlaybackQualityChangedEvent
which is emitted when the playback video quality changes
Changed
- Improved documentation on
AdBreak.ads
to state limitations AdvertisingConfig.beforeInitialization
property now uses our ownImaSettings
type instead of Google IMA SDK to improve usabilityAdvertisingConfig.onAdsManagerAvailable
property now uses our ownImaAdsManager
type instead of Google IMA SDK to improve usability
Removed
autoPlayAdBreaks
property when usingIMASettings
fromAdvertisingConfig.beforeInitialization
, as using this property has no effect on ad playbackplayerType
property when usingIMASettings
fromAdvertisingConfig.beforeInitialization
, as using this property has no effect on ad playbackenableDebugMode
property when usingIMASettings
fromAdvertisingConfig.beforeInitialization
, as using this property has no effect on ad playbackdelegate
property when usingIMAAdsManager
fromAdvertisingConfig.onAdsManagerAvailable
, as using this caused undefined behavior, potentially breaking playbackadPlaybackInfo
property when usingIMAAdsManager
fromAdvertisingConfig.onAdsManagerAvailable
, as all of this information is available viaPlayer
API during ad playbackvolume
property when usingIMAAdsManager
fromAdvertisingConfig.onAdsManagerAvailable
, as this is available viaPlayer.volume
API during ad playbackdelegate
property when usingIMAAdsManager
fromAdvertisingConfig.onAdsManagerAvailable
, as using this caused undefined behaviorinitialize(with:)
when usingIMAAdsManager
fromAdvertisingConfig.onAdsManagerAvailable
, as this had no effectstart()
method when usingIMAAdsManager
fromAdvertisingConfig.onAdsManagerAvailable
, as ads are starting automatically when scheduled if playing, or can be started using viaPlayer.play()
pause()
method when usingIMAAdsManager
fromAdvertisingConfig.onAdsManagerAvailable
, as this is available viaPlayer.pause()
API during ad playbackresume()
method when usingIMAAdsManager
fromAdvertisingConfig.onAdsManagerAvailable
, as this is available viaPlayer.play()
API during ad playbackskip()
method when usingIMAAdsManager
fromAdvertisingConfig.onAdsManagerAvailable
, as this is available viaPlayer.skipAd()
API during ad playbackclicked()
when usingIMAAdsManager
fromAdvertisingConfig.onAdsManagerAvailable
, as this API had no effect when useddestroy()
when usingIMAAdsManager
fromAdvertisingConfig.onAdsManagerAvailable
, as using this caused undefined behavior, potentially breaking playback
Fixed
Seek
/TimeShift
andSeeked
/TimeShifted
event emitting when multiple seek or timeShift operations are done after each other- Missing
onVideoDownloadQualityChanged
listener method inSourceListener
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
andOutputUnobscuredEvent
which are emitted whenplayer.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
andSeeked
/TimeShifted
events during casting
Fixed
- Playback on cast receiver not continuing when destroying the local player
- Outdated and incomplete documentation for
NetworkConfig
- Performance issues when running on iOS or tvOS simulator
- Horizontal positioning for cues in WebVTT subtitle tracks on iOS and tvOS 16
3.26.0
Released: 2022-08-30
Added
- Possibility to remove faulty
Source
s from aSourceErrorEvent
. SeeonSourceError
for details.
3.25.0
Released: 2022-08-16
Changed
- Change
TimeMode
to a@frozen
enum SourceConfig.metadata
in Swift now uses[String: Any]
type
Removed
- Deprecated APIs from
SourceConfig
:HlsSource
DashSource
ProgressiveSource
SourceConfig
initializers:init(adaptiveSource:)
init(HlsSource)
initWithDASHSource:
initWithProgressiveSource:
SourceConfig
properties and methods:urlForType:
hasSourceOfType:
addSource:error:
addAdaptiveSource:error:
addProgressiveSource:error:
AdaptiveSource
,DASHSource
,HLSSource
,ProgressiveSource
,MediaSource
classes
Fixed
CueExitEvent
s firing continuously when external subtitles are added toSourceConfig
- 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 aEXT-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 SDKSystemUserInterfaceConfig.transportBarCustomMenuItems
to configure custom transport bar items on tvOS 15 and abovePlayerView.systemUi
API namespace of typeSystemUiApi
for interactions regarding the system UISystemUiApi.transportBarCustomMenuItems
which allows dynamically changing custom transport bar items on tvOS 15 and aboveAdvertisingConfig.ima
property andImaAdvertisingConfig
type to customize Google IMA SDKImaAdvertisingConfig.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
andAdBreakFinishedEvent.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 UIAdStartedEvent.indexInQueue
always returned0
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
- Google IMA tvOS SDK
player.playlist.add(source:at:)
to dynamically addSource
s into the playlistplayer.playlist.add(source:)
to dynamically addSource
s at the end of the playlistplayer.playlist.remove(sourceAt:)
to dynamically removeSource
s from the playlistSourceAddedEvent
to notify about newSource
s added into the playlistSourceRemovedEvent
to notify about aSource
s removed from the playlistPlaylistOptions.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 theNetworkConfig
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 ofonCastPlaying
,onCastTimeUpdated
andonCastPaused
is seen
3.19.0
Released: 2022-05-10
Added
cea
toSubtitleFormat
to represent closed captions
Changed
- Type of
position
fromString?
toCuePosition?
inCueEvent
,CueEnterEvent
,CueExitEvent
andCueParsedEvent
Fixed
- Positioning information not available on
CueEnterEvent
andCueExitEvent
for closed caption tracks hideFirstFrame
not working when usingUserInterfaceType.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 fromonSourceError
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 thePlaylistOptions
to make playlist replay behavior configurable
Removed
- Support for Bitmovin Player Web UI below version
3.19.0
Fixed
offlineDrmLicenseInformation.isDrmLicenseExpired
is always showing as expired for FPS protected content- Background Playback not working when
uiEnabled
is false
Changed
OfflineContentManager.offlineDrmLicenseInformation
to return optional value in order to always represent the correct stateOfflineManager.offlineDrmLicenseInformationForSourceConfig:
to return optional value in order to always represent the correct state
Deprecated
OfflineContentManager.isDrmLicenseExpired
in favor of optionalOfflineContentManager.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
andCueParsedEvent
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 externalSubtitleTrack
sCueEnter.html
is empty forSubtitleTrack
s that are present in the manifest
Changed
SubtitleRemovedEvent
,SubtitleChangedEvent
,SubtitleAddedEvent
andCueParsedEvent
are now conforming toSourceEvent
instead ofPlayerEvent
CueEvent
is now a protocol instead of a class conforming toPlayerEvent
3.15.0
Released: 2022-03-01
Added
isCastEnabled
property to theRemoteControlConfig
to enable or disable casting functionality for a player instance- Support for
ID
andCLASS
properties forEXT-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 contentMetadataParsedEvent
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 theReadyEvent
is received. - Support for negative values for
player.playbackSpeed
to allow reverse playback Player.canPlayAtPlaybackSpeed
API to check if givenplaybackSpeed
value is supported by the currently loaded source
Changed
VideoDownloadQualityChangedEvent
is now conforming toSourceEvent
instead ofPlayerEvent
Fixed
- Missing
TimeShiftEvent
andTimeShiftedEvent
on tvOS when live stream containsEXT-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 aPlayerErrorEvent
or aSourceErrorEvent
does not work - Loading a new
Source
from aPlaybackFinishedEvent
sometimes does not start playback automatically whenPlaybackConfig.isAutoPlayEnabled
is set totrue
- 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 aPlayerErrorEvent
or aSourceErrorEvent
does not work - Loading a new
Source
from aPlaybackFinishedEvent
sometimes does not start playback automatically whenPlaybackConfig.isAutoPlayEnabled
is set totrue
- 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 SwiftDownloadFinishedEvent.requestType
to make use of the newHttpRequestType
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 whenPlaybackConfiguration.isAutoplayEnabled
is set totrue
- Documentation generation for various types
- Missing documentation for tvOS only properties
Deprecated
HttpRequestType
s constants when used from Swift in favour of the newHttpRequestType
enumDownloadFinishedEvent.downloadType
in favour of the new properly typedrequestType
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 aPlayerErrorEvent
or aSourceErrorEvent
does not work - Loading a new
Source
from aPlaybackFinishedEvent
sometimes does not start playback automatically whenPlaybackConfig.isAutoPlayEnabled
is set totrue
- 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
whenSourceOptions.startOffset
is configured andPlaybackConfiguration.isAutoplayEnabled
is set totrue
- 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 aPlayerErrorEvent
or aSourceErrorEvent
does not work - Loading a new
Source
from aPlaybackFinishedEvent
sometimes does not start playback automatically whenPlaybackConfig.isAutoPlayEnabled
is set totrue
- 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 singleSourceConfig
OfflineContentManagerListener
to receive updates regarding offline content and offline DRM related tasksOfflineManager.offlineContentManager(for:)
to retrieve aOfflineContentManager
instance for a certainSourceConfig
OfflineEvent
as parent type for all other events emitted by anOfflineContentManager
AvailableTracksFetchedEvent
to get notified when the available tracks were fetchedOfflineContentLicenseExpiredEvent
to get notified when the stored license is expiredOfflineContentLicenseRenewedEvent
to get notified when the license was renewedContentDownloadCanceledEvent
to get notified when the content download was cancelledContentDownloadResumedEvent
to get notified when the content download was resumedContentDownloadProgressChangedEvent
to get notified for every progress change during the content downloadContentDownloadSuspendedEvent
to get notified when the content download was suspendedContentDownloadFinishedEvent
to get notified when the content download finished successfullyOfflineErrorEvent
to get notified about any error that happenedofflineContentManager(for:id:)
toOfflineManager
to define a custom unique identifier forOfflineContentManager
OfflineContentManager.tweaks
namespace to control tweaks for offline content downloadsOfflineContentManagerTweaksApi.migrateDownload(remoteAssetUrl:resourceIdentifierCallback:)
to enable updating download URL for offline content downloads
Changed
AudioAddedEvent
,AudioChangedEvent
andAudioRemovedEvent
are now conforming toSourceEvent
instead ofPlayerEvent
AudioAddedEvent
,AudioChangedEvent
andAudioRemovedEvent
are now emitted for inactive sources in a playlist when audio events occur- Improved documentation of consequences when enabling/disabling
TweaksConfig.isCustomHlsLoadingEnabled
andTweaksConfig.isNativeHlsParsingEnabled
Deprecated
- All methods on the
OfflineManager
which areSourceConfig
related. From now on theOfflineContentManager
should be used OfflineManagerListener
and all its methods. From now on theOfflineContentManagerListener
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
orplayer.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 aPlayerErrorEvent
or aSourceErrorEvent
does not work - Loading a new
Source
from aPlaybackFinishedEvent
sometimes does not start playback automatically whenPlaybackConfig.isAutoPlayEnabled
is set totrue
- 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 aPlayerErrorEvent
or aSourceErrorEvent
does not work - Loading a new
Source
from aPlaybackFinishedEvent
sometimes does not start playback automatically whenPlaybackConfig.isAutoPlayEnabled
is set totrue
- 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 aPlayerErrorEvent
or aSourceErrorEvent
does not work - Loading a new
Source
from aPlaybackFinishedEvent
sometimes does not start playback automatically whenPlaybackConfig.isAutoPlayEnabled
is set totrue
- 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 toSource
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 aPlayerErrorEvent
or aSourceErrorEvent
does not work - Loading a new
Source
from aPlaybackFinishedEvent
sometimes does not start playback automatically whenPlaybackConfig.isAutoPlayEnabled
is set totrue
- 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 before3.3.0
for a v3 to v3 upgrade (usingOfflineManager
) are not playable anymore when the device is offline
3.8.0
Released: 2021-09-28
Added
showTitleInSeekBar
property in theSystemUserInterfaceConfig
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
andshowInfoViews
on theSystemUserInterfaceConfiguration
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 aPlayerErrorEvent
or aSourceErrorEvent
does not work - Loading a new
Source
from aPlaybackFinishedEvent
sometimes does not start playback automatically whenPlaybackConfig.isAutoPlayEnabled
is set totrue
- 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 before3.3.0
for a v3 to v3 upgrade (usingOfflineManager
) are not playable anymore when the device is offline
3.7.0
Released: 2021-09-14
Added
movpkg
toSourceType
to support playback of local MOVPKG filesprovideLicenseData
andpersistLicenseData
toFairplayConfig
for advanced use-cases and external FairPlay license handling
Fixed
- Seeking backwards within a playlist is never finished on iOS 15
isPlaying
occasionally returnedfalse
inside anonPlaylistTransition
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 theinit
function in theAdStartedEvent
from Optional to non-Optional FairplayConfig.certificateUrl
changed from typeURL
toURL?
to enable advanced FairPlay license handling
3.6.1
Released: 2021-08-31
Fixed
- AirPlay playback session is paused when iOS device gets locked
- Subsequent
Source
s within a playlist don't finish preloading before transitioning on iOS 12
Changed
- Making several
Events
open for extending and changed their initializers to public for better integration support
3.6.0
Released: 2021-08-19
Added
BitmovinCastManagerOptions
to specifyapplicationId
,namespace
andenableBackgroundSessions
when initializingBitmovinCastManager
BitmovinCastManagerOptions.enableBackgroundSessions
to keep Google Cast sessions active when the app is in backgroundOfflineConfig
to configure the offline functionalityOfflineConfig.restrictMediaDownloadsToWiFi
to specify if an active WiFi connection is required for downloading media for offline playbackOfflineManager.initializeOfflineManagerWithOfflineConfig
to set theOfflineConfig
OfflineManager.isOfflineManagerInitialized
to check if the shared instance is already initializedrestrictMediaDownloadsToWiFi
property onOfflineManager
to specify if an active WiFi connection is required for downloading media for offline playbackOfflineManagerDelegate
which will act as the delegate forOfflineManager
areSuspendedDownloadsRestored
property onOfflineManager
to specify if theOfflineManager
has finished restoring suspended downloads
Deprecated
BitmovinCastManager.initializeCasting(applicationId:)
andBitmovinCastManager.initializeCasting(applicationId:messageNamespace:)
in favor ofBitmovinCastManager.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 downloadaudioTracks
property toOfflineTrackSelection
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
toDrmConfig
to follow CamelCase style - Rename
DRMSystems
toDrmSystems
to follow CamelCase style
3.4.0
Released: 2021-07-20
Added
showSeekBar
andshowInfoViews
properties inSystemUserInterfaceConfig
fortvOS
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
fromPlayerEvent
toSourceEvent
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 thePlaybackFinished
event - Online playback occasionally not starting for AES-128 protected streams
StallingEnded
event being emitted afterPlaying
event- Unexpected
MetadataEvent
s for SCTE tags during seeking
Deprecated
- Deprecated
RenderFirstFrameEvent
as this event is never emitted
3.3.0
Released: 2021-06-22
Added
MetadataParsedEvent
to be emitted for inactive sources in a playlist when Daterange metadata is parsed for HLS content
Changed
- The parent type of
MetadataParsedEvent
fromPlayerEvent
toSourceEvent
.
Fixed
- Issue that
SourceConfig
s that are not downloaded for offline playback were marked as already downloaded. - Offline playback of AES-128 encrypted HLS content when only a variant playlist is used
- Removed internal extensions from public documentation
3.2.0
Released: 2021-06-08
Added
- HTTP response status code to
SourceErrorEvent.data
for failed DRM requests
3.1.0
Released: 2021-05-26
Added
isAirPlayEnabled
property inRemoteControlConfig
to enable or disable the AirPlay functionality- HTTP response status code to
SourceErrorEvent.data
for failed DRM requests
Fixed
- Incorrect value of
isPlaying
andisPaused
inside the Bitmovin Player Web UI when thePlaybackFinishedEvent
is received.
3.0.1
Released: 2021-05-11
Changed
- A
StallStartedEvent
will now be emitted after aSeekedEvent
andTimeShiftedEvent
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 aSource
already finished preloading during playback of the previousSource
- 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 theBitmovinPlayer
as the main player typePlayerFactory
to createPlayer
instancesSource
protocol as top-level typeSourceFactory
to createSource
instancesSourceState
indicating the current state of a SourcePlayer.source
that returns the currently active sourcePlayer.load(source:)
to load a singleSource
PlaylistConfig
to configure playback of multiple sourcesPlaylistOptions
to customize additional playlist behaviourPlayer.playlist
namespace to control playback of multiple sourcesPlayer.load(playlistConfig:)
to load multiple SourcesPlayer.registerPlayerLayer
for custom native UI support using anAVPlayerLayer
Player.registerPlayerViewController
for custom native UI support using anAVPlayerViewController
Player.registerAdContainer
for custom native UI support to register the container view which should be used for Ad renderingTweaksConfiguration.seekToEndThreshold
to configure the threshold when seeking to the end in seconds- The sender to the each
PlayerListener
method to distinguish whichPlayer
emitted an event - Events
PlaybackTransitionEvent
to indicate a transition from oneSource
to anotherPlayerActiveEvent
to indicate the player got a source to loadPlayerInactiveEvent
to indicate when a player does not have any source anymore
Fixed
AdaptationConfig
andNetworkConfig
not extendingConfig
CloseButton
of theSettingsPanel
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 asXCFramework
- All
Configurations
were renamed toConfig
DurationChangedEvent
is no longer fired initially- Renamed
SourceItem
toSourceConfig
- Renamed
SourceItem.itemTitle
toSourceConfig.title
- Renamed
SourceItem.itemDescription
toSourceConfig.sourceDescription
- Removed
SourceConfig.drmConfigs
and introducedSourceConfig.drmConfig
to only handle a singleDrmConfig
- Removed
SourceConfig.progressiveSources
and introduceSourceConfig.progressiveSource
to only handle a singleProgressiveSource
SourceConfig.options
is no longer an optional type- Renamed
BitmovinPlayerView
toPlayerView
- Moved
Player.sourceMetadata
toSource.metadata
- Removed
BMP
prefix from all public types used fromSwift
- Increased minimum required
Google Cast SDK
version to4.4.1+
- Renamed
MediaSourceType
toSourceType
- Rewrote all abbreviations and acronyms to follow CamelCase style
- Renamed
RemoteControlAPI
toRemoteControlApi
- Renamed
UserInterfaceAPI
toUserInterfaceApi
- 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 thePlayerConfig
to thePlayerFactory
insteadPlayerConfig.sourceConfig
- Loading a source from thePlayerConfig
is no longer supportedConfigurationUpdatedEvent
PlayerView
- TheBitmovinPlayerView
from v2 became the newPlayerView
PlaybackType
SourceConfig.drmConfigs
SourceConfig.add(drmConfig:)
Player.streamType
- UseSourceConfig.type
insteadJsonable
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
andDashSource
.SourceConfig
should instead be constructed using an url and the accordingSourceType
Updated 6 days ago