Release Notes (iOS)
iOS SDK Release Notes
Release notes for the v2 version of the iOS SDK can be found here.
3.97.2
Released: 2025-10-16
Added
- Include
THIRD-PARTY-NOTICES.mdfile in all published frameworks
Changed
- API signature of
HttpRequest.headersfromNSMutableDictionaryto[String: String]to improve usability from Swift. ObjC usage is unaffected.
Fixed
- Missing
SourceUnloadEventandSourceUnloadedEventbefore aSourceErrorEventis emitted when the error happens during preloading - HLS Interstitials with
CUE="PRE"orCUE="POST"were filtered out if the#EXT-X-DATERANGEtime was in the past
Removed
- Unused
DrmRequesttype
3.97.1
Released: 2025-09-26
Fixed
- UTF-8 text is decoded incorrectly when passed via
BitmovinUserInterfaceConfig.customOptions - Missing
SourceUnloadEventandSourceUnloadedEventthrough thePlayerwhen usingSourceFailureAction.dropand no upcoming Source is available
3.97.0
Released: 2025-09-19
Added
- Support for additional
CUEattribute values in HLS Interstitials viaDateRangeMetadata.cueingOptions:CUE="PRE"marks an interstitial as a pre-roll (played before main content begins)CUE="POST"marks an interstitial as a post-roll (played after main content has finished)
Changed
- Media and asset-list reloading for HLS Interstitials:
Interstitials no longer keep previously loaded resources in memory but re-fetch them from the original URLs on each playback opportunity.- The same lifecycle events as for normal loads are re-emitted:
AdManifestLoadEvent,AdManifestLoadedEvent, andDownloadFinishedEvent(forX-ASSET-LIST). - This ensures updated ad assets are always retrieved, allowing for more flexible monetization opportunities (e.g., refreshed ad content on repeated playback after seeking).
- The same lifecycle events as for normal loads are re-emitted:
3.96.0
Released: 2025-09-12
Added
TweaksConfig.sourceFailureActionto specify the action to take when aSourceresults in an errorSourceFailureAction.dropto attempt to remove an erroneousSourcefrom the playlist if possible
Changed
- Add compatibility with Google IMA SDK for tvOS (4.15.1)
- Add compatibility with Google IMA SDK for iOS (3.27.4)
Known Issues
- Google IMA iOS SDK
3.27.4introduces a memory leak where ads keep the player instance alive even after thePlayerViewis destroyed (e.g., when navigating to another View). We raised this issue (link) with the IMA team and are awaiting an update.
Suggestion: avoid using3.27.4. Earlier versions of the Google IMA SDK do not show this issue. - On iOS 26, the same video-variant playlist may be requested multiple times when loading a stream. As a result,
NetworkConfig.preprocessHttpRequestmay receive more invocations than expected.
3.95.0
Released: 2025-09-09
Added
PictureInPictureApi.isEnabledto dynamically enable or disable Picture-in-Picture at runtime, independent of the initial configuration- Toggling this property also updates the UI: when set to
false, the PiP button is removed; when set back totrue, the PiP button is shown again (if supported) - If PiP is currently active when disabling, the session is exited immediately and playback continues in the player view
- Toggling this property also updates the UI: when set to
PictureInPictureAvailabilityChangedEventto signal changes in Picture-in-Picture availability for aPlayerView. Can be observed viaUserInterfaceListener
Changed
PlayerView.pictureInPictureis now always available (non-optional) and provides dynamic control over Picture-in-Picture functionalityUserInterfaceApi.isPictureInPictureAvailablenow reflects the current, runtime status of Picture-in-Picture availability, instead of only the static configuration (PictureInPictureConfig.isPictureInPictureEnabled)
3.94.1
Released: 2025-08-08
Fixed
SourceErrorwhen playing Apple Immersive Video assets- Skip Ad button losing focus and not being able to focus it again when using BAM with System UI on tvOS
3.94.0
Released: 2025-07-28
Added
TweaksConfig.seekToEndThresholdis now also properly supported when seeking to the beginning of the DVR window in a live stream- Enable seeking to and from a Live Streams within a Playlist using
Player.playlist.seek(source:time:) - Support for
SourceOptions.startOffsetfor subsequentSources within a playlist.
Fixed
- Missing
TimeChangedEventsafter seeking into a Live Stream within a Playlist
Known issues
- When seeking into a Live Stream using
Player.playlist.seek(source:time:), thetimeattribute will be ignored - When seeking into a VOD using
Player.playlist.seek(source:time:), thetimeattribute will always override a configuredSourceOptions.startOffset. Workaround: use theSourceOptions.startOffsetas input for the seek method. - When transitioning into a Live Stream as a subsequent
Sourcewithin a playlist, playback will start slightly behind the live edge. If aEXT-X-START:TIME-OFFSETis present, it will be properly respected. Workaround: if playback is desired to always start at the live edge, set theSourceOptions.startOffsetto 0 (will override theEXT-X-START:TIME-OFFSET). - When transitioning into a Live Stream as a subsequent
Sourcewithin a playlist with a configuredSourceOptions.startOffset, a frame close to the live-edge could be visible until theSourceOptions.startOffsetis applied.
3.93.0
Released: 2025-07-10
Added
DateRangeMetadata.cueingOptions, mapping to theCUEattribute in#EXT-X-DATERANGEtags.- Support for
CUE="ONCE"on HLS Interstitials: interstitials with this value will be discarded after their first playback, preventing them from being replayed.
Fixed
Source.analytics.customDatadidn't applycustomDatafields 31 to 50AdvertisingConfig.shouldPlaySeekedOverAdItemscallback could cause playback to stay paused when scrubbing over ads that should all be discarded.
Changed
AdvertisingConfig.shouldPlaySeekedOverAdItemsdefault behaviour for HLS Interstitials:- If none of the seeked-over ads are jump-restricted (
X-RESTRICT="JUMP"), no item will play after seeking (previously, the last ad would always play). - If any of the seeked-over ads are jump-restricted, the last jump-restricted item will play after seeking (previously, the last ad would always play, no matter whether jump-restricted or not).
- If none of the seeked-over ads are jump-restricted (
- HLS Interstitials are now re-playable by default: previously, interstitials were discarded after playback, skip, or failure. Now, interstitial items will play again each time their scheduled time is reached (e.g., after seeking backwards), unless
CUE="ONCE"is set.
3.92.1
Released: 2025-07-04
Fixed
- Content never gets loaded on the Cast receiver, when the Cast device gets connected before calling
Player.load(). CastTimeChangedEvent.currentTimeandPlayer.currentTimereturns relative time instead of absolute time when casting a live stream.
3.92.0
Released: 2025-06-19
Added
- Support for HLS Interstitials using
#EXT-X-DATERANGE-based ad signaling. This enables scheduled ad breaks during live or VOD playback via timed metadata in the HLS manifest.
Supported attributes:X-ASSET-URIX-ASSET-LISTX-RESUME-OFFSETX-PLAYOUT-LIMITX-RESTRICT
Fixed
- Missing
DurationChangedEventwhen an HLS stream transitions from Live to VOD resulting in an unusable Player UI
Known Issues
- For some streams the
DurationChangedevent is missing when the stream transitions from Live to VOD indicating a potentialAVPlayerbug or stream issue. Replay andtimeShiftingis still possible but the UI will stay in live mode. - The System UI appears stuck after a stream transitioned from Live to VOD
- HLS Interstitials feature:
- The following attributes in
#EXT-X-DATERANGEtags are not currently supported:CUE="ONCE",CUE="PRE",CUE="POST". - Non-discardable interstitials are not reloaded after they have been played. When such an interstitial is played again (e.g., after seeking backward), the previously loaded asset is reused instead of being fetched again. This may affect scenarios where updated ad content or refreshed asset data is expected.
- The following attributes in
3.91.0
Released: 2025-06-16
Changed
- Improved error code documentation and search preview on the API reference
- Default value of
DownloadConfig.supportClearKeyContenttotrueto allow downloading ClearKey content by default - Live streams without
EXT-X-PROGRAM-DATE-TIMEtags will no longer have continuous relativecurrentTimevalues due to inaccuracy. - Logs will include more context information about where they are coming from. This will help Bitmovin engineers to backtrack logs to the SDK implementation.
- Updated Bitmovin Player Web UI to
3.98.0.
Deprecated
TweaksConfig.dateBasedTimeShiftingForLiveStreams, as the same behavior is now automatically enabled for HLS Live streams where#EXT-X-PROGRAM-DATE-TIMEis available andSourceLiveConfig/targetLatencyis set to any numeric value.
Fixed
PlayerView.contentOverlaynot working whenPlayerViewis initialized withoutPlayerViewConfig- Improved stability of HLS Low Latency streams when using
SourceLiveConfig.targetLatency
3.90.1
Released: 2025-06-06
Fixed
- Incorrect value of
Player.subtitleand noSubtitleChangedEventemitted when changing subtitle tracks. This fix improves subtitle track switching reliability and ensures proper integration with iOS Closed Captions settings (Settings > Accessibility > Subtitles & Captioning > Closed Captions + SDH).
3.90.0
Released: 2025-05-16
Added
AdvertisingConfig.shouldPlaySeekedOverAdItemscallback to allow customization of whichAdItems should play when a seek or time-shift operation jumps over multiple ad breaks.
This callback is triggered during any forward seek or time-shift where one or moreAdItems are scheduled between the original position and the seek target.PlayerView.contentOverlaynamespace of typeContentOverlayApito access content overlay related APIs.ContentOverlayApi.viewto allow managing content overlay subviews that appear between the video and playback control layers.
VideoBoundsChangedEventto notify about changes of the video bounds viaUserInterfaceListener.onVideoBoundsChangedPlayerView.videoBoundsto access the video bounds of the player view
Deprecated
VideoSizeChangedEventandPlayerListener.onVideoSizeChangedas the event was never emitted
Fixed
SeekEvent,SeekedEvent,TimeShiftEventandTimeShiftedEventemitted on a background thread when using PiP or System UI
3.89.0
Released: 2025-05-08
Added
- Support for AirPods touch control to pause and resume playback when
NowPlayingConfig.isNowPlayingInfoEnabledis set totrue
Fixed
- Target latency catch up did not trigger after an initial stall when joining an HLS LL stream.
automaticallyPreservesLatencynot respected after stalls during playback.- Occasional unresponsiveness of Bitmovin Player UI
Changed
- Always perform an initial attempt to reach the target latency regardless of
SourceLiveConfig.automaticallyPreservesLatencybeing set
3.88.0
Released: 2025-04-23
Added
HttpRequestType.hlsInterstitialsAssetListto identify requests for HLS Interstitial'sX-ASSET-LISTJSON file as preparation for the upcoming HLS Interstitials support.ThumbnailsApi.containerto assign the current thumbnail containerThumbnailsApi.cancelPendingRenderRequests()to cancel any pending thumbnail render requests
Changed
AdSourcenow implements value-based equality. Two instances are considered equal if all their properties are equal, rather than relying on object identity.ThumbnailsApi.renderThumbnail(forTime:toleranceBefore:toleranceAfter)andThumbnailsApi.renderThumbnail(for:time:toleranceBefore:toleranceAfter):- Behavior on multiple calls, in-progress requests are not cancelled anymore. See API documentation for details.
- Removed return value, now both methods return
Void.
Removed
- Deprecated
TweaksConfig.disableSubtitleTracksWhileSeekingwithout replacement as it is no longer required. ThumbnailsApi.registerContainer()method in favor ofThumbnailsApi.container
Fixed
SubtitleChangedEventis now properly emitted when the track selection is finished. In case of rapid subtitle track changes, the event for the last change will be emitted always but events for intermediate transitions might not be emitted as they never finished.- Improved error messages for some of the playback-related errors
- Slow thumbnail rendering when using
ThumbnailsApi.renderThumbnail(forTime:toleranceBefore:toleranceAfter)andThumbnailsApi.renderThumbnail(for:time:toleranceBefore:toleranceAfter)
3.87.0
Released: 2025-04-11
Added
- SDK version to our DocC API reference
characteristicstoSubtitleTrackandAudioTrackto accessCHARACTERISTICSattributes fromEXT-X-MEDIArenditions
Fixed
- Incorrect documentation rendering for
AdErrorEvent,PlayerErrorEvent,SourceErrorEventandOfflineErrorEvent
Changed
- When
TweaksConfig.dateBasedTimeShiftingForLiveStreamsis enabled for HLS Low Latency streams, the player will try automatically to get closer to the target latency multiple times.
Due to system limitations, there is no guarantee that the target latency can be reached.
3.86.0
Released: 2025-03-27
Added
- Documentation of error codes in API reference: https://cdn.bitmovin.com/player/ios/3/documentation/bitmovinplayer/errors
Changed
- Changed API reference to use DocC.
- The URL to the index page changed from https://cdn.bitmovin.com/player/ios/3/docs/index.html to https://cdn.bitmovin.com/player/ios/3/documentation/bitmovinplayer
- URLs to the old documentation will be redirected to the new index page in the upcoming weeks
Removed
- Obsolete player error code
1099:JsonDeserializationFailed
3.85.2
Released: 2025-03-20
Fixed
SourceOption.startOffsetnot respected on tvOS- Signature validation failure for
xcframeworkbinaries
Changed
- Extended the documentation for
TweaksConfig.timeChangedIntervalto outline the limitation of a minimum value of 1.0 during AirPlay.
3.85.1
Released: 2025-03-07
Fixed
- Incorrect absolute time via
Player.currentTime,Player.currentTime(.absoluteTime)andCastTimeUpdatedEvent.currentTimeAPIs during casting if casting was started before callingPlayer.load()
Known Issues
- Invalid signature of distributed
xcframeworkfiles due to revoked certificate. See this post for details.
3.85.0
Released: 2025-02-28
Added
- Additional error codes to
SourceError.Codefor more granularity when downloading the playlist failed2205: Downloading the playlist has failed due to an invalid manifest URL.2210: Downloading the playlist has failed due to an unhandled HTTP redirect (3xx).2220: Downloading the playlist has failed due to a client-side HTTP error (4xx).2221: Downloading the playlist has failed due to a bad request.2222: Downloading the playlist has failed due to missing or invalid authentication credentials.2223: Downloading the playlist has failed due to insufficient permissions.2224: Downloading the playlist has failed because the requested manifest could not be found.2230: Downloading the playlist has failed due to a general server-side issue (5xx).2231: Downloading the playlist has failed due to an internal server error.2232: Downloading the playlist has failed due to a bad gateway error.2233: downloading the playlist has failed because the server is temporarily unavailable.2234: Downloading the playlist has failed due to a gateway timeout.
associatedLanguagetoSubtitleTrackandAudioTrackto accessASSOC-LANGUAGEattributes fromEXT-X-MEDIArenditionsTweaksConfig.parseAdditionalMediaAttributesto control whether theASSOC-LANGUAGEattribute fromEXT-X-MEDIArenditions should be parsed
Changed
- The
SourceErrorEvent.errorCodenow contains the underlying system error code for playback failures SourceError.Code,PlayerError.CodeandOfflineError.Codeenums are no longer deprecated. Properties using those types stay deprecated.- Updated Bitmovin Player Web UI to
3.87.0. - Playlist download errors are now more granular and using the new
SourceErrorerror codes
Fixed
SourceOption.startOffsetnot respected whenPlayer.play()is called beforeonReadyevent is emittedPlayer.currentTime,Player.currentTime(.absoluteTime)andTimeChangedEvent.currentTimenot returning the correct value for live streams without#EXT-X-PROGRAM-DATE-TIMEtags after AirPlay was started or stoppedPlayer.currentTime(.relativeTime)resets value after AirPlay was started or stopped
Known Issues
- Invalid signature of distributed
xcframeworkfiles due to revoked certificate. See this post for details.
3.84.0
Released: 2025-02-10
Changed
DeficiencyData.underlyingErrorfrom optional to non-optional
Fixed
SourceOption.startOffsetnot respected when connecting to AirPlay receiver before starting playback
Removed
- Initializer
DeficiencyData(code:message:underlyingError). UseDeficiencyData(error:)instead
3.83.0
Released: 2025-02-03
Added
- Signature for all
xcframeworkbinaries to allow verification of the identity of our binaries - Support for
SourceOption.startOffsetfor live-streams when using the System UI TweaksConfig.restoreAirPlayPlaybackPositionto restore the playback position when starting AirPlay for live streams without#EXT-X-PROGRAM-DATE-TIMEtags
Fixed
- Duplicate
AirPlayAvailabilityChangedEventevents for the same value on subsequent Source loads - Playback position not restored when starting AirPlay for live streams without
#EXT-X-PROGRAM-DATE-TIMEtags
3.82.0
Released: 2025-01-17
Added
errorCodeproperty toPlayerErrorEvent,SourceErrorEvent,OfflineErrorEventandAdErrorEventto provide the raw error code.
Deprecated
codeproperty onPlayerErrorEvent,SourceErrorEvent,OfflineErrorEventandAdErrorEventin favor oferrorCodeproperty.
Fixed
- Poster image in
PlayerViewnot rendered correctly in React Native applications - Report correct error code
100viaAdErrorEventwhen VAST XML parsing fails when using Bitmovin Advertising Module EXT-X-START:TIME-OFFSETwas not respected when the stream also contains aEXT-X-PROGRAM-DATE-TIMEtag- The magnifier glass no longer appears when double tapping any text within the Bitmovin Player UI
- Played back audio track does not match the one reported as selected by the player and subsequent audio track changes do not work
3.81.0
Released: 2024-12-19
Added
- Thumbnail rendering support for custom native UI via
Player.thumbnailsThumbnailsApi.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.thumbnailsnamespace of typeThumbnailsApito access thumbnails related APIs.ThumbnailsApi.thumbnail(forTime:)to retrieve the thumbnail for a specific time, if available.
Deprecated
Player.thumbnail(forTime:)in favor ofPlayer.thumbnails.thumbnail(forTime:).
Fixed
- Missing
PlayingEventwhen callingplay()while seeking when AirPlay is active.
3.79.0
Released: 2024-12-06
Changed
- During playback of progressive ads, the UI configured through
StyleConfigis now used. Before, progressive ads were not played with a UI. This previous behaviour can be restored by settingAdItem.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
.verboselogging level forDebugConfig.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
BitmovinPlayerandBitmovinPlayerCorenow conform toSendableprotocol to support Swift Concurrency with Swift 6 PlayerViewis nowMainActorisolated to conform to Swift Concurrency requirements with Swift 6 forUIViewsubclasses- APIs in
BitmovinPlayerAnalyticsnow conform toSendableprotocol to support Swift Concurrency with Swift 6
Fixed
AdStartedEvent.indexInQueueis always0when usingAdSourceType.bitmovin- Ads from the same VAST ad tag do not play in order according to the
sequenceattribute value of the<Ad>tag when usingAdSourceType.bitmovin
Known Issues
- Stalling indicator is always displayed during ad playback when System UI is used
3.77.0
Released: 2024-10-30
Added
BitmovinPlayerandBitmovinPlayerCoreare 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.stopReceiverApplicationWhenEndingSessionto control whether the receiver application should be terminated when the user ends the session
3.76.0
Released: 2024-10-25
Added
Player.allowsAirPlayandRemoteControlConfig.allowsAirPlayto control whether AirPlay is allowedAirPlayAvailabilityChangedEventto notify about AirPlay availability changes
Deprecated
Player.isAirPlayAvailablein favor ofPlayer.allowsAirPlayAirPlayAvailableEventin favor ofAirPlayAvailabilityChangedEventRemoteControlConfig.isAirPlayEnabledin favor ofRemoteControlConfig.allowsAirPlay
3.75.0
Released: 2024-10-14
Added
ImaAdvertisingConfig.shouldPauseOnTapto control whether the ad should pause when the user taps the screen on iOS.
Changed
- During casting,
Player.currentTime,Player.currentTime(.absoluteTime)andCastTimeUpdatedEvent.currentTimeAPIs return absolute unix timestamp values instead of relative time
3.74.1
Released: 2024-10-09
Fixed
Player.timeshiftsometimes not changing playback position for specific live streams
3.74.0
Released: 2024-10-04
Changed
BufferLevelis nowopenand can be subclassed for testing purposesBufferLevel's initializer is nowpublicand 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.rawTextto 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.attributedTextto access the formatted text content of the cue. This property provides the cue's text content with attributes in theUIKitAttributesformat, 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:textinitWithStartTime:endTime:text:vttPropertiesinitWithStartTime:endTime:htmlinitWithStartTime:endTime:image
Known Issues
Cue.rawTexthas the same value asCue.textin case the caption is embedded in the manifest file
3.72.0
Released: 2024-09-19
Added
TweaksConfig.dateBasedTimeShiftingForLiveStreamsto improve accuracy of reaching target latency whenSourceLiveConfig.targetLatencyis 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.contextualActionsto allow setting contextual actions on tvOS 15 and above
Fixed
- Missing
AudioChangedEventandSubtitleChangedEventduring AirPlay when selecting tracks on the receiver with iOS 18 sender used
3.70.0
Released: 2024-09-02
Added
adQuartileFinishedmethods to Analytics SSAI API
Fixed
AdStartedEvent.clickThroughUrlwasnileven thoughAdStartedEvent.ad.clickThroughUrlwas set. Both are set to the same value now.- Unexpected
CueEnterEvents andCueExitEvents emitted after unloading a stream with side-loaded subtitles and loading a different stream
3.69.0
Released: 2024-08-23
Added
NetworkConfig.preprocessHttpRequestto preprocess HTTP requests before they are sent
Changed
- Pre-roll ads start loading on the first play intention (
PlayEvent) instead of waiting forReadyEvent. WhenPlaybackConfig.isAutoplayEnabledis set totrue, the ad will start loading simultaneously with the main content.
Fixed
NetworkConfig.preprocessHttpRequestDelegateis called two times for every FairPlay license request- Duplicated
MetadataParsedEventandMetadataEventemitted on iOS 18, tvOS 18 and visionOS 2
Deprecated
NetworkConfig.preprocessHttpRequestDelegatein favor ofNetworkConfig.preprocessHttpRequest
3.68.0
Released: 2024-08-07
Added
- The
NetworkConfigis now respected for poster image requestsHttpRequestType.mediaPosterto identify the request
NowPlayingConfigto 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.customOptionsto provide custom configuration options for a customized Bitmovin Player Web UIBitmovinUserInterfaceConfig.metadataof typeBitmovinUserInterfaceMetadatato provide default metadata values for the Bitmovin Player Web UIBitmovinUserInterfaceMetadata.titleto provide default title of the video sourceBitmovinUserInterfaceMetadata.sourceDescriptionto provide default description of the video source
BitmovinUserInterfaceConfig.uiManagerFactoryFunctionto specify a customUIManagerfactory method for the Bitmovin Player Web UI
Changed
- The poster image is now cached and not downloaded again during the lifecycle of a
Sourcee.g. when theSourceis inside a playlist andisPosterPersistentis active - Extend documentation for closures within
NetworkConfigby adding an usage example
Fixed
- Properly destroy and release
IMAAdsManagerinstances after ads finished playing
Deprecated
TweaksConfig.updatesNowPlayingInfoCenterin favor ofNowPlayingConfig.nowPlayingConfig. Enabling Now Playing information viaPlayerConfig.nowPlayingConfigwill bypass the flag, disabling AVKit's automatic updates.ImaSettings.disableNowPlayingInfoin favor ofNowPlayingConfig.nowPlayingConfig. Enabling Now Playing information viaPlayerConfig.nowPlayingConfigwill 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 ownMPRemoteCommandfor 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.enforcedMinimumBufferLevelForPlaybackto configure the minimum buffer level, in seconds, required for transitioning into the playing state. It can be used to avoid flickeringStallStartedEvent,StallEndedEventand improperTimeChangedEventinvocations caused by unexpectedAVPlayerbehaviour 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
STARTEDevent 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
MediaFileselection by ignoring unsupported MIME-Types and preferring streaming over progressive media files AdSource.videoLoadTimeoutto 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.4andSwift 5.10or newer is required to integrate the SDK
3.64.0
Released: 2024-05-29
Added
PlayerAnalyticsApi.AnalyticsSsaiApito 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.wrapperAdSystemsandVastAdData.wrapperCreativeIdsto theAd.datafor VAST ads handled by the Google IMA SDK.
Fixed
- Playback error of FairPlay content without setting the
FairPlayConfig.prepareLicensecallback. - 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.StallStartedEventandStallEndedEventare now emitted during ad loading for all ad source types (.bitmovin,.ima,.progressive).- The minimum
BitmovinPlayerCollectorversion 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.valueProviderif 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.liveConfignamespace of typeSourceLiveConfigto configure behaviour when playing live content.SourceLiveConfig.targetLatencyto configure the players offset from the live edge.SourceLiveConfig.automaticallyPreservesLatencyto configure if the current latency should be automatically preserved.SourceLiveConfig.minTimeshiftBufferDepthto configure the minimum buffer depth needed to enable time shifting in a stream.
Source.latencynamespace of typeSourceLatencyApito access latency related APIs for live-streams.SourceLatencyApi.automaticallyPreservesLatencyto dynamically configure if the current latency should be automatically preserved.SourceLatencyApi.recommendedLatencyto provide the system's recommended latency.
Player.latencynamespace of typeLatencyApito access live stream related APIs.LatencyApi.currentLatencyto get the current latency in seconds.
BitmovinUserInterfaceConfig.enableWebViewInspectingfor debugging of custom Bitmovin Player Web UIs.
Changed
- Added
DOCTYPEdeclaration to the HTML document used to render the Bitmovin Player Web UI to prevent quirks mode
Deprecated
PlayerConfig.liveConfigin 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.htmlproperty.
Changed
- When using the
LogEntryinitializer from Swift, thecodeanddataproperties 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.updatesNowPlayingInfoCenterto 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
clickThroughUrlon iOS and visionOS.
- It contains a skip button respecting the customization options from the
Changed
textproperty ofCueEnterEventandCueExitEventcontain 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.3standard while offering reliable backward compatibility down to VAST2.0.-
AdSourceType.bitmovinto 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) -
LinearAdUiConfigto customise the Bitmovin Advertising UI whenAdSourceType.bitmovinis 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.bitmovinnamespace to configure Bitmovin Advertising Module features. -
BitmovinAdvertisingConfig.macroto configure macro replacement when using Bitmovin Advertising Module. SeeVastMacroConfigfor more details. -
VastMacro,VastMacroContextandVastMacroScopeto facilitate the macro value providing process. -
Ad.clickThroughUrlOpenedcallback to track the opening of theclickThroughUrlin case a custom UI is used.
-
-
AdvertisingConfig.shouldLoadAdItem(adItem:)callback that can be used to decide whether anAdItemshould start loading. It is called once for eachAdItemwhen 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.userInterfaceTypewith value.systemdoes 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.preprocessHttpRequestDelegateandNetworkConfig.preprocessHttpResponseare now called when requesting thumbnail tracks and side-loaded subtitle tracks
Fixed
LinearAd.skippableAfterreturning0instead of.nanfor non-skippable advertisementsAdFinishedEventemitted 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
SeekedEventwhen seeking rapidly after each other across sources
3.57.1
Released: 2024-03-15
Changed
- Updated documentation on
BitmovinCastManagerOptions.enableBackgroundSessionsbehavior
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.metadataandSource.metadatanow acceptsAVMetadataItemvalues on iOS and visionOS as well- Improved documentation on
Player.maxSelectableBitratescope
3.56.3
Released: 2024-03-04
Fixed
- Duplicated
ScalingModeChangedEventdelivered 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.skipOffsetis 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 aPlayerinstanceAnalyticsPlayerConfigto configure analytics data collection onPlayerinstancesPlayerCoreFactory.createPlayer(playerConfig:)to create aPlayerinstance in case of standalone Player Core usage
- New top level factory functions for
Source:SourceFactory.createSource(sourceConfig:, sourceMetadata:)to create aSourceinstance
Changed
- The minimum
BitmovinPlayerCollectorversion 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
BitmovinPlayerandBitmovinPlayerCoreframeworks
Changed
- Updated the documentation of
Player.skipAdto 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.preprocessHttpResponseto allow modifying the response before it is passed to the player
Changed
NetworkConfig.retryHttpRequestis 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.2or newer is required to integrate the SDK. This change was required to fix a Swift Concurrency backport issue on iOS 14.CFBundleShortVersionStringno 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.1could not be used for uploading applications to App Store Connect - Ads scheduled via
player.scheduleAdfor the same playback position played back in reverse order
3.50.0
Released: 2023-12-01
Added
LicenseValidatedEventwhich is emitted when a licensing call succeeded. It contains additionalLicenseDataas returned by the license server
3.49.0
Released: 2023-11-17
Added
- Support for visionOS for the
BitmovinPlayerpackage
Changed
- The System UI is now the default UI on
visionOS - The minimum
BitmovinPlayerCollectorversion was increased to3.3.0when 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.preferredUiTypeof typeImaUiTypeto 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.playbackSpeedSelectionEnabledto provide access to theUIConfig.playbackSpeedSelectionEnabledof our Bitmovin Player Web UIBitmovinUserInterfaceConfig.enableSeekPreviewto provide access to theUIConfig.enableSeekPreviewof 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 theSourcewas added at the end, it is required to manually transition to the newSourceafterwards.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: &cancellables)
3.44.2
Released: 2023-09-11
Fixed
- Potential crash in
ConsoleLoggerin case there are unexpectedStringformatting specifiers in the log message
3.44.1
Released: 2023-09-04
Fixed
- Unexpected caching of the
FairplayConfigif it was updated through theSourceConfigon subsequent calls toOfflineManager.getOfflineContentManager(for:)
3.44.0
Released: 2023-08-28
Added
AdSource.vastLoadTimeoutwhich 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
BitmovinPlayerAnalyticsframework
3.43.0
Released: 2023-08-16
Added
TweaksConfig.discardAdsWhileCastingto control behavior when casting with advertisements scheduled
Fixed
- Settings Panel not closing on first touch on the close button
PlaybackFinishedEventemitted unnecessarily while casting.CastPlaybackFinishedEventwas already emitted for this.
Changed
- Updated Bitmovin Player Web UI to
3.50.0
Known Issues
- Due to an inconsistency in the
MARKETING_VERSIONfield, 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.0ofBitmovinAnalyticscollector library is used, but it can be updated independently from thePlayerto newer versions. If you are currently using the standaloneBitmovinAnalyticsframework 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.analyticsnamespace to control Analytics related features. SeePlayerAnalyticsApifor available APIs.Source.analyticsnamespace to control Analytics related features. SeeSourceAnalyticsApifor available APIs.PlayerAnalyticsApiAccessorto allow access to thePlayerAnalyticsApifrom Obj-CSourceAnalyticsApiAccessorto allow access to theSourceAnalyticsApifrom Obj-C
Fixed
- Duplicated
onFullscreenEnabledevents when attaching newFullscreenHandlerinstance toPlayerView - Missing
onFullscreenEnter/onFullscreenExitevents when attaching newFullscreenHandlerinstance toPlayerViewwith different fullscreen state
Known Issues
- Due to an inconsistency in the
MARKETING_VERSIONfield, 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.minimumBitratenot 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
PlaybackFinishedEventemitted unnecessarily while casting.CastPlaybackFinishedEventwas already emitted for this.
3.41.0
Released: 2023-06-26
Added
TimelineMarkerAPI to represent a timeline marker that can be visualised in the player UIInterstitialMarkerto mark time range of an interstitial for asset when presented in tvOS system UISourceConfig.markersto add a list ofTimelineMarkers of typeInterstitialMarkerSource.markersto add a list ofTimelineMarkers of typeInterstitialMarkerTimelineMarkerEnterEventandTimelineMarkerExitEventSystemUserInterfaceConfig.timeToSeekAfterUserSeekedwhich 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
BitmovinPlayerCoreframework to lay the groundwork for modularization. SeeChangedsection for more details.- A modern way to subscribe to
Player,SourceandPlayerViewevents using combine:Player.events,Source.eventsandPlayerView.eventsnamespaces for accessing event publishersPlayerEventsApi.onfor subscribing toPlayerEvents orSourceEvents onPlayerusing Combine frameworkSourceEventsApi.onfor subscribing toSourceEvents onSourceusing Combine frameworkPlayerViewEventsApi.onfor subscribing toPlayerViewEvents onPlayerViewusing Combine framework
FairplayLicenseAcquiredEventwithPlayerListener.onFairplayLicenseAcquiredandSourceListener.onFairplayLicenseAcquiredlisteners to get notified when a FairPlay license is successfully acquired- The possibility of renewing an expiring FairPlay license:
SourceDrmFairplayApi.renewExpiringLicensefor renewing an expiring FairPlay licenseSource.drmnamespace for access DRM specific APIs on a sourceSource.drm.fairplaynamespace for access FairPlay DRM specific APIs on a sourceSourceDrmApi.fairPlaynamespace for access FairPlay DRM specific APIs on a source
- SwiftUI support:
VideoPlayerViewfor built-in SwiftUI support
- Allow custom Bitmovin Player Web UI to access current source's
metadata
Changed
- From
3.40.0onwards, theBitmovinPlayerframework is a collection of multiple frameworks which defines the finalPlayerproduct.
For now, the only dependency is theBitmovinPlayerCoreframework. 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
Playerchanges 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,PictureInPictureExitedEventandScalingModeChangedEventare now conforming toPlayerViewEventinstead ofPlayerEvent
Fixed
SourceConfig.options.startOffsetnot being respected when using Chromecast
3.37.2
Released: 2023-04-24
Fixed
- Stalling when a progressive source is loaded into a
Playerinstance 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
Loggerand related componentsLogLevel,LogSenderandLogEntryfor the logging facilityLoggingConfigto provide logging related configuration optionsDebugConfig.loggingto configure logging in the SDKBitmovinUserInterfaceConfig.forceSubtitlesIntoViewContainerto provide access to theUIConfig.forceSubtitlesIntoViewContainerof our Bitmovin Player Web UITweaksConfig.delayInitialSubtitleSelectionwhich 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.forceSubtitlesIntoViewContainertotrueper default in our Bitmovin Player Web UI
Deprecated
PlayerWarningEvent,SourceWarningEvent,PlayerListener.onPlayerWarningandSourceListener.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
Playergets 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.1or newer is required to integrate the SDK
Fixed
SourceUnloadEventandSourceUnloadedEventare now emitted correctly after (and not before) thePlayerErrorEventwhen a player error occursDestroyEventis now emitted correctly after (and not before) thePlayerErrorEventwhen 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.timeShiftreturning0after time-shifting when the System UI is used.TimeShiftEvent.timeShiftreturning0when the System UI is used for time-shifting.- Missing
PausedEventduring group playback when pausing right after seeking
3.34.0
Released: 2023-01-19
Added
PlayerView.pictureInPictureAPI namespace to group Picture-in-Picture related APIs together going forwardPictureInPictureApi.showSkipControlsto dynamically specify if skip-backward and skip-forward buttons are visible when Picture-in-Picture is active on iOSPictureInPictureConfig.restoreUserInterfaceHandlerto provide the possibility to restore the user interface before Picture-in-Picture stops
3.33.0
Released: 2023-01-17
Added
BitmovinCastManagerOptions.deviceDiscoveryModeto 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.isCustomHlsLoadingEnabledwith valuetrue - Missing
PausedEventwhen 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
PlayerViewConfigto configurePlayerViewbehaviorPictureInPictureConfigto group configurations for Picture-in-Picture playbackshowSkipControlsto specify if skip-backward and skip-forward buttons are visible when Picture-in-Picture is active on iOSshouldEnterOnBackgroundto specify if Picture-in-Picture playback should start automatically when the App enters background
PlayerView(player:,frame:,playerViewConfig:)initializer to thePlayerViewto allow setting the newPlayerViewConfig.dSYMand.bcsymbolmapfiles to XCFramework product in order to support crash report symbolication
Deprecated
PlaybackConfig.isPictureInPictureEnabledin favor ofPictureInPictureConfig.isEnabled
Removed
- Deprecated
RenderFirstFrameEventevent data object andonRenderFirstFrameevent listener fromPlayerListener
3.31.0
Released: 2022-12-06
Added
Player.sharePlaynamespace 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.sharePlaynamespace offers the following APIs:coordinate(with groupSession:)lets the player join thegroupSessionto allow group playbackisInGroupSessiondescribes 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 toisSuspendeddescribes whether the player is currently suspended and not able to participate in group playbacksuspensionReasonsdescribes why the player is currently not able to participate in group playback
NetworkConfig.retryHttpRequestcallback 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
Sourceis 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
PlayerConfigfromopentofinalto restrict subclassing
Removed
NSCopyingconformance forConfigConfigas super type from all configs
Fixed
- Endless stalling after seeking on iOS 16.1 when
TweaksConfig.unstallingBehaviouris set to.aggressivefor HLS assets - Bad structure of
TweaksConfig.isCustomHlsLoadingEnableddocumentation
3.29.0
Released: 2022-11-08
Added
ImaSettingstype to improve usability when Google IMA SDK is usedImaAdsManagertype to improve usability when Google IMA SDK is usedVideoPlaybackQualityChangedEventwhich is emitted when the playback video quality changes
Changed
- Improved documentation on
AdBreak.adsto state limitations AdvertisingConfig.beforeInitializationproperty now uses our ownImaSettingstype instead of Google IMA SDK to improve usabilityAdvertisingConfig.onAdsManagerAvailableproperty now uses our ownImaAdsManagertype instead of Google IMA SDK to improve usability
Removed
autoPlayAdBreaksproperty when usingIMASettingsfromAdvertisingConfig.beforeInitialization, as using this property has no effect on ad playbackplayerTypeproperty when usingIMASettingsfromAdvertisingConfig.beforeInitialization, as using this property has no effect on ad playbackenableDebugModeproperty when usingIMASettingsfromAdvertisingConfig.beforeInitialization, as using this property has no effect on ad playbackdelegateproperty when usingIMAAdsManagerfromAdvertisingConfig.onAdsManagerAvailable, as using this caused undefined behavior, potentially breaking playbackadPlaybackInfoproperty when usingIMAAdsManagerfromAdvertisingConfig.onAdsManagerAvailable, as all of this information is available viaPlayerAPI during ad playbackvolumeproperty when usingIMAAdsManagerfromAdvertisingConfig.onAdsManagerAvailable, as this is available viaPlayer.volumeAPI during ad playbackdelegateproperty when usingIMAAdsManagerfromAdvertisingConfig.onAdsManagerAvailable, as using this caused undefined behaviorinitialize(with:)when usingIMAAdsManagerfromAdvertisingConfig.onAdsManagerAvailable, as this had no effectstart()method when usingIMAAdsManagerfromAdvertisingConfig.onAdsManagerAvailable, as ads are starting automatically when scheduled if playing, or can be started using viaPlayer.play()pause()method when usingIMAAdsManagerfromAdvertisingConfig.onAdsManagerAvailable, as this is available viaPlayer.pause()API during ad playbackresume()method when usingIMAAdsManagerfromAdvertisingConfig.onAdsManagerAvailable, as this is available viaPlayer.play()API during ad playbackskip()method when usingIMAAdsManagerfromAdvertisingConfig.onAdsManagerAvailable, as this is available viaPlayer.skipAd()API during ad playbackclicked()when usingIMAAdsManagerfromAdvertisingConfig.onAdsManagerAvailable, as this API had no effect when useddestroy()when usingIMAAdsManagerfromAdvertisingConfig.onAdsManagerAvailable, as using this caused undefined behavior, potentially breaking playback
Fixed
Seek/TimeShiftandSeeked/TimeShiftedevent emitting when multiple seek or timeShift operations are done after each other- Missing
onVideoDownloadQualityChangedlistener method inSourceListener
3.28.0
Released: 2022-09-27
Added
player.isOutputObscuredproperty that returns whether visual output is obscured due to insufficient external protection for the content.OutputObscuredEventandOutputUnobscuredEventwhich are emitted whenplayer.isOutputObscuredchanges its value
Deprecated
TweaksConfig.disableSubtitleTracksWhileSeekingwithout replacement
3.27.0
Released: 2022-09-13
Added
SystemUiApi.customInfoViewControllerswhich allows adding custom info view controllers that are presented as content tabs on tvOS 15 and above- Event emitting for
Seek/TimeShiftandSeeked/TimeShiftedevents 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 aSourceErrorEvent. SeeonSourceErrorfor details.
3.25.0
Released: 2022-08-16
Changed
- Change
TimeModeto a@frozenenum SourceConfig.metadatain Swift now uses[String: Any]type
Removed
- Deprecated APIs from
SourceConfig:HlsSourceDashSourceProgressiveSourceSourceConfiginitializers:init(adaptiveSource:)init(HlsSource)initWithDASHSource:initWithProgressiveSource:
SourceConfigproperties and methods:urlForType:hasSourceOfType:addSource:error:addAdaptiveSource:error:addProgressiveSource:error:
AdaptiveSource,DASHSource,HLSSource,ProgressiveSource,MediaSourceclasses
Fixed
CueExitEvents 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.infoViewActionswhich 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-TIMEtag 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
PlayerViewsubclassing for a custom view implementation
3.23.0
Released: 2022-07-05
Added
PlayerFactory.sdkVersionto retrieve the current version of the BitmovinPlayer SDKSystemUserInterfaceConfig.transportBarCustomMenuItemsto configure custom transport bar items on tvOS 15 and abovePlayerView.systemUiAPI namespace of typeSystemUiApifor interactions regarding the system UISystemUiApi.transportBarCustomMenuItemswhich allows dynamically changing custom transport bar items on tvOS 15 and aboveAdvertisingConfig.imaproperty andImaAdvertisingConfigtype to customize Google IMA SDKImaAdvertisingConfig.adAttributionUiModeto customize Ad attribution appearance when using Google IMA SDK
Fixed
- Setting
PlayerView.scalingModehaving 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.totalNumberOfAdsandAdBreakFinishedEvent.adBreak.totalNumberOfAdsproperties 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.subtitlenot properly respected on tvOS resulting in displaying the system UIAdStartedEvent.indexInQueuealways returned0instead of the proper value
3.21.0
Released: 2022-06-07
Added
- Ads support on tvOS
- Google IMA tvOS SDK
4.6.1and higher - Progressive ads
- Google IMA tvOS SDK
player.playlist.add(source:at:)to dynamically addSources into the playlistplayer.playlist.add(source:)to dynamically addSources at the end of the playlistplayer.playlist.remove(sourceAt:)to dynamically removeSources from the playlistSourceAddedEventto notify about newSources added into the playlistSourceRemovedEventto notify about aSources removed from the playlistPlaylistOptions.preloadAllSourcesflag 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
Sourcewhile casting - UI seekbar flickering when loading a live-stream while casting
3.20.0
Released: 2022-05-24
Added
- Support for
PreprocessHttpRequestDelegateof theNetworkConfigfor HLS Playlist requests
Fixed
- Incorrect
onCastTimeUpdatedevent fired after pausing the player while casting - During casting, after pausing playback and seeing the expected
onCastPausedevent, an incorrect event sequence ofonCastPlaying,onCastTimeUpdatedandonCastPausedis seen
3.19.0
Released: 2022-05-10
Added
ceatoSubtitleFormatto represent closed captions
Changed
- Type of
positionfromString?toCuePosition?inCueEvent,CueEnterEvent,CueExitEventandCueParsedEvent
Fixed
- Positioning information not available on
CueEnterEventandCueExitEventfor closed caption tracks hideFirstFramenot working when usingUserInterfaceType.system
3.18.0
Released: 2022-04-12
Removed
AudioQualityas it was unused
Fixed
- Player getting stuck when new source is loaded directly from
onSourceErrorlistener SourceErrorEventemitted twice when new source is loaded directly fromonSourceErrorlistener- Missing
AdErrorEventevent 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
replayModeproperty to thePlaylistOptionsto make playlist replay behavior configurable
Removed
- Support for Bitmovin Player Web UI below version
3.19.0
Fixed
offlineDrmLicenseInformation.isDrmLicenseExpiredis always showing as expired for FPS protected content- Background Playback not working when
uiEnabledis false
Changed
OfflineContentManager.offlineDrmLicenseInformationto 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.isDrmLicenseExpiredin favor of optionalOfflineContentManager.offlineDrmLicenseInformationvalue
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,SubtitleAddedEventandCueParsedEventto be emitted for inactive sources in a playlist
Fixed
- Incorrect SCTE tag timing when the initial variant playlist has a
EXT-X-MEDIA-SEQUENCEof 0 CueEnter.textproperty containing<br>as new-line representation instead of\nCueEnter.htmlproperty containing\nas new-line representation instead of<br>for externalSubtitleTracksCueEnter.htmlis empty forSubtitleTracks that are present in the manifest
Changed
SubtitleRemovedEvent,SubtitleChangedEvent,SubtitleAddedEventandCueParsedEventare now conforming toSourceEventinstead ofPlayerEventCueEventis now a protocol instead of a class conforming toPlayerEvent
3.15.0
Released: 2022-03-01
Added
isCastEnabledproperty to theRemoteControlConfigto enable or disable casting functionality for a player instance- Support for
IDandCLASSproperties forEXT-X-DATERANGEmetadata
Fixed
- Some internal events are emitted through the
onEventlistener method
3.14.0
Released: 2022-02-16
Added
MetadataParsedEventto be emitted for inactive sources in a playlist when SCTE metadata is parsed for HLS contentMetadataParsedEventto be emitted for inactive sources in a playlist when Id3 metadata is parsed for HLS content- Allow seeking and time shifting as soon as
PlayerActiveEventis seen. Before, it was required to wait until theReadyEventis received. - Support for negative values for
player.playbackSpeedto allow reverse playback Player.canPlayAtPlaybackSpeedAPI to check if givenplaybackSpeedvalue is supported by the currently loaded source
Changed
VideoDownloadQualityChangedEventis now conforming toSourceEventinstead ofPlayerEvent
Fixed
- Missing
TimeShiftEventandTimeShiftedEventon 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
Sourcefrom aPlayerErrorEventor aSourceErrorEventdoes not work - Loading a new
Sourcefrom aPlaybackFinishedEventsometimes does not start playback automatically whenPlaybackConfig.isAutoPlayEnabledis set totrue - When our default Bitmovin Player Web UI is used it can happen that the label of an
AudioTrackkeeps 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
Sourcefrom aPlayerErrorEventor aSourceErrorEventdoes not work - Loading a new
Sourcefrom aPlaybackFinishedEventsometimes does not start playback automatically whenPlaybackConfig.isAutoPlayEnabledis set totrue - When our default Bitmovin Player Web UI is used it can happen that the label of an
AudioTrackkeeps the value of the previous source
3.12.0
Released: 2022-01-18
Added
HttpRequestTypeenum when used from SwiftDownloadFinishedEvent.requestTypeto make use of the newHttpRequestTypeenum
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
PlayEventis fired too late whenPlaybackConfiguration.isAutoplayEnabledis set totrue- Documentation generation for various types
- Missing documentation for tvOS only properties
Deprecated
HttpRequestTypes constants when used from Swift in favour of the newHttpRequestTypeenumDownloadFinishedEvent.downloadTypein favour of the new properly typedrequestTypeproperty
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
Sourcefrom aPlayerErrorEventor aSourceErrorEventdoes not work - Loading a new
Sourcefrom aPlaybackFinishedEventsometimes does not start playback automatically whenPlaybackConfig.isAutoPlayEnabledis set totrue - When our default Bitmovin Player Web UI is used it can happen that the label of an
AudioTrackkeeps 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
PlayingEventwhenSourceOptions.startOffsetis configured andPlaybackConfiguration.isAutoplayEnabledis 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
Sourcefrom aPlayerErrorEventor aSourceErrorEventdoes not work - Loading a new
Sourcefrom aPlaybackFinishedEventsometimes does not start playback automatically whenPlaybackConfig.isAutoPlayEnabledis set totrue - When our default Bitmovin Player Web UI is used it can happen that the label of an
AudioTrackkeeps 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.2to this version
3.10.0
Released: 2021-12-07
Added
OfflineContentManagerto manage all offline content and offline DRM related tasks for a singleSourceConfigOfflineContentManagerListenerto receive updates regarding offline content and offline DRM related tasksOfflineManager.offlineContentManager(for:)to retrieve aOfflineContentManagerinstance for a certainSourceConfigOfflineEventas parent type for all other events emitted by anOfflineContentManagerAvailableTracksFetchedEventto get notified when the available tracks were fetchedOfflineContentLicenseExpiredEventto get notified when the stored license is expiredOfflineContentLicenseRenewedEventto get notified when the license was renewedContentDownloadCanceledEventto get notified when the content download was cancelledContentDownloadResumedEventto get notified when the content download was resumedContentDownloadProgressChangedEventto get notified for every progress change during the content downloadContentDownloadSuspendedEventto get notified when the content download was suspendedContentDownloadFinishedEventto get notified when the content download finished successfullyOfflineErrorEventto get notified about any error that happenedofflineContentManager(for:id:)toOfflineManagerto define a custom unique identifier forOfflineContentManagerOfflineContentManager.tweaksnamespace to control tweaks for offline content downloadsOfflineContentManagerTweaksApi.migrateDownload(remoteAssetUrl:resourceIdentifierCallback:)to enable updating download URL for offline content downloads
Changed
AudioAddedEvent,AudioChangedEventandAudioRemovedEventare now conforming toSourceEventinstead ofPlayerEventAudioAddedEvent,AudioChangedEventandAudioRemovedEventare now emitted for inactive sources in a playlist when audio events occur- Improved documentation of consequences when enabling/disabling
TweaksConfig.isCustomHlsLoadingEnabledandTweaksConfig.isNativeHlsParsingEnabled
Deprecated
- All methods on the
OfflineManagerwhich areSourceConfigrelated. From now on theOfflineContentManagershould be used OfflineManagerListenerand all its methods. From now on theOfflineContentManagerListenershould be used
Removed
- Internal types from public documentation
Fixed
- Downloading ClearKey (AES-128) protected content when
SourceConfig.titleis not set - Calling
player.audioorplayer.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
Sourcefrom aPlayerErrorEventor aSourceErrorEventdoes not work - Loading a new
Sourcefrom aPlaybackFinishedEventsometimes does not start playback automatically whenPlaybackConfig.isAutoPlayEnabledis set totrue - When our default Bitmovin Player Web UI is used it can happen that the label of an
AudioTrackkeeps 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.2to 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
Sourcefrom aPlayerErrorEventor aSourceErrorEventdoes not work - Loading a new
Sourcefrom aPlaybackFinishedEventsometimes does not start playback automatically whenPlaybackConfig.isAutoPlayEnabledis set totrue - When our default Bitmovin Player Web UI is used it can happen that the label of an
AudioTrackkeeps 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.2to 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
Sourcefrom aPlayerErrorEventor aSourceErrorEventdoes not work - Loading a new
Sourcefrom aPlaybackFinishedEventsometimes does not start playback automatically whenPlaybackConfig.isAutoPlayEnabledis set totrue - When our default Bitmovin Player Web UI is used it can happen that the label of an
AudioTrackkeeps 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.2to this version
3.9.0
Released: 2021-10-12
Added
thumbnail(forTime:)API toSourceto retrieve thumbnails for non-active sources.
Fixed
- A memory leak inside a
Sourceobject 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
Sourcefrom aPlayerErrorEventor aSourceErrorEventdoes not work - Loading a new
Sourcefrom aPlaybackFinishedEventsometimes does not start playback automatically whenPlaybackConfig.isAutoPlayEnabledis set totrue - When our default Bitmovin Player Web UI is used it can happen that the label of an
AudioTrackkeeps 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.2to this version - When upgrading to this version, FairPlay protected streams that were downloaded with a version before
2.64.2for v2 to v3 upgrade or before3.3.0for a v3 to v3 upgrade (usingOfflineManager) are not playable anymore when the device is offline
3.8.0
Released: 2021-09-28
Added
showTitleInSeekBarproperty in theSystemUserInterfaceConfigto control the visibility of the title above the seek bar on tvOS 15 and above
Fixed
- Crash when stopping the cast session after a
SourceConfigwas used for loading an asset
Changed
- The documentation for
showSeekBarandshowInfoViewson theSystemUserInterfaceConfigurationto 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
Sourcefrom aPlayerErrorEventor aSourceErrorEventdoes not work - Loading a new
Sourcefrom aPlaybackFinishedEventsometimes does not start playback automatically whenPlaybackConfig.isAutoPlayEnabledis set totrue - When our default Bitmovin Player Web UI is used it can happen that the label of an
AudioTrackkeeps 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.2to this version - When upgrading to this version, FairPlay protected streams that were downloaded with a version before
2.64.2for v2 to v3 upgrade or before3.3.0for a v3 to v3 upgrade (usingOfflineManager) are not playable anymore when the device is offline
3.7.0
Released: 2021-09-14
Added
movpkgtoSourceTypeto support playback of local MOVPKG filesprovideLicenseDataandpersistLicenseDatatoFairplayConfigfor advanced use-cases and external FairPlay license handling
Fixed
- Seeking backwards within a playlist is never finished on iOS 15
isPlayingoccasionally returnedfalseinside anonPlaylistTransitionlistener method- Bitmovin Player Web UI occasionally stays visible after a transition to a subsequent source
AirPlayToggleButtonnot updating to active state when AirPlay is active
Changed
- The
adparameter of theinitfunction in theAdStartedEventfrom Optional to non-Optional FairplayConfig.certificateUrlchanged from typeURLtoURL?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
Eventsopen for extending and changed their initializers to public for better integration support
3.6.0
Released: 2021-08-19
Added
BitmovinCastManagerOptionsto specifyapplicationId,namespaceandenableBackgroundSessionswhen initializingBitmovinCastManagerBitmovinCastManagerOptions.enableBackgroundSessionsto keep Google Cast sessions active when the app is in backgroundOfflineConfigto configure the offline functionalityOfflineConfig.restrictMediaDownloadsToWiFito specify if an active WiFi connection is required for downloading media for offline playbackOfflineManager.initializeOfflineManagerWithOfflineConfigto set theOfflineConfigOfflineManager.isOfflineManagerInitializedto check if the shared instance is already initializedrestrictMediaDownloadsToWiFiproperty onOfflineManagerto specify if an active WiFi connection is required for downloading media for offline playbackOfflineManagerDelegatewhich will act as the delegate forOfflineManagerareSuspendedDownloadsRestoredproperty onOfflineManagerto specify if theOfflineManagerhas 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
OfflineAudioTrackmodel that represents audio track for offline downloadaudioTracksproperty toOfflineTrackSelectionfor 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
AdErrorEventopen - Rename
DRMConfigtoDrmConfigto follow CamelCase style - Rename
DRMSystemstoDrmSystemsto follow CamelCase style
3.4.0
Released: 2021-07-20
Added
showSeekBarandshowInfoViewsproperties inSystemUserInterfaceConfigfortvOSto 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
DrmDataParsedEventfromPlayerEventtoSourceEvent DrmDataParsedEventto 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
TimeChangedevents when calling play right after thePlaybackFinishedevent - Online playback occasionally not starting for AES-128 protected streams
StallingEndedevent being emitted afterPlayingevent- Unexpected
MetadataEvents for SCTE tags during seeking
Deprecated
- Deprecated
RenderFirstFrameEventas this event is never emitted
3.3.0
Released: 2021-06-22
Added
MetadataParsedEventto be emitted for inactive sources in a playlist when Daterange metadata is parsed for HLS content
Changed
- The parent type of
MetadataParsedEventfromPlayerEventtoSourceEvent.
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.datafor failed DRM requests
3.1.0
Released: 2021-05-26
Added
isAirPlayEnabledproperty inRemoteControlConfigto enable or disable the AirPlay functionality- HTTP response status code to
SourceErrorEvent.datafor failed DRM requests
Fixed
- Incorrect value of
isPlayingandisPausedinside the Bitmovin Player Web UI when thePlaybackFinishedEventis received.
3.0.1
Released: 2021-05-11
Changed
- A
StallStartedEventwill now be emitted after aSeekedEventandTimeShiftedEventif 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.loadingStatewhen the following event listeners were called:SourceLoad/SourceLoaded/SourceUnload/SourceLoaded - Additional
SourceLoadedevents when aSourcealready 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 Playerprotocol, which replaces theBitmovinPlayeras the main player typePlayerFactoryto createPlayerinstancesSourceprotocol as top-level typeSourceFactoryto createSourceinstancesSourceStateindicating the current state of a SourcePlayer.sourcethat returns the currently active sourcePlayer.load(source:)to load a singleSourcePlaylistConfigto configure playback of multiple sourcesPlaylistOptionsto customize additional playlist behaviourPlayer.playlistnamespace to control playback of multiple sourcesPlayer.load(playlistConfig:)to load multiple SourcesPlayer.registerPlayerLayerfor custom native UI support using anAVPlayerLayerPlayer.registerPlayerViewControllerfor custom native UI support using anAVPlayerViewControllerPlayer.registerAdContainerfor custom native UI support to register the container view which should be used for Ad renderingTweaksConfiguration.seekToEndThresholdto configure the threshold when seeking to the end in seconds- The sender to the each
PlayerListenermethod to distinguish whichPlayeremitted an event - Events
PlaybackTransitionEventto indicate a transition from oneSourceto anotherPlayerActiveEventto indicate the player got a source to loadPlayerInactiveEventto indicate when a player does not have any source anymore
Fixed
AdaptationConfigandNetworkConfignot extendingConfigCloseButtonof theSettingsPanelsliding 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
BitmovinPlayerframework is now shipped asXCFramework - All
Configurationswere renamed toConfig DurationChangedEventis no longer fired initially- Renamed
SourceItemtoSourceConfig - Renamed
SourceItem.itemTitletoSourceConfig.title - Renamed
SourceItem.itemDescriptiontoSourceConfig.sourceDescription - Removed
SourceConfig.drmConfigsand introducedSourceConfig.drmConfigto only handle a singleDrmConfig - Removed
SourceConfig.progressiveSourcesand introduceSourceConfig.progressiveSourceto only handle a singleProgressiveSource SourceConfig.optionsis no longer an optional type- Renamed
BitmovinPlayerViewtoPlayerView - Moved
Player.sourceMetadatatoSource.metadata - Removed
BMPprefix from all public types used fromSwift - Increased minimum required
Google Cast SDKversion to4.4.1+ - Renamed
MediaSourceTypetoSourceType - Rewrote all abbreviations and acronyms to follow CamelCase style
- Renamed
RemoteControlAPItoRemoteControlApi - Renamed
UserInterfaceAPItoUserInterfaceApi - CAF is now used as the default cast receiver
- Bitmovin Player Web UI
3.25.0is now used as the default UI
Removed
Player.setup- Pass thePlayerConfigto thePlayerFactoryinsteadPlayerConfig.sourceConfig- Loading a source from thePlayerConfigis no longer supportedConfigurationUpdatedEventPlayerView- TheBitmovinPlayerViewfrom v2 became the newPlayerViewPlaybackTypeSourceConfig.drmConfigsSourceConfig.add(drmConfig:)Player.streamType- UseSourceConfig.typeinsteadJsonableimplementation- 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,ProgressiveSourceandDashSource.SourceConfigshould instead be constructed using an url and the accordingSourceType
Updated 12 days ago