Release Notes (Android)
Android SDK Release Notes
Release notes for the v2 version of the Android SDK can be found here.
3.132.1
Released: 2025-11-05
Fixed
- Image Media Playlist thumbnails with root-relative URIs (starting with
/) fail to load due to incorrect URI resolution
3.132.0
Released: 2025-11-03
Fixed
- Rare
NullPointerExceptionthrown when callingplayer.load - VideoQualities/AudioQualities/AudioTracks occasionally become empty during Multi-Period DASH (e.g. SSAI) live playback
Changed
- Updated Bitmovin Analytics collector dependency to version
3.21.0
3.131.0
Released: 2025-10-24
Added
AdvertisingConfig.shouldPlaySeekedOverAdItemsto allow customization of which ad items should play when a seek or timeshift operation jumps over ad breaksAudioQuality.channelCountcontaining information about the channels of the given audio quality
Fixed
PlayerEvent.DownloadFinishedandSourceEvent.RetryPlaybackAttemptnot logged whenDebugConfig.isLoggingEnabledwas enabled
3.130.0
Released: 2025-10-24
This version was not released publicly.
3.129.0
Released: 2025-10-17
Fixed
- All HLS Interstitials scheduled before the live edge on live streams are triggered on playback start
Source.getThumbnailreturning null after a Live to VoD transition when availabilityStartTime was non zero
Changed
- Improved handling of unset resume offset for HLS interstitials
3.128.0
Released: 2025-10-10
Added
- Support
X-PLAYOUT-LIMITfor HLS interstitials SourceEvent.RetryPlaybackAttemptto signal that the player is attempting to recover from an error as requested byRetryPlaybackCallback- Ability to customizing VAST media file selection through
BitmovinAdvertisingConfig.onSelectAdQuality
Fixed
- HLS Interstitials without a
.m3u8path component failed to play - Rare app crash due to an uncaught exception on source load error when
RetryPlaybackCallbackis set
3.127.0
Released: 2025-09-26
Added
- Support
X-RESTRICT="SKIP"on interstitials. Make Interstitals per default skippable with 0.0 skip offset. - Honor HLS interstitial
X-RESUME-OFFSETvalues when they are set. UnsetX-RESUME-OFFSETsupport is limited and may not work for all configurations.
Fixed
- One specific coroutine Job is never cancelled for setups where no ad is scheduled
AdItem.replaceContentDurationmight be applied from the wrong playback position in live streams when timeshifting into adsAdStartedemitted on Ad load instead of playback start forAdSourceType.Progressiveads
Changed
- Internal coroutine management improvement to avoid coroutine leaks beyond the player life
- Updated Bitmovin Analytics collector dependency to version
3.20.1
3.126.1
Released: 2025-09-19
Added
- Error and warning page top level documentation for easier navigation and discoverability: [
Documentation for all warning and error codes](https://cdn.bitmovin.com/player/android/3.126.1/docs/player-core/-error and warning codes/index.html)
Fixed
RetryPlaybackConfig.retryPlaybackCallbackcalled even if the player still had internal recovery strategy available. It is now called only as a last resort before an error is emitted
3.126.0
Released: 2025-09-12
Added
- More context to
RetryPlaybackCallback:RetryPlaybackContext.errorEventto provide the full context on the error to be recovered.RetryPlaybackContext.sourcethat contains the source that caused the error
Fixed
- Bitmovin ad media file selection sometimes wrongly selecting unsupported mime type
video/x-flv
Changed
- Default Bitmovin Web UI version to
3.102.0 - Ads of type
AdSourceType.Bitmovinare now selecting the media file depending on the available bandwidth
Removed
RetryPlaybackContext.ErrorCode, superseded byRetryPlaybackContext.errorEvent
3.125.0
Released: 2025-09-03
Added
- Support for CUE tag (PRE, POST and ONCE) for Hls Interstitial scheduling
RetryPlaybackAction.SkipToNextSourceto skip to the next source on error instead of stopping playback
Changed
RetryPlaybackConfig.retryPlaybackCallbackis now called to attempt recovery for most errors
3.124.0
Released: 2025-08-29
Added
TweaksConfig.enableHlsInterstitialsto enable playback of HLS Interstitials. Note that this is still under development and some functionality is missing or not stable.HttpRequestType.HlsInterstitialsAssetListto indicate downloading of the HLS Interstitial asset list
Fixed
- Missing
MediaTrackRolefor HLSTrackswith characteristicspublic.accessibility.describes-music-and-sound,public.accessibility.transcribes-spoken-dialogorpublic.easy-to-read
Changed
-
Kotlin version to
2.1.21. If your project uses Kotlin, it needs to be at least on2.0.0. -
Dagger version to
2.57 -
Updated Bitmovin Analytics collector dependency to version
3.20.0 -
Updated IMA SDK dependency to version
3.37.0.
With this update, clients using the IMA SDK must switch to the+jasonrelease in order to avoid dependency problems with media3.
Additionally, this and future versions of the IMA SDK requires the app to use desugaring. Read more here: https://developer.android.com/studio/write/java8-support#library-desugaring and about integrating IMA here: https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/get-started#2.-add-the-ima-sdk-to-your-project// build.gradle.kts android { + compileOptions { + isCoreLibraryDesugaringEnabled = true + } } dependencies { + coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5") - implementation("com.bitmovin.player:player:3.124.0") + implementation("com.bitmovin.player:player:3.124.0+jason") } -
Setting
DebugConfig.isLoggingEnabledtotruewill force theAnalyticsConfig.logLeveltoLogLevel.DEBUG
3.123.0
Released: 2025-08-22
Added
TweaksConfig.relaxedPeriodDiscardingForLiveStreamsto change the internal media period discarding behaviour for live streams. This is mainly relevant for VoD to live transitions in playlists.
3.122.0
Released: 2025-08-14
Changed
- Video Decoder's PerfomancePoint are now ignored if incoherent with the CDD requirements even on Android 15 or later. This change allows for more reliable playback on device incorectly reporting their video decoding capabilities. For instance, the Player will now attempt to play 50fps SD DRM videos even if a device's hardware decoder reports it as unsupported, as this is typically within the capabilities of devices compliant with the CDD
3.121.0
Released: 2025-08-08
Added
- VMAP support for Bitmovin Advertising Module. To handle VMAP ads, schedule
AdItemusingAdSourceType.Bitmovin AdItem.bitmovinAdTagLoadingto fetch ad tags and process VMAP ads using the Bitmovin Advertising Module, while handling the VAST and ad playback with the associatedAdSourceTypeExperimentalBitmovinApiannotation which indicates experimental API
Fixed
Player.isAdmight be indicating ad playback forAdSourceType.Bitmovinads, when they are still loading or are dismissed withAdvertisingConfig.shouldPlayAdBreak
3.120.0
Released: 2025-08-03
Changed
- Internal improvement to seeking from VoD source to Live source
3.119.0
Released: 2025-07-25
Added
- Support for Image Media Playlists for HLS live streams.
Changed
- Updated Bitmovin Analytics collector dependency to version
3.18.0 - Update Dokka (documentation generator) to
2.0.0
Removed
TweaksConfig.enableImageMediaPlaylistThumbnailParsingForLive. (See added section for more details)
3.118.0
Released: 2025-07-14
Fixed
Player.preloadDrmLicensecauses aPlayerEvent.Warningto be emitted on API level 30 and lower and might not preload the license properly.
Changed
- Integrated changes from
Media3 ExoPlayerversion1.6.1 - The default
Cue.lineAnchorof a region is now alwaysAnchorTypeStart. It used to beAnchorTypeStartorAnchorTypeMiddledepending on theCue.line - Updated Bitmovin Analytics collector dependency to version
3.17.1
Removed
TweaksConfig.shouldApplyTtmlRegionWorkaroundas support for TTML attributes defined in a Region's Style has improved
3.117.0
Released: 2025-07-08
Added
NetworkEngine.HttpURLConnection.allowCrossProtocolRedirects, enabling customization of HTTP url connection engine behavior when following cross-protocol redirects
Fixed
- Rare
IllegalArgumentExceptionwhen using the Cronet network engine, related to thread handling during HTTP response processing
Known Issues
Player.preloadDrmLicensecauses aPlayerEvent.Warningto be emitted on API level 30 and lower and might not preload the license properly.
Please use Player version3.118.0+.
3.116.0
Released: 2025-07-04
Fixed
- Loading a source failing with a
SerializationExceptionwhenSourceConfig.liveConfigis notnulland using the Bitmovin Player Web UI
Known Issues
Player.preloadDrmLicensecauses aPlayerEvent.Warningto be emitted on API level 30 and lower and might not preload the license properly.
Please use Player version3.118.0+.
3.115.0
Released: 2025-06-27
Added
SourceNetworkConfig.engineto configure theNetworkEngineused to make network requests per source.
This replaces TweaksConfig.cronetEngineSourceAdaptationConfig.bandwidthFractionAvailableToUseto configure the fraction of the available bandwidth that a Source can use.
This replaces TweaksConfig.bandwidthFractionAvailableToUseTweaksConfig.retryPlaybackConfigto configure retry behaviour on certain playback errors
Fixed
- Issue with license validation that could lead to unexpected behavior when using the player outside of the intended environment. We strongly recommend customers to review & update their allow-list settings in the Bitmovin Dashboard > Player Licenses to ensure that all relevant Android package names are allow-listed for the Bitmovin Player license in use. For more information on how to manage allow-listing, please refer to Allow-listing packages
Known Issues
- Loading a source may fail with a
SerializationExceptionifSourceConfig.liveConfigis notnullwhen using the Bitmovin Player Web UI Player.preloadDrmLicensecauses aPlayerEvent.Warningto be emitted on API level 30 and lower and might not preload the license properly.
Please use Player version3.118.0+.
Changed
- Updated Bitmovin Analytics collector dependency to version
3.17.0
Removed
- TweaksConfig.cronetEngine in favor of the stable
SourceNetworkConfig.engine - TweaksConfig.bandwidthFractionAvailableToUse in favor of the stable
SourceAdaptationConfig.bandwidthFractionAvailableToUse TweaksConfig.limitQualityOnDrmErrorin favor of the more flexibleTweaksConfig.retryPlaybackConfig.- As an example to replace
TweaksConfig.limitQualityOnDrmErroruse following snippet:
val retryPlaybackConfig = RetryPlaybackConfig { context -> if (context.errorCode == SourceErrorCode.DrmDisallowedOperation) { Log.d("RetryPlaybackConfig", "Retrying playback with limited bitrate due to DRM disallowed operation error") // Put logic to limit bitrate on future playback attempts here RetryPlaybackAction.LimitBitrate( maxBitrate = 123456, // Replace bitrate of highest that playback should be retried with ) } else { RetryPlaybackAction.None } } tweaksConfigBuilder.setRetryPlaybackConfig(retryPlaybackConfig)- As an example to replace
3.114.0
Released: 2025-06-18
Fixed
PlayerEvent.TimeChangednot being emitted during ad playback for new playback session, when an IMA VMAP ad could not play all ads before starting a new playback session by callingPlayer.unloador directly loading new assets
Known Issues
Player.preloadDrmLicensecauses aPlayerEvent.Warningto be emitted on API level 30 and lower and might not preload the license properly.
Please use Player version3.118.0+.
Changed
SourceEvent.Errorevents to be more fine granular with a newSourceErrorCode.DrmDisallowedOperationerror code. The respective error is no longer reported with theSourceErrorCode.DrmGeneralerror code- Updated Bitmovin Analytics collector dependency to version
3.16.0
3.113.0
Released: 2025-06-10
Added
SourceErrorCode.UnsupportedStreamTypeto indicate that the stream type of the current source is not supported by the player. The error is currently only emitted when loading artp://streamAudioTrack.qualities, providing theAudioQualitys associated with theAudioTrack- Default
toStringimplementation forTrack,AudioTrack,SubtitleTrackandThumbnailTrack
Fixed
- Issue where the video decoder would freeze when switching video quality during playback of HLS low-latency streams with pre-load hints. Although rare edge cases may still occur, the frequency of freezes has been significantly reduced
Known Issues
Player.preloadDrmLicensecauses aPlayerEvent.Warningto be emitted on API level 30 and lower and might not preload the license properly.
Please use Player version3.118.0+.
Changed
- Officially support Android 16. Update
targetSdkandcompileSdkto 36
3.112.0
Released: 2025-05-28
Added
AudioTrack.associatedLanguageandSubtitleTrack.associatedLanguageto access theASSOC-LANGUAGEattribute from HLS media renditions
Fixed
- High memory usage caused by Network API when
PreprocessHttpResponseCallbackis set - Disable codec reuse when only crop rect changes as MediaCodec fails to adapt between formats that have the same decoded picture resolution but different crop
Known Issues
Player.preloadDrmLicensecauses aPlayerEvent.Warningto be emitted on API level 30 and lower and might not preload the license properly.
Please use Player version3.118.0+.
3.111.0
Released: 2025-05-23
Added
TweaksConfig.doNotSwitchQualityOnHlsPartsto disable quality switch (HLS variant adaptation)
outside of segment boundaries. This minimize stalls on quality switch when playing HLS low latency
Known Issues
Player.preloadDrmLicensecauses aPlayerEvent.Warningto be emitted on API level 30 and lower and might not preload the license properly.
Please use Player version3.118.0+.
3.110.0
Released: 2025-05-16
Added
Player.preloadDrmLicenseto preloadNagraConnectConfigDRM licensesTweaksConfig.constantBitrateSeekingEnabledto allow approximated seeking in streams that don't have a seek table (For example a legacy format of MP3)
Known Issues
Player.preloadDrmLicensecauses aPlayerEvent.Warningto be emitted on API level 30 and lower and might not preload the license properly.
Please use Player version3.118.0+.
Changed
- Updated Bitmovin Analytics collector
dependency to version3.14.2 - Add the
usePreloadHintsForBandwidthEstimationtweak to use HLS preloading hints for bandwidth estimation - Introduce a new algorithm for bandwidth estimation: exponential weighted average.
bandwidthEstimationModeallows selecting between the defaultSlidingPercentileor
the newExponentialWeightedAverage.
The existingslidingPercentileandslidingPercentileMaxSampleCounthave been moved in
SlidingPercentileasSlidingPercentile.percentileandSlidingPercentile.maxSampleCount - Add the
forceIncreasingHlsSegmentIndextweak to force the Player to reflesh the HLS playlist
on quality change
3.109.0
Released: 2025-05-09
Added
PlayerEvent.DownloadFinishedto indicate downloads not directly related to aSourceTweaksConfig.enableDrmLicenseRenewRetrythat allows enabling default retry behaviour for DRM license renewal requests in case of failureNetworkConfig.retryHttpRequestConfigto customize the retry behavior of failing HTTP requests.
Fixed
- Video tracks of unknown resolution never played in automatic selection
3.108.0
Released: 2025-04-28
Added
TweaksConfig.httpResponseTypesToPreprocessto greatly improve the memory and latency cost of
NetworkConfig.preprocessHttpResponseCallback
Fixed
- Occasional video freeze on audio timestamps discontinuities at low playback speed, affecting mostly HLS live streams with SSAI
3.107.0
Released: 2025-04-14
Added
TweaksConfig.parseSubtitlesDuringExtractionto control whether subtitles should be parsed during extraction time or during rendering timeTweaksConfig.limitQualityOnDrmErrorto try a lower quality on DRM errors
Changed
- Updated
Cronetfrom18.0.1to18.1.0 - Updated
gsonfrom2.11.0to2.12.1 - Default Bitmovin Web UI version to
3.89.0
3.106.0
Released: 2025-03-28
Added
DecoderConfig.decoderPriorityProvider, a callback interface to specify which decoder implementation the Player should
use to decode the mediaTweaksConfig.attemptVideoFreezeRecoverythat enables automatic recovery attempts from a stuck video decoder
Fixed
- Playback error when trying to play re-downloaded offline content
Changed
- Default Bitmovin Web UI version to
3.88.0
Removed
TweaksConfig.preferSoftwareDecodingForAds,TweaksConfig.preferSoftwareDecoding,TweaksConfig.enableMainContentVideoCodecInitializationFallback,TweaksConfig.enableMainContentAudioCodecInitializationFallback,TweaksConfig.enableAdContentVideoCodecInitializationFallbackandTweaksConfig.enableAdContentAudioCodecInitializationFallbackin favor ofPlaybackConfig.decoderConfig- As an example to replace
preferSoftwareDecodingForAdsuse following snippet:
val preferSoftwareDecodingForAdsDecoderPriorityProvider = object : DecoderPriorityProvider { override fun overrideDecodersPriority( context: DecoderPriorityProvider.DecoderContext, preferredDecoders: List<MediaCodecInfo> ): List<MediaCodecInfo> { if (context.isAd) { return preferredDecoders.filter { it.isSoftware } } return preferredDecoders } } playbackConfigBuilder.setDecoderConfig(DecoderConfig(preferSoftwareDecodingForAdsDecoderPriorityProvider))- As an example to replace
3.105.0
Released: 2025-03-21
Added
Player.setMaxSelectableVideoQualityForViewportSizeto provide the video viewport size to the player to constrain the automatic quality selectionPlayerViewConfig.playerMaxVideoQualityConstraintto configure ifPlayerView's size should constrain the Player's video quality selection
Fixed
- Decoder errors sometimes being wrongly reported as
PlayerErrorCode.Generalinstead ofPlayerErrorCode.DecoderGeneral OfflineContentManagerListener.onCompletedcalled with a nullofflineContentOptionson failed preparation,
leading toNullPointerExceptionin client code.onCompleteis no longer called on error.
OfflineContentManagerListener.onErrorstays the recommended way to detectOfflineContentManager.processerrors
Changed
- Integrated changes from
Media3 ExoPlayerversion1.5.1 OfflineContentManagerListener.onCompletedis no longer called on error to preventNullPointerExceptionin client code.
OfflineContentManagerListener.onErrorstays the recommended way to detectOfflineContentManager.processerrors.
See the associated "Fixed" section for more details
3.104.2
Released: 2025-03-07
Fixed
- Some error events causing
StackOverflowErrorwhen using Bitmovin Analytics collector on some devices
3.104.1
Released: 2025-02-28
Fixed
PlayerViewmight show the poster image or a black overlay when attaching aPlayerwith an activeSource- Stopping playback on non fatal DRM errors
- Source errors emitted with a generic code SourceErrorCode.DrmGeneral
instead of a more specific code, such as SourceErrorCode.DrmRequestFailed
or SourceErrorCode.DrmKeyExpired - Crash when initiating casting session in combination with
MediaSessionintegration
3.104.0
Released: 2025-02-21
Added
PlayReadyConfigto configure playback of PlayReady DRM contentPlayReadyConfig.Builderbuilder class for convenient construction ofPlayReadyConfigin JavaRemoteControlConfig.stopCastingOnErrorconfig to disable cast receiver stopping playback if the cast sender encounters an error
Fixed
- Rename
NagraConnectConfig.operationalVaulttoNagraConnectConfig.operatorVault
3.103.0
Released: 2025-02-14
Added
toStringimplementation forSourceConfigandDrmConfigwith its subclasses to provide a human-readable representation for easier debugging
Changed
- Updated Bitmovin Analytics collector dependency to version
3.14.0 - Improved thrown exception message on missing
BitmovinCastManager.updateContextcall
3.102.0
Released: 2025-02-10
Added
-
Builder classes for convenient construction of configuration objects in Java:
PlayerConfig.BuilderPlaybackConfig.BuilderAdvertisingConfig.BuilderImaConfig.BuilderBitmovinAdvertisingConfig.BuilderVastMacroConfig.BuilderAdaptationConfig.BuilderBufferConfig.BuilderLicensingConfig.BuilderLiveConfig.BuilderNetworkConfig.BuilderTweaksConfig.BuilderRemoteControlConfig.Builder
These builders simplify object creation and ensure proper configuration initialization
-
NagraConnectConfigto configure playback of NAGRA PRM content -
HttpRequestType.DrmLicenseNagraConnectto indicate NAGRA PRM related license calls in the according networking callbacks -
SourceErrorCode.DrmConfigurationFailedwhich is emitted together with a more detailed message, when the DRM setup failed -
Support for
TweaksConfig.cronetEnginein Widevine DRM -
Customer proguard rule to avoid R8 errors when Cronet isn't used
Fixed
- Potential app crash when configuring and playing unsupported DRM schemes
- Player crashing when playing live streams and falling behind the live window
- User agent not yet set when
NetworkConfig.preprocessHttpRequestCallbackwas called
Changed
- Default Bitmovin Web UI version to
3.85.0 - Make Cronet an optional dependency. Apps should depend explicitly on
com.google.android.gms:play-services-cronet
to use the Cronet HTTP engine (seeTweaksConfig.cronetEngine) TweaksConfig.cronetEngineto aFutureto allow lazy loading
Deprecated
-
Property setters in the following configurations are now deprecated, as they must not be mutated after player creation:
PlayerConfigPlaybackConfigAdaptationConfigBufferConfigBufferMediaTypeConfigLicensingConfigLiveConfigNetworkConfigTweaksConfigRemoteControlConfig
To modify these properties before player creation, use the corresponding builders instead.
Note: Due to a bug in IntelliJ IDEs, Java files may incorrectly display deprecation warnings for the getters as well
3.101.0
Released: 2025-01-24
Added
TweaksConfig.cronetEngineto use the Cronet network
stack, supporting HTTP/2 and HTTP/3PlayerViewConfig.Builderto conveniently construct aPlayerViewConfigobjectUiConfig.WebUi.Builderto conveniently construct aUiConfig.WebUiobject
Fixed
- Exception when loading a source with side-loaded subtitle tracks on Android API level 23 and below
TweaksConfig.exoPlayerCachenot used in readonly modeNo state for o with ID null is registeredexception thrown when unloading or destroying the player inPlayerEvent.Ready,PlayerEvent.PlayandPlayerEvent.Pausedevent listeners- AdEvents being sent multiple times when loading a second source with scheduled VMAP ads
Changed
- Updated Bitmovin Analytics collector dependency to version
3.13.0
3.100.2
Released: 2025-01-17
Fixed
- HLS manifest start offset is sometimes reapplied with wrong reference point on playback start
3.100.1
Released: 2025-01-10
Fixed
- Ad playback starting automatically when the playback position is changed (e.g., via seeking) to a time beyond where an ad is scheduled, even if the player is in paused state
- Using
ShouldPlayAdBreakCallback.shouldPlayAdBreakto cancel the ad break sometimes discards the next ad break in a VMAP using IMA SDK
3.100.0
Released: 2024-12-20
Added
TweaksConfig.maxForwardBufferLevelForQualityDecreaseto tweak the maximum forward buffer level required for quality decreaseTweaksConfig.bandwidthFractionAvailableToUseto tweak the fraction of the available bandwidth that the selection should consider available for useTweaksConfig.bandwidthMeterTypeto configure the bandwidth meter used to estimate the available bandwidth- Support for WebVTT subtitles with color and background styling when using
SubtitleView Cue.styledTextproperty to access the text of a cue with styling information. Use this instead of the deprecatedCue.text
Changed
- Updated IMA SDK dependency to version
3.35.1
Deprecated
Cue.text, useCue.styledTextinstead
Removed
TweaksConfig.bandwidthEstimateWeightLimitin favor ofBandwidthMeterType.Default.bandwidthEstimateWeightLimitthat can be configured viaTweaksConfig.bandwidthMeterType
3.99.0
Released: 2024-12-13
Added
TweaksConfig.loadErrorFallbackConfigfor more control on track selection fallback on networking errors
Changed
- Increased the
minSdkVersionto 21
Removed
TweaksConfig.httpStatusCodesToTryFallbackin favour ofTweaksConfig.loadErrorFallbackConfig
3.98.0
Released: 2024-12-10
Added
PlayerWarningCode.InconsistentStateInImato report on inconsistencies and resulting effects when interacting with IMAPlayerErrorCode.InconsistentStateInIntegrationto report on fatal inconsistencies with integrationssurface_typeXML attribute toPlayerViewto select betweentexture_viewandsurface_view
3.97.0
Released: 2024-12-06
Added
Player.setTextureViewandPlayerViewConfig.surfaceTypeto render video on a TextureView
3.96.0
Released: 2024-12-04
Added
TweaksConfig.disableVideoTracksWhileInBackgroundto work around a device specific issue that causes video decoding to fail when the device is put into standby
Fixed
- Poster image sometimes hidden too early when playing a live source or a source with start offset
- Setting
SourceOptions.startOffsetwithTimelineReferencePoint.Startis not precise for live streams with a growing live window
Changed
- Updated Bitmovin Analytics collector dependency to version
3.12.0
3.95.0
Released: 2024-11-29
Fixed
- Failing IMA VMAP ads sometimes not sending an AdError event
Changed
- Updated Bitmovin Analytics collector dependency to version
3.11.0
Removed
slf4j-apidependency
3.94.0
Released: 2024-11-25
Removed
slf4j-apidependency and slf4j logs. See Enable logging for instructions on logging
3.93.0
Released: 2024-11-15
Added
DebugConfig.isLoggingEnabledthat enables debug-level logging for all events sent by Bitmovin components as well as ExoPlayer logsPlayerEvent.Info,SourceEvent.Info,OfflineEvent.Infoemitted with environment and config information on component creation
Fixed
- Some error events causing
StackOverflowErrorwhen using Bitmovin Analytics collector on some devices
Removed
- TweaksConfig.enableExoPlayerDebugLogging in favor of
DebugConfig.isLoggingEnabled
3.92.0
Released: 2024-11-11
Added
- Android Media Session integration in the
player-media-sessionmodule, enhancing media control and interaction.- To start using the Bitmovin Media Session integration, add the following dependency:
implementation("com.bitmovin.player:player-media-session:<player-version>")implementation 'com.bitmovin.player:player-media-session:<player-version>'
- To start using the Bitmovin Media Session integration, add the following dependency:
MediaSession, representing an active media sessionMediaSessionServiceas a base class to handle media session interactions, supporting controller connections and notifications
Changed
- Using the
TweaksConfig.forceReuseVideoCodecReasonsreconfigures the codec on reuse. Before it was reusing the codec without reconfiguration
Deprecated
DefaultMediaDescriptorandPlayerNotificationManager. To show a player notification, use the media session integration instead.
3.91.0
Released: 2024-10-31
Added
-
PlayerEvent.StallStartedandPlayerEvent.StallEndedbeing emitted when an active ad stalls due to insufficient buffer -
PlayerViewConfig.enableComposeSurfaceSyncWorkaroundto enable a fix for the PlayerView being cropped sometimes when
using compose on Android 34 devices. This is per default disabled
Changed
Player.isStallednow returnstruewhen an active ad stalls due to insufficient buffer
3.90.0
Released: 2024-10-28
Added
UiConfig.Web.variantto set the UI variant that should be used by the Bitmovin Web UIUiConfig.Web.focusUiOnInitializationto allow the Bitmovin Web UI to request focus on initialization. Per default it will be enabled, when theTvUivariant is configured
Fixed
AdErrorevent not being sent when playing an IMA ad that causes a source related error- Spacial navigation in the Web UI does not work properly
- The main thread blocking on the playback thread very rarely resulting in ANRs
Changed
- Integrated changes from
Media3 ExoPlayerversion1.4.1 - Default Bitmovin Web UI version to
3.74.0 - Officially support Android 15. Update
targetSdkandcompileSdkto 35
3.89.0
Released: 2024-10-18
Added
TweaksConfig.forceReuseVideoCodecReasonsthat allows to force the reuse of the video codec despite a configuration change. This flag should be set only, if it is known that the codec can handle the given configuration change. APlayerEvent.Warningis emitted when such a mismatch is ignored
Fixed
SourceOptions.startOffset, when set, very rarely causing a deadlock on VoD playback start
Changed
- Downgraded Dagger from
2.51.1to2.49to resolve incompatibility issues with versions earlier than2.50.0, introduced by a breaking change in Dagger2.50.0
Removed
TweaksConfig.forceReuseVideoCodecOnColorInfoMismatchin favor ofTweaksConfig.forceReuseVideoCodecReasons
3.88.0
Released: 2024-10-14
Added
TweaksConfig.reuseAdsLoaderAcrossImaAdsto optimized playback performance for subsequent IMA ads by reusing the IMA AdsLoader component across multiple playback sessions
Changed
- Optimized playback performance for subsequent ads by reusing internal components across multiple playback sessions
- Enabled chunkless preparation for HLS streaming ads per default to improve ad startup times. The feature can be disabled by setting
TweaksConfig.allowChunklessPreparationForHlsStreamingAdstofalse - Updated Bitmovin Analytics collector dependency to version
3.10.0
3.87.0
Released: 2024-10-04
Added
UiConfig.WebUi.customOptionsto allow configuring custom options for the Bitmovin Web UI
Changed
- When
catchupConfig'sseekThresholdis set,
the player will now timeshift as soon as it has enough forward buffer instead of when the network jitter estimator estimated it safe
3.86.0
Released: 2024-09-27
Added
AdaptationConfig.qualityStabilityBalanceto balance between quality and stability when playing a live stream
Changed
- Updated Bitmovin Analytics collector dependency to version
3.9.2
3.85.0
Released: 2024-09-21
Added
AdSource.videoLoadTimeoutwhich can be used to change the default timeout to wait for a video to load before timing out. This applies to IMA ads onlyTweaksConfig.httpStatusCodesToTryFallbackwhich can be used to specify a list of HTTP status codes that should trigger a fallback to another resource if one is available
Fixed
SourceEvent.MetadataParsedevents are emitted for metadata and their wrapper metadata. Now the event is only emitted for the nested metadata.
Changed
- Optimized internal memory usage related to metadata handling
3.84.0
Released: 2024-09-13
Added
TweaksConfig.releasePlayerTimeoutto configure the timeout to release the playerTweaksConfig.detachSurfaceTimeoutto configure the timeout to detach the player from the surfaceTweaksConfig.disableAudioTracksWhileInBackgroundto work around a device specific issue that causes audio decoding to fail when the device is put into standby
3.83.0
Released: 2024-09-11
Added
TweaksConfig.forceReuseVideoCodecOnColorInfoMismatchthat allows to force the reuse of the video codec despite color information mismatch if it is known that the codec can handle the color information mismatch. APlayerEvent.Warningis emitted when such a mismatch is ignoredPlayerEvent.Infothat is being emitted when the player recreates the video decoder on quality change
3.82.0
Released: 2024-09-06
Added
TweaksConfig.assumeEmsgMetadataForHlsChunklessPreparations
to enable the parsing of EMSG timed metadata for HLS streams whenTweaksConfig.allowChunklessPreparationForHlsis enabled
Fixed
- Ad playback doesn't continue on Android TV devices after the icon info dialog has been closed when using IMA SDK
- Learn more button in IMA ads wouldn't open a new page in Android API version 30 and higher
Changed
- Updated IMA SDK dependency to version
3.33.0. This may require an update of the dependent Google Ads Play Services - Improve performance when switching from a pre-roll ad to a live stream when
targetLatencyis defined and
TweaksConfig.enableMainContentDecodingDuringAdsis set tofalseby regularly time shifting to the
keyframe closest to the live edge while the pre-roll is playing
3.81.0
Released: 2024-08-30
Changed
- Updated Bitmovin Analytics collector dependency to version
3.8.0
3.80.0
Released: 2024-08-29
Added
- Detailed error data for
PlayerEvent.Errorin case of a decoder initialization failure - Detailed error data for
PlayerEvent.Errorin case of a decoder failure
Changed
- Improve performance when switching from a preroll ad to a live stream when
targetLatencyis defined by regularly timeShifting to the live edge
while the preroll is playing
3.79.0
Released: 2024-08-23
Added
PlayerErrorCode.TimeouttoPlayerErrorCodethat will be emitted as part of aPlayerEvent.Errorwhen the player times out in an operation such as releasing resources when destroying the playerPlayerWarningCode.DecoderInitializationRetryandPlayerWarningCode.DecoderInitializationFallbackto report on internal failure recovery mechanismsTweaksConfig.enableMainContentVideoCodecInitializationFallbackandTweaksConfig.enableMainContentAudioCodecInitializationFallbackto change the decoder fallback behaviourTweaksConfig.enableAdContentVideoCodecInitializationFallbackandTweaksConfig.enableAdContentAudioCodecInitializationFallbackto change the decoder fallback behaviour during ad playback
Changed
- Enable video and audio decoder initialization fallback for main and ad content per default. This reduces playback error rates but potentially results in suboptimal decoders being used.
3.78.3
Released: 2024-08-13
Fixed
- Crash when a live stream ends while casting
3.78.2
Released: 2024-08-09
Fixed
- Significantly improve performance when disabling
TweaksConfig.enableMainContentDecodingDuringAds
by only disabling video rendering during ads instead of disabling the whole video pipeline
3.78.1
Released: 2024-08-09
Added
Quality.averageBitrateandQuality.peakBitratewhich are accessible viaAudioQualityandVideoQuality
Fixed
SourceEvent.VideoQualitiesChangednot being emitted andSource.availableVideoQualitiesnot being populated during ad playback whenTweaksConfig.enableMainContentDecodingDuringAdsis set tofalse
3.78.0
Released: 2024-08-02
Added
TweaksConfig.enableMainContentDecodingDuringAdsto support ad playback on devices with only one hardware decoder.
OnlyAdSourceType.Imaads are currently supported
Fixed
- Consecutive scheduled ads sometimes playing without video when using the IMA ads module
Changed
- Enabled R8 fullMode
3.77.1
Released: 2024-07-26
Fixed
- Transition from live to VoD is not detected. Thus some player interaction misbehaves on and after the transition, including missing events.
- Memory leak when cleaning up player resources and IMA ads were played
- Requesting non-primary playlists on HLS low latency streams
Known Issues
- Consecutive scheduled ads sometimes playing without video when using the IMA ads module
3.77.0
Released: 2024-07-23
Fixed
- Issue where HDR color information caused codec errors, potentially leading to black screens during switches between HDR and SDR video tracks
Changed
- Integrated changes from
Media3 ExoPlayerversion1.3.1
3.76.0
Released: 2024-07-19
Fixed
- Setting
SourceLiveConfig.targetLatencynow changes the initial player live edge instead of being the initial
timeShiftstart position- When the the player reaches the target latency, the default Web UI will show the player position as "live"
- Calling
timeShift(0.0)now moves the player position to the target latency
Changed
LowLatencyApi.targetLatencyis now the live edge target latency. This means that:- Calling
timeShift(x)doesn't changeLowLatencyApi.targetLatencyanymore - The player will only try to reach
LowLatencyApi.targetLatencywhen playing at the live edge (timeShift == 0.0)- When time shifting away from the live edge (eg:
timeShift(-100)), the player will aim to stay at that timeShift value
- When time shifting away from the live edge (eg:
- Changing the
targetLatencychanges the live edge position
This aligns the behaviour of the Android player with the iOS and Web player- For example: when lowering the
targetLatencyby 5s, both thetimeShiftandmaxTimeShift
will lower by 5s, as the timeShift window is increased
- For example: when lowering the
- Calling
SourceLiveConfig.targetLatency,LowLatencyApi.targetLatency,LowLatencyApi.latency,LowLatencyConfig.targetLatencyandLiveConfig.liveEdgeOffsetare now the distance
to the current real time, instead of player live edge. This means that the value returned
byLowLatencyApi.latencyis the glass-to-glass latency- Depending on the stream this change might cause the values that are returned by
LowLatencyApi.latencyto be
bigger, but this doesn't mean that the actual glass-to-glass latency is bigger compared to the old implementation - Similarly, bigger
SourceLiveConfig.targetLatencyshould be used, to accommodate for a realistic latency between
the current real time and the playback position - The following represents the difference between the old and new behaviour graphically, where:
1.)represents the old behaviour. Player will time shift fortargetLatencyduration away from the player live edge and it will try to maintain this position2.)represents the new behaviour. Setting atargetLatencymoves the player live edge to the distance from the current real time. The player will try to bring theLowLatencyApi.latencyas close as possible to thetargetLatencywhile avoiding stalls+Represents the player position*Represents the player live edge (the position at which the player is considered playing "live")#Represents the current real time------------------------------- | Live Window * |---> # ------------------------------- 1.) +<-- targetLatency --| 2.) +*<-- targetLatency --|
- Depending on the stream this change might cause the values that are returned by
- The default value of [LowLatencyConfig.targetLatency] from
3.0to5.0due to the changed mentioned above
Deprecated
LiveConfig.liveEdgeOffset, useSourceLiveConfig.targetLatencyinstead. This has the same effect, but is
configurable on per source basis
3.75.1
Released: 2024-07-05
Fixed
- Returning
trueinAdvertisingConfig.shouldPlayAdBreakfor VMAP ads with multiple cue points sometimes results in invalid player state
3.75.0
Released: 2024-06-28
Added
TweaksConfig.preferSoftwareDecodingto prefer the use of software decoding for main content
Fixed
- Wrong default value for
LowLatencyConfig.fallbackConfigbeing used when noSourceConfig.liveConfigis provided, causing the player to speed up when slowdown is needed
Changed
- Updated
kotlinx-coroutinesfrom1.8.0to1.8.1 - Updated
kotlinx-serializationfrom1.9.22to2.0.0 - Updated
gsonfrom2.10.1to2.11.0 - Updated
slf4j-apifrom2.0.5to2.0.7 - Updated
androidx.annotationfrom1.7.1to1.8.0 - Default Bitmovin Web UI version to
3.65.0
3.74.0
Released: 2024-06-21
Fixed
- Playback not starting at correct position when seeking and replaying after playback finished
- Potential player freeze when scheduling a VMAP pre-roll ad and setting
PlaybackConfig.isAutoplayEnabledtotrue
Changed
- Updated Bitmovin Analytics collector dependency to version
3.5.1
Known Issues
- Wrong default value for
LowLatencyConfig.fallbackConfigbeing used when noSourceConfig.liveConfigis provided, causing the player to speed up when slowdown is needed
To work around this issue set aSourceConfig.liveConfigon your live sources
3.73.0
Released: 2024-06-07
Fixed
- Calling
Player.seekafterPlayerEvent.PlaybackFinishederroneously resuming playback
Changed
- Default Bitmovin Web UI version to
3.64.0
Known Issues
- Wrong default value for
LowLatencyConfig.fallbackConfigbeing used when noSourceConfig.liveConfigis provided, causing the player to speed up when slowdown is needed
To work around this issue set aSourceConfig.liveConfigon your live sources
3.72.0
Released: 2024-05-29
No changes compared to 3.71.0
3.71.0
Released: 2024-05-29
Added
AnalyticsApi.ssaiAPI to collect analytics for server side ad insertion using Bitmovin AnalyticsVastAdData.wrapperAdSystemsandVastAdData.wrapperCreativeIdsto the [Ad.data] for VAST ads handled by the Google IMA SDK
Changed
- Increased the
minSdkVersionto 19 - No notification is shown when setting the
OfflineConfigand no download is in progress - Updated Bitmovin Analytics collector dependency to version
3.5.0 - Calling
PlayerView.setPlayerwith the already set instance has no effect anymore
Known Issues
- Wrong default value for
LowLatencyConfig.fallbackConfigbeing used when noSourceConfig.liveConfigis provided, causing the player to speed up when slowdown is needed
To work around this issue set aSourceConfig.liveConfigon your live sources
3.70.0
Released: 2024-05-24
Fixed
- Low latency streams resuming without enough buffer after a stall, leading to repeated stalling,
displaying only a few frames every stall.
As a side effect, low latency streams are slightly slower to start but more stable - Catchup
TargetSynchronizationConfig.seekThresholdused for fallback and vice-versa - Player internally seeking to
SourceOptions.startOffsetthenSourceLiveConfig.targetLatency
on low latency stream start, leading to longer than expected playback start
Changed
- Live streams start at
SourceLiveConfig.targetLatencyif set instead ofSourceOptions.startOffset - Default
TargetSynchronizationConfig.seekThresholdtoPOSITIVE_INFINITY(disabled)
in order to reduce stalls and align the low latency catchup and fallback behaviour with the Bitmovin V8 web Player.
This means that, if the newSourceConfig.liveConfig(added in the last release, 3.69.0)
is set toSourceLiveConfig's default value, the player will not timeshift to the target latency when too far.
Instead it will continue to adjust the playback rate to converge to the target latency as it does inside the threshold.
Behaviour was not changed when using the deprecatedLiveConfig.lowLatencyConfig
(timeshift threshold of 1s by default). - Do not timeshift in most cases on initial play of a live stream.
IfPlaybackConfig.isAutoplayEnabledisfalseand user waits for more than5second to press play,
the player will still timeshift toLowLatencyApi.targetLatency
to avoid taking a very long time to catchup the live edge
Known Issues
- Wrong default value for
LowLatencyConfig.fallbackConfigbeing used when noSourceConfig.liveConfigis provided, causing the player to speed up when slowdown is needed
To work around this issue set aSourceConfig.liveConfigon your live sources
3.69.0
Released: 2024-05-17
Added
SourceLiveConfigto configure the player behaviour when playing live content.
Contrary toPlayerConfig'sLiveConfigthat applies to a whole playback session,
SourceLiveConfigapplies only the source itconfigures.
Fixed
- Player might be paused after skipping an VMAP ad break by using
AdvertisingConfig.shouldPlayAdBreak
Changed
- Added
DOCTYPEdeclaration to the HTML document used to render the Bitmovin Player Web UI to prevent quirks mode - Updated Bitmovin Analytics collector dependency to version
3.4.0 - Default Bitmovin Web UI version to
3.62.0
Deprecated
LiveConfig.lowLatencyConfig. UseSourceConfig.liveConfiginsteadLiveConfig.minTimeShiftBufferDepth. UseSourceLiveConfig.minTimeShiftBufferDepthinstead
Known Issues
- Wrong default value for
LowLatencyConfig.fallbackConfigbeing used when noSourceConfig.liveConfigis provided, causing the player to speed up when slowdown is needed
To work around this issue set aSourceConfig.liveConfigon your live sources
3.68.0
Released: 2024-05-03
Fixed
- Crash when loading a source with a WebVTT thumbnail track that is malformed
- Bitmovin Advertising Module macro replacement not working if the macro markers are url encoded
Changed
- Bitmovin Advertising Module macro replacement no longer replacing all unknown macros with
-1. Default value replacement can be done using theVastMacroConfigif required - Extended error message content for
DecoderGeneral,DecoderInitialization,DecodingFailed,DecodingUnsupported,DecodingExceedsCapabilities,Io,ConnectionFailed,ConnectionTimeout,HttpStatusCodeandClearTextConnection
3.67.1
Released: 2024-04-26
Fixed
- An
IllegalArgumentExceptionbeing thrown when reducing the value ofOfflineConfig.maxSimultaneousSegmentDownloadsand calling Bitmovin'sDownloadManager.setRequirements
3.67.0
Released: 2024-04-19
Added
PlayerWarningCode.TargetLatencyTooLowForCurrentNetworkQuality,
which is emitted in aPlayerEvent.Warningwhen setting the target latency
for live playback to a value that is estimated to be too low for
the current network latency and jitter
Fixed
- Bitmovin Advertising Module wrongly playing nested ad buffet ads as part of the ad pod
- Bitmovin Advertising Module sometimes not adhering to the expected ad pod sequence if the ad pod contains nested ad pods
3.66.0
Released: 2024-04-15
Fixed
- When connecting to a casting receiver before loading a playlist, the local player doesn't correctly track playlist transitions to new sources, causing the local player to play the first source after disconnecting from the casting receiver instead of continuing from the playlist position
Changed
- Default Bitmovin Web UI version to
3.58.0 - Kotlin version to
1.9.23and Kotlin coroutines to1.8.0 - Do not increase the target latency on stall.
This resulted in a significant increase of the target latency during long playbacks with occasional stalls.
After a stall, the latency will now slowly lower to the target latency as soon as
the network condition have improved enough to avoid stalling again
3.65.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 schedule anAdSourceusing Bitmovin Advertising Module
// Create an `AdItem` with one `AdSource` of type `AdSourceType.Bitmovin` val adItem = AdItem(position = "pre", AdSource(type = AdSourceType.Bitmovin, tag = adTagUrl)) // You can either create the schedule before player creation using the advertising config playerConfig.advertisingConfig = AdvertisingConfig(adItem) // Or use the Player API to schedule the ad player.scheduleAd(adItem)BitmovinAdvertisingConfigaccessible viaAdvertisingConfig.bitmovinto configure Bitmovin Advertising Module handlingVastMacroConfigaccessible viaBitmovinAdvertisingConfig.macroto configure VAST macro handling within Bitmovin Advertising ModuleVastMacroValueProvideraccessible viaVastMacroConfig.macroValueProviderto provide or override macro values dynamicallyVastMacro,VastMacroContextandVastMacroScopeto facilitate the macro value providing process
Fixed
- Sources loaded in the error event callback sometimes being unloaded immediately
Removed
TweaksConfig.useBitmovinAdvertisingForAdSourceTypeUnknown, use the newly introducedAdSourceType.Bitmovininstead
3.64.0
Released: 2024-03-29
Added
- Support for WebVTT default text and background color styling when using Bitmovin Web UI
Changed
- Improved
Cue.htmlHTML generation:\tpreviously transformed to , now transforms to	"previously transformed to", now stays"- The whole String is wrapped in a
<p></p>tag
3.63.0
Released: 2024-03-22
Added
DecoderGeneral,DecoderInitialization,DecodingFailed,DecodingUnsupportedandDecodingExceedsCapabilitiestoPlayerErrorCodesIo,ConnectionFailed,ConnectionTimeout,HttpStatusCodeandClearTextConnectiontoSourceErrorCodesAdvertisingConfig.shouldPlayAdBreakthat will be called every time an ad break is about to start. The return value determines if the ad break should be played or discardedTweaksConfig.minForwardBufferLevelForQualityIncreaseto configure the time to switch to better quality track
Fixed
- Low Latency target set via
Player.lowLatencynot applied on some live streams with autoplay enabled - Offline playback fails for some DRM protected HLS streams
Changed
PlayerEvent.Errorevents are more fine granular withDecoderGeneral,DecoderInitialization,DecodingFailed,DecodingUnsupported,DecodingExceedsCapabilitieserror codes and the respective errors are no longer reported with theGeneralerror codeSourceEvent.Errorevents are more fine granular withIo,ConnectionFailed,ConnectionTimeout,HttpStatusCodeandClearTextConnectionerror codes and the respective errors are no longer reported with theGeneralerror code- Low latency behaviour:
- Playback speed is proportional to the difference between the latency and its target
- Latency is increased if the network is too slow to stay at the target
- Latency is decreased if the network condition improves
- The current target latency can be retrieved with (
player.lowLatency.targetLatency)- Previously only the target latency when playing at the live edge was returned
Removed
- Low latency support for HLS live stream without
EXT-X-PROGRAM-DATE-TIME.
Such live streams are not compliant with the HLS specification
3.62.0
Released: 2024-03-08
Fixed
Player.timeShiftis ignored when aLowLatencyConfigis configured- Some special characters in subtitles are displayed incorrectly
3.61.0
Released: 2024-03-01
Added
SourceEvent.PeriodChangedto be emitted from sources of type DASH for which the active period has changed
3.60.0
Released: 2024-02-16
Added
UiConfig.WebUi.forceSubtitlesIntoViewContainerto force subtitles into the player view instead of cropping them when using the Bitmovin Web UILinearAd.uiConfigthat holds relevant information for displaying the linear ad
Fixed
NetworkConfig.preprocessHttpRequestCallbacknot able to remove or modify existing HTTP headers- Cropped multi-line subtitles in fullscreen mode when using the Bitmovin Web UI by setting
UiConfig.WebUi.forceSubtitlesIntoViewContainertotrueper default
3.59.0
Released: 2024-02-02
Fixed
- DRM license renewal requested when downloading a DRM protected source for offline playback although
DrmConfig.isLicenseRenewableis set tofalse
Changed
- Updated Google Cast SDK to
21.4.0. With this update, the Google Cast SDK dependency raises the minimum supported Android version to4.4
3.58.1
Released: 2024-01-29
Fixed
UnsupportedOperationExceptionthrown when playing a stream with ads on Android 7.1 and below
3.58.0
Released: 2024-01-26
Fixed
- Live edge visible for a fraction of a second when
startOffsetis defined
Known Issues
UnsupportedOperationExceptionthrown when playing a stream with ads on Android 7.1 and below
Changed
- Integrated changes from
Media3 ExoPlayerversion1.2.1 - Increased minimum required
compileSdkto34
3.57.1
Released: 2024-01-19
Fixed
NoClassDefFoundExceptionwhen instantiating aPlayerorSource
Known Issues
UnsupportedOperationExceptionthrown when playing a stream with ads on Android 7.1 and below
3.57.0
Released: 2024-01-19
Added
- New top level factory functions for
PlayerandSourcePlayer(Context, PlayerConfig, [AnalyticsPlayerConfig])to create aPlayerinstancePlayerBuilderforPlayercreation from JavaSource(SourceConfig, [AnalyticsSourceConfig])to create aSourceinstanceSourceBuilderforSourcecreation from JavaAnalyticsPlayerConfig.EnabledandAnalyticsPlayerConfig.Disabledto either enabled and customize or disable analytics data collection onPlayerinstancesAnalyticsSourceConfig.Enabledto customize analytics data collection forSources
Fixed
- Potential crash when the audio capabilities change during playback
Known Issues
NoClassDefFoundExceptionwhen instantiating aPlayerorSourceUnsupportedOperationExceptionthrown when playing a stream with ads on Android 7.1 and below
Deprecated
Player.createfunction andPlayerFactory. Use thePlayer(...)factory function, or thePlayerBuilderinsteadSource.createfunction andSourceFactory. Use theSource(...)factory function, or theSourceBuilderinstead
3.56.0
Released: 2024-01-12
Added
PlaybackConfig.handleAudioFocusto configure automatic audio focus handlingPlaybackConfig.handleAudioBecomingNoisyto configure automatic audio becoming noisy handling- Progressive ads can be played without the IMA SDK
PlayerWarningCode.IncorrectApiUsagewhen scheduling anAdItemwith sources of different types
Fixed
- Exception when the stream duration is negative. Now a
SourceEvent.Errorwill be emitted in this case
Changed
- Updated Bitmovin Analytics collector dependency to version
3.3.2
3.55.1
Released: 2024-01-05
Changed
- Updated Bitmovin Analytics collector dependency to version
3.3.1
3.55.0
Released: 2023-12-22
Changed
- Updated Bitmovin Analytics collector dependency to version
3.3.0
3.54.0
Released: 2023-12-15
Added
PlayerEvent.FrameAboutToBeRenderedwhich is emitted before every frame gets rendered onto the video surface.
This event is experimental and needs to be enabled via theTweaksConfig.enableFrameAboutToBeRenderedEvent
Fixed
- Exception when offline download is paused and resumed in the background due to unmet requirements on Android 11 and below
Changed
- Kotlin to version
1.9.21
Removed
FOREGROUND_SERVICE_DATA_SYNCpermission from the manifest as this is only required when using the offline feature.
If you are using the offline feature, you now have to declare this permission in theAndroidManifest.xml.
3.53.0
Released: 2023-12-11
Fixed
- UI being visible in PiP mode after ad playback
Changed
- Updated Bitmovin Analytics collector dependency to version
3.1.0
Known Issues
- Exception when offline download is paused and resumed in the background due to unmet requirements on Android 11 and below
3.52.0
Released: 2023-11-27
Fixed
- UI not displaying when providing an
AdaptationConfig.videoAdaptationcallback while using the Bitmovin Web UI - Inconsistent Player behaviour after loading a new source or playlist during ad playback
- Video playback and Bitmovin Web UI not visible after loading a new source during an active ad break
SubtitleTrack.labelandAudioTrack.labelincorrectly returninglanguageinstead oflabelfor DASH streams withLabelelement presentAudioTrack.labelincorrectly returning an empty string if noNAMEparameter is present for HLS streams. Now falling back tolanguage
Changed
- Default Bitmovin Web UI version to
3.52.2
Known Issues
- Exception when offline download is paused and resumed in the background due to unmet requirements on Android 11 and below
3.51.0
Released: 2023-11-13
Fixed
- Android resources of the
jasonbuild might clash with exoplayer/media3 resources PlayerViewnot displaying a fullscreen button when adding a fullscreen handler while not being attached to window
Changed
- The
exoprefix of android resources of thejasonbuild tobmp
Known Issues
- Exception when offline download is paused and resumed in the background due to unmet requirements on Android 11 and below
3.50.0
Released: 2023-11-06
Added
TweaksConfig.allowChunklessPreparationForHlsto allow HLS preparation without downloading media segments
Changed
- Integration from
ExoPlayer 2.19.1toJetpack Media3 ExoPlayer 1.1.1. This internal change does not require any further action except in special cases:- If you are using the
TweaksConfig.exoPlayerCacheapi you will have to migrate the package imports fromcom.google.android.exoplayer2.upstream.cache.Cachetoandroidx.media3.datasource.cache.Cache. - If you are setting
OfflineConfig.requirements, you will have to migrate toOfflineConfig.deviceStateRequirements. - If you are using a custom
CaptionStyle, you will have to migrate from ExoPlayer'sCaptionStyleCompattocom.bitmovin.player.CaptionStyle. - If you are catching
UnsupportedDrmExceptionyou will have to update the import package fromcom.google.android.exoplayer2.drm.UnsupportedDrmExceptiontocom.bitmovin.player.api.deficiency.exception.UnsupportedDrmException. This change was already introduced in 3.48.0 - If you are already using
Jetpack Media3 ExoPlayerin addition toBitmovin Playerplease make sure to use the+jasonversion of theBitmovin Player. Read this guide for more information.
- If you are using the
Removed
- Deprecated methods that require an ExoPlayer import which is not compatible with androidx's media3
OfflineConfig.requirementsis now a read only property. To set requirements, useOfflineConfig.deviceStateRequirements- Removed
SubtitleRendererView.setStyle(CaptionStyleCompat). UseSubtitleRendererView.setStyle(CaptionStyle)instead.
Known Issues
- Exception when offline download is paused and resumed in the background due to unmet requirements on Android 11 and below
3.49.0
Released: 2023-10-23
Added
ImaConfigcontaining IMA specific configurationAdvertisingConfig.imato configure IMA for a playerImaUiTypeandImaConfig.preferredUiTypeto configure the preferred UI type for IMA adsPlayerWarningCode.DisablingImaUiFailedwhich is emitted in aPlayerEvent.Warningwhen theImaConfig.preferredUiModecould not be appliedPlayerWarningCode.ApplyingImaUiElementPreferenceFailedwhich is emitted in aPlayerEvent.Warningwhen theImaConfig.preferredUiElementscould not be applied
Fixed
- Player wrongly emitting an additional
PlayerEvent.VideoSizeChangedevent with height and width set to0when manually switching video quality, causingPlayerViewto be resized
Deprecated
AdvertisingConfig.adsManagerAvailableCallback. UseImaConfig.adsManagerAvailableinsteadAdvertisingConfig.beforeInitialization. UseImaConfig.beforeInitializationinsteadAdvertisingConfig.imaUiElements. UseImaConfig.preferredUiElementsinstead
3.48.0
Released: 2023-10-16
Added
UiConfig.WebUi.playbackSpeedSelectionEnabledto provide access to the UIConfig.playbackSpeedSelectionEnabled of the Bitmovin Web UIOfflineConfig.deviceStateRequirementsas a replacement for the deprecatedOfflineConfig.requirementsSubtitleView.setStyle(CaptionStyle)as a replacement for the deprecatedSubtitleView.setStyle(CaptionStyleCompat)
Fixed
- Crash when using built-in analytics on Android API level below 21. Analytics is now disabled with a warning if used on Android < 5 devices
Changed
com.bitmovin.player.api.deficiency.exception.UnsupportedDrmExceptionas a replacement forcom.google.android.exoplayer2.drm.UnsupportedDrmException
Please note, this is a breaking change in your exception handling, in case you are catching this specific exception. To resolve this, update the import package.
Deprecated
OfflineConfig.requirements. UseOfflineConfig.deviceStateRequirementsinsteadSubtitleView.setStyle(CaptionStyleCompat). UseSubtitleView.setStyle(CaptionStyle)instead
Known Issues
- Player wrongly emitting an additional
PlayerEvent.VideoSizeChangedevent with height and width set to0when manually switching video quality, causingPlayerViewto be resized
3.47.0
Released: 2023-10-09
Added
PlayerViewConfigthat configures the visual presentation and behaviour of aPlayerView- Constructor to the
PlayerViewthat allows passing aPlayerViewConfig
Deprecated
PlayerConfig.styleConfigas well asStyleConfigitself. Use the newly introducedPlayerViewConfigon thePlayerViewinstead
Known Issues
- Player wrongly emitting an additional
PlayerEvent.VideoSizeChangedevent with height and width set to0when manually switching video quality, causingPlayerViewto be resized
3.46.0
Released: 2023-10-02
Changed
- Integrated changes from ExoPlayer version
2.19.1
Fixed
- Potential manifest merger error due to unnecessary
android:allowBackup,android:labelandandroid:supportsRtlapplication fields declared inplayer-coresAndroidManifest.xml
Known Issues
- Player wrongly emitting an additional
PlayerEvent.VideoSizeChangedevent with height and width set to0when manually switching video quality, causingPlayerViewto be resized
3.45.0
Released: 2023-09-25
Added
TweaksConfig.preferSoftwareDecodingForAdsto prefer the use of software decoding for ads playback
3.44.0
Released: 2023-09-18
Added
foregroundServiceTypeandFOREGROUND_SERVICE_DATA_SYNCpermission toBitmovinDownloadServiceRECEIVER_NOT_EXPORTEDflag to dynamically registeredBroadcastReceiverinPlayerNotificationManager
Fixed
- Missing class definition when loading a VR configured source and using the default UI
Changed
- Updated Google Cast SDK to
21.3.0 - Updated IMA SDK dependency to version
3.31.0. This may require an update of the dependent Google Ads Play Services - Updated JS dependencies, including the Bitmovin Player UI to 3.50.0
3.43.1
Released: 2024-02-09
Fixed
- Android resources of the
jasonbuild might clash with exoplayer/media3 resources
Changed
- The
exoprefix of android resources of thejasonbuild tobmp
3.43.0
Released: 2023-09-04
Added
TweaksConfig.discardAdsWhileCastingto control advertisement discard behavior when casting with advertisements scheduled- Warn when player without analytics load source with metadata
Fixed
- Pre-roll ad playback starts locally, when creating a player and starting playback while a cast session is connecting
- VMAP ad playback starts locally while casting. VMAP ad blocks are now suppressed and played back once the cast session stops
- Inconsistent API behaviour when creating and using a player while a cast session is connecting
3.42.0
Released: 2023-08-16
Added
AdItem.vastLoadTimeoutwhich can be used to change the timeout for VAST ad manifest downloads
3.41.0
Released: 2023-08-07
Added
PlayerandSourcemethods to collect Player Analytics using Bitmovin Analytics.
The following APIs can be used to collect playback analytic events:Player.create(Context, PlayerConfig, AnalyticsConfig, DefaultMetadata)(extension), to create an analytics enabledPlayer- In Java, call
PlayerFactory.create
- In Java, call
Source.create(SourceConfig, SourceMetadata)(extension), to create aSourcewith analytics metadata attached- In Java, call
SourceFactory.create
- In Java, call
Player.analytics(extension), to control analytics collected by an analytics enabledPlayer- In Java, call
AnalyticsApi.from(Player)
- In Java, call
Source.analytics(extension), to control analytics collected by an analytics enabledSource- In Java, call
SourceAnalyticsApi.from(Source)
- In Java, call
Fixed
getThumbnailreturns wrongThumbnailfor DASH in-manifest thumbnails, when the manifest does not start at epoch
Changed
- Updated Bitmovin Analytics collector dependency to version
3.0.0. See also this release's [Added] section.
Dependent using the V2 standalone Bitmovin Analytics Collector may:- Recommended: migrate to the Player new built-in Analytics API with the help of our:
- Migrate to the V3 standalone Bitmovin Analytics Collector with the help of our
Analytics V2 to V3 Migration Guide - Discouraged: pin the Bitmovin Analytics Collector dependency to V2 with the help of our
FAQ- Note that the new Player Analytics APIs are incompatible with the Bitmovin Analytics Collector V2.
3.40.0
Released: 2023-07-19
Fixed
- Potential main content playback before pre-roll ads
- Content flash before pre-roll ads when
StyleConfig.isHideFirstFrameis set totrue
Changed
- Some
AdItemsare processed quicker after scheduling, thus the timing of related ad event might change - No
PlayerEvent.PlayandPlayerEvent.Pausedare emitted before a pre-roll ad playback
3.39.1
Released: 2023-07-10
Changed
- Various internal improvements
3.39.0
Released: 2023-06-26
Added
Player.sdkVersionto retrieve the Player SDK version name- Add support for handling arbitrary method calls from Player Web UI via
CustomMessageHandler
3.38.2
Released: 2023-06-12
Changed
- Various internal improvements
3.38.1
Released: 2023-05-30
Fixed
- Player freezing when seeking past multiple IMA VAST ads
3.38.0
Released: 2023-05-15
Added
- The Bitmovin Analytics Collector as a dependency of the Bitmovin player.
It is not yet used and is stripped when minification is enabled.
As a consequence, when using Gradle's default dependency resolution strategy, updating the player will also update the analytic collector version. - You can find the release notes for the Bitmovin Analytics Collector here.
3.37.2
Released: 2023-05-08
Fixed
- Image Media Playlist parsing fails with a warning if an attribute value on the
EXT-X-IMAGE-STREAM-INFtag contains a colon, e.g. the scheme separator in an absolute URI
3.37.1
Released: 2023-05-02
Fixed
SourceConfig.startOffsetnot respected when loading a source while connected to a cast-compatible device
3.37.0
Released: 2023-04-24
Fixed
- Potential duplicate class error when using the player along side another library that contains obfuscated symbols
- HTTP headers being stripped when a
NetworkConfig.preprocessHttpRequestCallbackis provided and its return value is notnull
Changed
- Enforced that consuming projects must use a
compileSdkat least as recent as the playercompileSdk(currently33) to avoid runtime errors - Integrated changes from ExoPlayer version
2.18.4
3.36.0
Released: 2023-04-17
Changed
- Kotlin to version
1.8.20
Known Issues
- Potential duplicate class error when using the player along side another library that contains obfuscated symbols
3.35.2
Released: 2023-04-11
Fixed
- Metadata events for embedded event streams in a DASH source sometimes not being emitted if there are multiple video adaptation sets
Known Issues
- Potential duplicate class error when using the player along side another library that contains obfuscated symbols
3.35.1
Released: 2023-04-03
Fixed
PlayerEvent.CastWaitingForDevice,PlayerEvent.CastStartedandPlayerEvent.CastStoppednot being emitted when there is no active playback session- Volume on connected cast enabled device always being overwritten with 100% for certain cast devices when creating a new player instance while being connected to a cast enabled device
- Bitmovin Analytics Collector <=
2.14.0throwing aClassNotFoundExceptionwhen trying to access the Player version
Known Issues
- Potential duplicate class error when using the player along side another library that contains obfuscated symbols
3.35.0
Released: 2023-03-20
Fixed
- Window color behind subtitle cue sometimes being black when it should be unset when using
SubtitleView - Subtitles sometimes not being correctly centered when using the
SubtitleView - Buffer level always returns zero after some time for HLS live streams
Known Issues
- Bitmovin Analytics Collector <=
2.14.0throws aClassNotFoundExceptionwhen trying to access the Player version
3.34.0
Released: 2023-03-13
Added
TweaksConfig.enableExoPlayerLoggingthat specifies whether ExoPlayer logs shall be printed to the logcat console
Known Issues
- Bitmovin Analytics Collector <=
2.14.0throws aClassNotFoundExceptionwhen trying to access the Player version
3.33.1
Released: 2023-03-06
Fixed
- Player triggering VAST
completetracking event when being destroyed while playing an ad - Player triggering VAST
completetracking event when skippable ad is skipped - Player not continuing main content playback when a VAST ad is discarded by either connecting to a cast-compatible device or changing the
AdViewGroupduring ad playback
3.33.0
Released: 2023-02-27
Added
OfflineWarningCode.DrmGeneralwhich is emitted in aOfflineEvent.Warningwhen a general warning occurred for DRM handling
Fixed
- Memory leak when using the
BitmovinCastManagerand not updating the context on every activity switch
3.32.0
Released: 2023-02-20
Added
PlayerWarningCode.RemotePlaybackFailedwhich is emitted when playback on a connected cast-compatible device produces an errorPlayerWarningCode.AdDiscardedwhich is emitted when an ad is discarded by the player
Fixed
- Potential memory leak when destroying the player before an already loaded ad is played back
- Memory leak when playing an ad break of a VMAP ad and destroying the player before all remaining ad breaks have been reach
3.31.0
Released: 2023-02-13
Added
PlayerWarningCode.FeatureContextuallyUnsupportedwhich is emitted when a feature on thePlayeris not supported in the current context
Fixed
- Some errors not being propagated during Ad playback
- Casting DRM protected content without providing
SourceConfig.httpHeadersdoes not start the video on the connected cast-compatible device
3.30.0
Released: 2023-02-06
Added
PlayerWarningCode.IncorrectApiUsagewhich is emitted when a certain API usage on thePlayeris not correct and will have no effect
Fixed
- Detaching the renderer surface times out when destroying the player while metadata is being parsed
- Type safety (nullability) in
AudioLabeler - Type safety (nullability) in
AudioQualityLabeler - Type safety (nullability) in
VideoQualityLabeler - Type safety (nullability) in
SubtitleLabeler - Type safety (nullability) in
AdsManagerAvailableCallback - Type safety (nullability) in
BeforeInitializationCallback - Type safety (nullability) in
PrepareLicenseCallback - Type safety (nullability) in
PrepareMessageCallback - Type safety (nullability) in
ForecedSubtitleCallback - Type safety (nullability) in
VideoAdaptation - Type safety (nullability) in
PreprocessHttpRequestCallback - Type safety (nullability) in
BitmovinSurfaceListener - Type safety (nullability) in
VrRenderer
Changed
- Default Bitmovin Web UI version to 3.42.0
3.29.0
Released: 2023-01-30
Added
RemoteControlConfig.onConfigureMediaInfowhich can be used to configure Google CastMediaInfoobjects before they are loaded on the cast enabled devicePlayerWarningCode.IncorrectApiUsagewhich is emitted when a certain API usage on thePlayeris not correct and will have no effect
3.28.0
Released: 2023-01-23
Added
PlayerWarningCode.PlaylistManipulationFailedwhich is emitted in aPlayerEvent.Warningwhen it was not possible to manipulate the playlistPlayerWarningCode.AdvertisingGeneralwhich is emitted in aPlayerEvent.Warningwhen a general warning occurred in the advertising featurePlayerWarningCode.AdBreakFetchingFailedwhich is emitted in aPlayerEvent.Warningwhen the current ad break will not play any ads as no ads could be fetchedPlayerWarningCode.CastSourceMappingFailedwhich is emitted in aPlayerEvent.Warningwhen the playlist state on the cast enabled device is inconsistent to the local playlist stateOfflineWarningCode.DrmLicenseReleaseFailedwhich is emitted in aOfflineEvent.Warningwhen the DRM license failed to releaseSourceWarningCode.IncorrectApiUsagewhich is emitted when a certain API usage is not correct and will have no effectSourceWarningCode.FeatureContextuallyUnsupportedwhich is emitted when a feature is not supported in the current context- Crash when playing Progressive Ads using Bitmovin Web UI
Fixed
ForegroundServiceStartNotAllowedExceptionthrown on Android 12 when download was paused and resumed in the background due to unmet requirements- Downloaded asset sometimes being corrupted when download was paused and resumed due to unmet requirements
3.27.0
Released: 2023-01-17
Changed
- Updated Google Cast SDK to
21.2.0 - Updated IMA SDK dependency to version
3.29.0. This may require an update of the dependent Google Ads Play Services
3.26.1
Released: 2022-12-23
Fixed
- Player buffer level returns wrong values for DASH live streams with
availabilityStartTimeattribute set to time not at epoch - Unlike Kotlin's
EventEmitter,JavaEventEmitter'sEventListeners could not receive base events.
3.26.0
Released: 2022-12-06
Added
EventEmitterfunctionality toOfflineContentManagerenabling subscriptions toOfflineEvents emitted during theOfflineContentManagerlifecycle.OfflineEvent.Error,OfflineEvent.WarningandOfflineEvent.Infoare the supported eventsPlayerEvent.InfoandSourceEvent.Info, which allow further monitoring ofPlayerandSourceworkflows
3.25.2
Released: 2022-11-23
Fixed
- Player very rarely is paused after calling
play Player.durationsometimes returning0.0instead of-1.0in case that the duration is unknown during casting- Crash when encountering an IMA ad error while using the Bitmovin Web UI
VideoDownloadQualityChangendandAudioDownloadQualityChangedare not emitted on period switches, if the according qualities have the same id- Duration in Bitmovin Web UI displaying 00:00 after error in pre-roll ad
3.25.1
Released: 2022-10-25
Fixed
- Image Media Playlists being downloaded and parsed for live HLS sources. The Image Media Playlist thumbnail feature is designed for VOD only but was also active for live sources causing potential performance implications. The old behaviour can be restored by enabling
TweaksConfig.enableImageMediaPlaylistThumbnailParsingForLive - Query parameters missing from Image Media Playlist variant playlist requests and thumbnail URLs when parsing an Image Media Playlist with relative URLs
- Potential crash when rendering the first frame on some Android TV devices
Deprecated
ParcelUtilas the provided functionality is generic parcelization logic and not required when interacting with the Player SDK
3.25.0
Released: 2022-10-11
Fixed
- Download service crashing when downloading content for as
SourceConfigcontaining metadata VrConfignot being usable without thekotlin-parcelizeplugin
Removed
- Gson serialization annotations and adapters for API models. The removal affects serialization of Bitmovin objects with Gson where no explicit serialization strategy is provided
Changed
- Integrated changes from ExoPlayer version
2.18.1
3.24.2
Released: 2022-09-27
Fixed
- Incorrectly formatted seekbar when the duration is unknown in the default Bitmovin Web UI. Negative durations are no longer exposed to the web UI which might effect existing custom implementations
3.24.1
Released: 2022-09-13
Fixed
- Some low latency streams fail with error when the
LowLatencyConfigis configured
3.24.0
Released: 2022-08-30
Added
- Automatic failover for multiple base URLs for DASH Image Adaptation Set thumbnails
Deprecated
BitmovinCastManager.sendMessage(Map<String, Any>). UseBitmovinCastManager.sendMessage(String)instead
3.23.0
Released: 2022-08-16
Added
- DASH Image Adaptation Set thumbnail support as specified in DASH-IF IOP
Fixed
EXT-X-DATERANGEmetadata tags are not processed for HLS playlists where theEXT-X-PROGRAM-DATE-TIMEmaps the start of the playlist to epoch 0
3.22.0
Released: 2022-08-02
Changed
- Integrated changes from ExoPlayer version
2.17.1
3.21.0
Released: 2022-07-19
Added
AdvertisingConfig.imaUiElementsto configure the visible UI elements during IMA ad playback
3.20.0
Released: 2022-07-05
Added
PlaylistApi.remove, which removes aSourcefrom an active playback sessionPlayerEvent.SourceRemoved, which is emitted when a source was removed from an active playback session
Fixed
- Main content being visible between multiple ads configured at the same time in VMAP ad configurations
3.19.0
Released: 2022-06-21
Added
PlaylistApi.add, which adds aSourceto an active playback sessionPlayerEvent.SourceAdded, which is emitted when a source was added to the active playback sessionSourceEvent.AudioTrackAddedto replaceSourceEvent.AudioAddedfor naming consistencySourceEvent.AudioTrackRemovedto replaceSourceEvent.AudioRemovedfor naming consistencySourceEvent.AudioTrackChangedto replaceSourceEvent.AudioChangedfor naming consistencySourceEvent.SubtitleTrackAddedto replaceSourceEvent.SubtitleAddedfor naming consistencySourceEvent.SubtitleTrackRemovedto replaceSourceEvent.SubtitleRemovedfor naming consistencySourceEvent.SubtitleTrackChangedto replaceSourceEvent.SubtitleChangedfor naming consistency
Fixed
- Crash when trying to resume or delete a download initiated with player version < 3.14.1
Deprecated
SourceEvent.AudioAdded. UseSourceEvent.AudioTrackAddedinsteadSourceEvent.AudioRemoved. UseSourceEvent.AudioTrackRemovedinsteadSourceEvent.AudioChanged. UseSourceEvent.AudioTrackChangedinsteadSourceEvent.SubtitleAdded. UseSourceEvent.SubtitleTrackAddedinsteadSourceEvent.SubtitleRemoved. UseSourceEvent.SubtitleTrackRemovedinsteadSourceEvent.SubtitleChanged. UseSourceEvent.SubtitleTrackChangedinsteadPlayer.availableAudio. InsteadSource.availableAudioTrackscan be used on the active sourcePlayer.sourcePlayer.audio. InsteadSource.selectedAudioTrackcan be used on the active sourcePlayer.sourcePlayer.setAudio. InsteadSource.setAudioTrackcan be used on the active sourcePlayer.sourcePlayer.availableAudioQualities. InsteadSource.availableAudioQualitiescan be used on the active sourcePlayer.sourcePlayer.audioQuality. InsteadSource.selectedAudioQualitycan be used on the active sourcePlayer.sourcePlayer.setAudioQuality. InsteadSource.setAudioQualitycan be used on the active sourcePlayer.sourcePlayer.availableVideoQualities. InsteadSource.availableVideoQualitiescan be used on the active sourcePlayer.sourcePlayer.videoQuality. InsteadSource.selectedVideoQualitycan be used on the active sourcePlayer.sourcePlayer.setVideoQuality. InsteadSource.setVideoQualitycan be used on the active sourcePlayer.sourcePlayer.availableSubtitles. InsteadSource.availableSubtitleTrackscan be used on the active sourcePlayer.sourcePlayer.subtitle. InsteadSource.selectedSubtitleTrackcan be used on the active sourcePlayer.sourcePlayer.setSubtitle. InsteadSource.setSubtitlecan be used on the active sourcePlayer.sourcePlayer.removeSubtitle. InsteadSource.removeSubtitleTrackcan be used on the active sourcePlayer.sourcePlayer.getThumbnail. InsteadSource.getThumbnailcan be used on the active sourcePlayer.source
3.18.1
Released: 2022-05-24
Fixed
- Target buffer level potentially not being reached for high bitrate qualities
- All but the first created
OfflineContentManagerfailing unrecoverably if network connection is lost during download
3.18.0
Released: 2022-05-10
Added
Source.availableAudioTracks, which provides the currently available audio tracks of the sourceSource.availableAudioQualities, which provides the currently available audio qualities of the selected audio track of the sourceSourceEvent.AudioAddedto be emitted from theSourcefor which the audio track was added. It is now also emitted for inactive sources in a playlistSourceEvent.AudioRemovedto be emitted from theSourcefor which the audio track was added. It is now also emitted for inactive sources in a playlistSourceEvent.AudioTracksChanged, which is emitted when theSource.availableAudioTrackschangedSourceEvent.AudioQualityAdded, which is emitted when a new audio quality was added toSource.availableAudioQualitiesSourceEvent.AudioQualityRemoved, which is emitted when an audio quality was removed fromSource.availableAudioQualitiesSourceEvent.AudioQualitiesChanged, which is emitted when theSource.availableAudioQualitieschangedSourceEvent.AudioChangedto be emitted from theSourcefor which the audio track changed. It is now also emitted for inactive sources in a playlistSource.setAudioTrack, which allows setting an audio track for the sourceSource.selectedAudioTrack, which provides the currently selected audio track of the sourceSourceEvent.AudioQualityChangedto be emitted from theSourcefor which the audio quality changed. It is now also emitted for inactive sources in a playlistSource.setAudioQuality, which allows setting a fixed audio quality for the sourceSource.selectedAudioQuality, which provides the currently selected audio quality of the sourceSourceEvent.AudioDownloadQualityChangedto be emitted from theSourcefor which the download quality changed. It is now also emitted for inactive sources in a playlistSourceEvent.WarningandSourceEvent.Errorto be emitted from theSourcefor which the respective warning or error occurred. It is now also emitted for inactive sources in a playlist
Fixed
- Crash when creating a
PlayerNotificationManageron Android 31 devices - Some errors not being surfaced via the corresponding
SourceEvent.ErrororPlayerEvent.Errorlisteners
3.17.0
Released: 2022-04-26
Added
Source.availableSubtitleTracks, which provides the currently available subtitle tracks of the sourceSourceEvent.SubtitleAddedto be emitted from theSourcefor which the subtitle track was added. It is now also emitted for inactive sources in a playlistSourceEvent.SubtitleRemovedto be emitted from theSourcefor which the subtitle track was added. It is now also emitted for inactive sources in a playlistSourceEvent.SubtitleTracksChanged, which is emitted when theSource.availableSubtitleTrackschangedSource.setSubtitleTrack, which allows setting a subtitle track for the sourceSource.selectedSubtitleTrack, which provides the currently selected subtitle track of the sourceSourceEvent.SubtitleChangedto be emitted from theSourcefor which the subtitle track changed. It is now also emitted for inactive sources in a playlist
Fixed
- User-Agent header being ignored/overridden when set via the
PreprocessHttpRequestCallback - Download service crashing when setting the
OfflineConfigbefore creating anOfflineContentManager
3.16.0
Released: 2022-04-12
Added
Source.setVideoQuality, which allows setting a fixed video quality for the sourceSource.selectedVideoQuality, which provides the currently selected video quality of the source
Fixed
- Last ad frame being visible after orientation changes on Android 12
- Main content being visible in background during fullscreen ad playback, if aspect ratio does not exactly fit the screens ratio
- No audio being played back after switching from a fixed
AudioQualityto "auto" AudioTrackselection being ignored after selecting aAudioQuality- Foreground notification of the download service not vanishing if all downloads are suspended
Changed
- Download Service stops itself when all downloads are suspended
3.15.0
Released: 2022-03-16
Added
Source.availableVideoQualities, which provides the currently available video qualities of the sourceSourceEvent.VideoQualityAdded, which is emitted when a video quality has been added to the sourceSourceEvent.VideoQualityRemoved, which is emitted when a video quality has been removed from the sourceSourceEvent.VideoQualitiesChanged, which is emitted when when theSource.availableVideoQualitieschangedSourceEvent.VideoDownloadQualityChangedto be emitted from theSourcefor which the download quality changed. It is now also emitted for inactive sources in a playlist
Fixed
- Offline thumbnail scrubbing not working on devices running Android 11+
- Casting to a remote device being stopped when destroying the Bitmovin Player
ExpandedControllerActivityloading endlessly if pausing an active cast session- Wrong video qualities being displayed in Bitmovin Web UI when video qualities change during playback
- Potential crash when getting a buffer level via
BufferApi.getLevel SubtitleTrackselection is reset to default when selecting anAudioTrackAudioTrackselection is reset to default when selecting aSubtitleTrack- Incomplete telemetry data being sent to Bitmovin backend
3.14.1
Released: 2022-03-16
Fixed
- Incomplete telemetry data being sent to Bitmovin backend
3.14.0
Released: 2022-03-01
Fixed
- Live edge being clamped to
EXT-X-START:TIME-OFFSETvalue if present in a live HLS playlist. This could lead to an invalid DVR window, affecting potentialtimeshiftoperations
Known Issues
- Telemetry data being sent to Bitmovin backend is incomplete. While this has no impact on the viewer experience, Bitmovin relies on this data to measure and maintain quality of service on behalf of our customers. We therefore recommend upgrading to version
3.14.1+ AudioTrackselection is reset to default when selecting aSubtitleTrackand vice versa
Changed
- Integrated changes from ExoPlayer version
2.16.1 SourceOptions.startOffsetis now nullable andnullper default. This change was necessary to properly supportEXT-X-START:TIME-OFFSETvalues
3.13.3
Released: 2022-03-16
Fixed
- Incomplete telemetry data being sent to Bitmovin backend
3.13.2
Released: 2022-02-15
Fixed
PlayerEvent.TimeChangedbeing emitted before the start offset is applied for live sourcesPlayerEvent.TimeChangednot being emitted after a successful seek or time shift when paused
Known Issues
- Telemetry data being sent to Bitmovin backend is incomplete. While this has no impact on the viewer experience, Bitmovin relies on this data to measure and maintain quality of service on behalf of our customers. We therefore recommend upgrading to version
3.13.3+
3.13.1
Released: 2022-02-03
Fixed
- Player emitting an error when the app that uses the Player is obfuscated by R8
Known Issues
- Telemetry data being sent to Bitmovin backend is incomplete. While this has no impact on the viewer experience, Bitmovin relies on this data to measure and maintain quality of service on behalf of our customers. We therefore recommend upgrading to version
3.13.3+
3.13.0
Released: 2022-02-01
Added
Source.seekableRange, which returns a time range in seconds the player can seek in between. Does not return valid values for live sources yetAdaptationConfig.initialBandwidthEstimateOverrideto replaceAdaptationConfig.startupBitrateas the latter does not do what the name suggests
Fixed
Player.seekorPlayer.timeshiftbeing ignored when called insidePlayerEvent.Readylistener
Known Issues
- The existing proguard rules that should be used with the Player do not work with this version and the Player emits an error when the app that uses the Player is obfuscated by R8. This is already fixed in version
3.13.1 - Telemetry data being sent to Bitmovin backend is incomplete. While this has no impact on the viewer experience, Bitmovin relies on this data to measure and maintain quality of service on behalf of our customers. We therefore recommend upgrading to version
3.13.3+
Changed
- Updated IMA SDK dependency to version
3.26.0. This may require an update of the dependent Google Ads Play Services - Updated Google Cast SDK to
21.0.1 PlayerEvent.TimeChangedis now emitted on the main thread
Deprecated
AdaptationConfig.startupBitrateas it does not do what the name suggests. UseAdaptationConfig.initialBandwidthEstimateOverrideinstead
3.12.0
Released: 2022-01-18
Added
- Support for different audio and video codec priorities via
SourceConfig.audioCodecPriorityandSourceConfig.videoCodecPrioritywhen multiple sources are part of a playback session
Fixed
- Playhead on the seekbar jumping back and forth while seeking when using the default Bitmovin Web UI
SourceErrorCode.Generalerror description in Bitmovin Web UI showing placeholder instead of a proper message- Potential
NullReferenceExceptionwhen playing multi period DASH live streams - Muting during casting does not mute the connected cast-compatible device
Changed
- Default Bitmovin Web UI version to 3.32.0
3.11.1
Released: 2021-12-21
Fixed
- Streams containing unsupported metadata not playing
Player.currentTimereturning incorrect values for progressive live streams- Post-roll IMA ads occasionally being played back only when replaying the source
ResourceIdentifierCallbacknot being called for DASH segmentsSourceEvent.SubtitleChangedcontaining a specialoffsubtitle track instead ofnullwhen enabling/disabling subtitles during casting. This behaviour was not in line with the same event during local playback.- Subtitles not disabling when passing
nulltoPlayer.setSubtitleduring casting.
3.11.0
Released: 2021-12-07
Added
SourceEvent.DrmDataParsedto be emitted from the correspondingSourcePlayer.playbackTimeOffsetToRelativeTimeto convert absolute live timestamps to relative timestampsPlayer.playbackTimeOffsetToAbsoluteTimeto convert relative live timestamps to absolute timestamps
Fixed
Player.playbackVideoDatareturningnullafter a period switch to a DASH period containing different qualities than the previous onePlayerEvent.VideoPlaybackQualityChangedbeing emitted withnullas the new quality after a period switch to a DASH period containing different qualities than the previous one- Setting
Player.volumeand callingPlayer.muteorPlayer.unmutenot working when there is no source loaded - Setting
Player.volumeand callingPlayer.muteorPlayer.unmutenot working while connecting to a cast-compatible device - Initial volume and muted state sometimes not being respected for ad playback
- Muxed tracks being listed as separate
OfflineOptionEntrys for download - Invalid tracks being listed as
OfflineOptionEntrys for download
Changed
- Integrated changes from ExoPlayer version
2.15.1 - Muted state is not being synced between the local device and any cast receiver anymore as the audio setup between those devices is too different for this to be a sensible default behavior. The old behavior can be achieved by manually muting or unmuting after
PlayerEvent.CastStartedorPlayerEvent.CastStoppedis emitted
3.10.0
Released: 2021-11-23
Added
SourceEvent.MetadataParsedto be emitted for in-band metadata from theSourcethe metadata actually belongs to. With this addition all metadata formats are emitted correctly through the respectiveSource
Fixed
Player.currentTimenot returning an epoch timestamp for DASH live streams with periods declaring astarttimePlayer.currentTimereturning the seek target timestamp while seekingPlayer.currentTimereturning the time shift target timestamp while time shiftingPlayerEvent.Seekedbeing emitted before enough data is loaded to continue playbackPlayerEvent.TimeShiftedbeing emitted before enough data is loaded to continue playback- Incorrect
Metadata.startTimefor in-band metadata in the first Period of a DASH live streams - Incorrect
Metadata.startTimefor EventStream metadata in DASH live streams - Low Latency catchup and fallback mechanism not working when close to the live edge
- Not selected media tracks being downloaded when they contain metadata
PlayerEvent.TimeShiftnot containing absolute timestamps when time shifting in a DASH live sourcePlayerEvent.TimeShiftnot containing relative timestamps when time shifting in an HLS live source
Changed
PlayerEvent.Seekedis now emitted once the seek operation is actually completed and enough data is buffered to continue playback instead of it being emitted immediately after callingPlayer.seekPlayerEvent.TimeShiftedis now emitted once the time shift operation is actually completed and enough data is buffered to continue playback instead of it being emitted immediately after callingPlayer.timeshiftPlayerEvent.StallStartedandPlayerEvent.StallEndedare not emitted during seek or time shift operations anymore- The new event sequence when triggering replay by calling
Player.playwhen the player has finished playback isPlayerEvent.Play,PlayerEvent.PlaylistTransition,PlayerEvent.Playinginstead ofPlayerEvent.PlaylistTransition,PlayerEvent.Play,PlayerEvent.Playing
Known Issues
- Incorrect
Metadata.startTimefor in-band metadata in periods that are not at the first position in DASH live streams
3.9.0
Released: 2021-11-10
Added
SourceEvent.DownloadFinishedto be emitted for inactive sources in a playlist- Details on what caused a specific error (if available) to
OfflineErrorEvent
Fixed
- General offline error being surfaced via
SourceErrorCode.Generalinstead ofOfflineErrorCode.General
Known Issues
- Due to a limitation in the Google Cast SDK, casting does not work when targetSdkVersion is set to 31. This is tracked in https://issuetracker.google.com/issues/195588434
Removed
- Koin dependency
3.8.1
Released: 2021-10-28
Fixed
- Suspended offline downloads of individual tracks that were started utilizing Player SDK version 2 cannot be resumed with Player SDK version 3
Known Issues
- Due to a limitation in the Google Cast SDK, casting does not work when targetSdkVersion is set to 31. This is tracked in https://issuetracker.google.com/issues/195588434
3.8.0
Released: 2021-10-12
Added
PlayerNotificationManager.createWithNotificationChanneloverload that takes aCustomActionReceiverSource.getThumbnailto expose thumbnails for inactive sources in a playerAdItem.preloadOffsetto specify the amount of seconds the ad manifest should be loaded in advance compared to when the ad break is scheduled for playback- Support for background playback of IMA ads
Fixed
- Bitmovin Web UI having an invalid duration when joining an existing cast session
- Bitmovin Web UI occasionally not reflecting the correct current time when starting a cast session while playback is paused
- Bitmovin Web UI having an invalid duration after pre-roll ad was played when autoplay is enabled
- Cast receiver incorrectly displaying live source with VoD UI
Player.durationreturning0.0instead of-1.0if it is unknown during castingPlayercrashing if it gets detached from thePlayerViewwhile ads are scheduled
Known Issues
- Due to a limitation in the Google Cast SDK, casting does not work when targetSdkVersion is set to 31. This is tracked in https://issuetracker.google.com/issues/195588434
Changed
- The offset with which the manifest for ads was preloaded now defaults to
0seconds (instead of10). With introducing thepreloadOffseton theAdItemthis can now be configured per ad break
3.7.1
Released: 2021-09-28
Fixed
- Ad playback not pausing if hosting app is sent to background
3.7.0
Released: 2021-09-14
Added
ResourceIdentifierCallbackparameter toOfflineContentManager.getOfflineContentManager()in order to not lose already downloaded resources when the resource URLs (e.g. segment URLs) have changed since the last time the source was downloaded for offline playback- Support for the
@endNumberattribute in DASH manifests
Fixed
- Additional
PlayerEvent.Playingbeing emitted when player resumes playback after stall and it was playing before the stall PlayerEvent.Pausedbeing emitted when pausing a fresh playback session wherePlayer.playwas never called beforePlayer.isPausedreturning true for a fresh playback session wherePlayer.playwas never called before pausingPlayerEvent.CastPlaybackFinishedbeing emitted immediately after connecting to a cast-compatible device, even though playback is not finishedPlayerEvent.CastPlayingbeing emitted immediately after connecting to a cast-compatible device, even though content is not playingPlayerEvent.CastPausedbeing emitted immediately after connecting to a cast-compatible device, even though content was not explicitly pausedPlayerEvent.Pausedbeing emitted when connecting to a cast-compatible device when content was already playing on the local device before- Additional
PlayerEvent.PlayandPlayerEvent.Playingbeing emitted when returning from a cast-compatible device to local device playback and content was already playing on the cast-compatible device - Replay button not showing on the local device when playback has finished while casting to a cast-compatible device
SourceConfig.audioCodecPriorityandSourceConfig.videoCodecPrioritynot being respected when loading a single source into the playerDownloadFinished.lastRedirectionLocationbeingnullwhen a redirect happened
Changed
PlayerEvent.Play,PlayerEvent.Playing,PlayerEvent.PausedandPlayerEvent.PlaybackFinishedare now also emitted while connected to a cast-compatible device
Deprecated
PlayerEvent.CastPaused,PlayerEvent.CastPlaying,PlayerEvent.CastPlaybackFinished.PlayerEvent.Paused,PlayerEvent.PlayingandPlayerEvent.PlaybackFinishedcan be used instead
Removed
TweaksConfig.shouldEmitAllPendingMetadataOnStreamEndas it has no effect anymore. The expected behaviour is now achieved without the need to configure it
3.6.0
Released: 2021-08-03
Added
PlaybackConfig.audioFilterandPlaybackConfig.videoFilterthat can be set to a newMediaFilterto specify how strictly potentially unsupported media tracks and qualities are filtered out of a playback sessionTweaksConfig.devicesThatRequireSurfaceWorkaroundto workaround a potential problem with some device'sSurfaceimplementationCue.verticalTypeto represent the vertical orientation of a cue
Fixed
- Subtitles being rendered off-screen when using the Bitmovin Player Web UI
Changed
- Media tracks and qualities that are definitely not supported during a playback session are now filtered out by default, meaning that they will not be exposed via
Player.availableAudio,Player.availableAudioQualitiesandPlayer.availableVideoQualities.PlaybackConfig.audioFilterandPlaybackConfig.videoFiltercan be set to a differentMediaFilterto make the filtering more strict or to not filter at all - Paddings and font sizes in the Web UI are slightly adjusted
3.5.0
Released: 2021-07-20
Added
- Support for EXT-X-DATERANGE metadata tags in HLS playlists, which are surfaced via
SourceEvent.MetadataParsedandPlayerEvent.Metadataevents
Fixed
- Wrong text positioning when using the
SubtitleView Player.destroyleading to a deadlock if called while metadata is being decoded
3.4.0
Released: 2021-07-06
Added
SourceEvent.MetadataParsedto be emitted for inactive sources in a playlist when DASHEventStreammetadata is parsed
Fixed
EventMessage.durationMsreturning a nonsensical value when the duration is unknown- Possible crash near end of stream with subtitles enabled
Changed
SourceEvent.MetadataParsedfor DASHEventStreammetadata is now emitted as soon as the manifest is parsed instead of near the start time of the metadataEventMessage.durationMsis now nullable and is null if the duration of the metadata event is unknown
3.3.0
Released: 2021-06-22
Added
SourceEvent.MetadataParsedto be emitted for inactive sources in a playlist when SCTE metadata is parsed for HLS content
Fixed
- Potentially wrong
timeshiftvalues after loading a source into a player that has played a live source before SourceEvent.Unloadednot being emitted through thePlayerwhen unloading the player- Video freezing when skipping an ad
- Duplicate
PlayerEvent.PlaybackFinishedbeing emitted when loading, unloading or pausing the player after playback has finished BufferApi.getLevelreturning the wrong buffer level when the next source in a playlist starts to load
3.2.0
Released: 2021-06-08
Added
TweaksConfiguration.useDrmSessionForClearSourcesthat specifies whether a DRM session should be used for clear sources in a playlist if they follow after a DRM protected source- Performance improvements when using the Bitmovin Web UI by caching values that are fetched frequently
Fixed
- TTML image subtitle positioning in
SubtitleView - Potential crash when detaching and attaching a
Surfaceto the player while playing non-DRM protected content and then detaching again when playing DRM protected content within the same playback session
3.1.0
Released: 2021-05-26
Added
BufferConfig.startupThresholdto configure the minimum amount of seconds of playback data to buffer before starting playback for the first timeBufferConfig.restartThresholdto configure the minimum amount of seconds of playback data to buffer before starting playback again after a stall
Fixed
- Potential
RemoteServiceExceptionwhen setting anOfflineConfig - UI not reflecting correct video qualities and playback speed when attaching the
Playerto thePlayerViewafter loading a source
3.0.1
Released: 2021-05-11
Fixed
- Potential crash when starting playback during a cast session
PlayerEvent.Inactivenot being emitted for the previous playback session when loading new sources into an already active player- Potential exception when casting to a remote device is stopped while it is actively playing
- Potential selection of wrong tracks when downloading HLS content
- Deadlock when using VR functionality
- UI always becoming visible after exiting PiP, ignoring previously set visibility
- PiP button not being displayed in the web UI
- Progressive content not being downloaded for offline playback
3.0.0
Released: 2020-04-27
Added
- Scope information to dependencies in the generated POM file of the SDK in order to not unnecessarily pollute the namespace of the consuming project
- The SDK now includes the source-code of the
apipackage for a better developer experience without the need to consult the JavaDocs or external docs frequently - Completely reworked documentation for a more productive and enjoyable learning experience. The new docs are based on Kotlin and include more information, a new design, search functionality and more
- More intuitive and flexible way of handling event subscriptions with the new
EventEmitter, which is implemented by thePlayer,SourceandPlayerView. It now requires less boilerplate to subscribe/unsubscribe to events and works with either lambdas orEventListenerimplementations, offering intuitive usage from Kotlin and Java Player, which replaces theBitmovinPlayeras the main player type. APlayerinstance can be created viaPlayer.createSource, which represents the new main type that is loaded into aPlayer. It emits its own events and is configured via theSourceConfig. ASourceinstance can be created viaSource.createPlaylistConfig, which allows the configuration of a playlist consisting of multipleSources. This config can then be loaded into a player instance in order to enable gapless playback across multiple sources, as upcoming sources can be preloaded before they begin playbackPlayer.playlistto manage the player's playlist and transition between sourcesPlayer.source, which returns the currently activeSourcePlayer.load(Source)to enable loading of the newSourcetypeSourceConfig.url, which returns the url of theSourceConfigSourceConfig(url: String, type: SourceType)constructor to create aSourceConfigof a specific typePlayerEvent.PlaylistTransition, which is emitted when the player transitions between two sources in a playlistSourceEvent.DurationChanged, which is emitted when a source transitions from live to VoDPlayerEvent.Active, which is emitted when a playback session starts (i.e. aSourceorPlaylistConfigis loaded into the player)PlayerEvent.Inactive, which is emitted when the player is unloaded
Changed
- Renamed Maven
artifactIdfromplayercoretoplayer. The full dependency is nowcom.bitmovin.player:player:<version> - Moved all public API to new
com.bitmovin.player.apipackage, requiring a simple re-import. Some concrete implementations were not moved - Renamed all classes/interfaces that have acronyms in their name to follow a consistent naming pattern (e.g.
VRtoVr,APItoApi) - Replaced
BitmovinPlayerEventwithEventand two subtypes:PlayerEventandSourceEvent - All events are now split up between
PlayerEventandSourceEvent(e.g.ReadyEventis nowPlayerEvent.Ready,SourceLoadedEventis nowSourceEvent.Loaded) - Error codes were reworked and split up into
PlayerErrorCodeandSourceErrorCodeenums - Warning codes were reworked and split up into
PlayerWarningCodeandSourceWarningCodeenums EventListenernow has aonEventfunction to make it generic and usable for all events instead of requiring a different interface for each eventSourceEvent.Load.sourceConfigof typeSourceConfigtoSourceEvent.Load.sourceof typeSourceSourceEvent.Loaded.sourceConfigof typeSourceConfigtoSourceEvent.Loaded.sourceof typeSourcePlayerEvent.Seeknow hasfromandtoproperties of typeSeekPosition- Default Bitmovin Web UI version to 3.23.0
- CAF is now used as the default cast receiver
- Renamed
SourceItemtoSourceConfig - Renamed all configuration objects to use the
Configsuffix instead of theConfigurationsuffix - Refactored many configs to data classes, making it possible to use named parameters instead of setters (e.g.
PlayerConfig(advertisingConfig = AdvertisingConfig())) - Changed enum code style from SCREAMING_SNAKE_CASE to PascalCase
- Renamed
BitmovinPlayerViewtoPlayerView - Renamed
BitmovinSubtitleViewtoSubtitleView - Renamed
BitmovinPlayerNotificationManagertoPlayerNotificationManager SourceConfigto only handle a singleProgressiveSourceSourceConfigto only handle a singleDrmConfigSourceConfig.setPersistentPostertosourceConfig.setPosterPersistent- Renamed
MediaSourceTypetoSourceType - Deprecated constructor
SourceConfig(url: String)in favour ofSourceConfig.fromUrl(url: String) - Changed all
Arrayreturn types in thePlayerto returnListinstead - Improved nullability information on
PlayerConfig,VrConfigandLowLatencyConfig - Renamed
FullscreenHandler.isFullScreentoFullscreenHandler.isFullscreenfor consistency SourceConfig.posterSourceis now of typeString?instead ofURLResource- Changed return type of
AdvertisingConfig.schedulefromArraytoList - Changed return types of
PlaybackConfig.videoCodecPriorityandPlaybackConfig.audioCodecPriorityfromArraytoList - Renamed
AdaptationConfig.isAllowRebufferingtoAdaptationConfig.isRebufferingAllowed Track.idis not nullable anymore
Deprecated
MediaSource,AdaptiveSource,HlsSource,SmoothSource,ProgressiveSourceandDashSource.SourceConfigshould instead be constructed using an url and aSourceType. Alternatively,SourceConfig.fromUrl(String)can be used to try and auto-detect the source type. These deprecated functions will be removed in an upcoming minor versionSourceConfig.addSubtitleTrackfunctions that do not take aSubtitleTrackdirectly. These deprecated functions will be removed in an upcoming minor versionSourceConfig.setThumbnailTrackfunction that does not take aThumbnailTrackdirectly. This deprecated function will be removed in an upcoming minor version
Removed
- Support for Bitmovin Web UI v2. Use Bitmovin Web UI v3 instead
- Support for non-CAF cast receivers
EventHandler. Refer to the newEventEmitterto see how to subscribe to events of thePlayer/Source/PlayerView- All
*Listenerclasses, as the newEventEmitterworks with lambdas or genericEventListenerimplementations Player.setup. In order to re-configure player behaviour, a new player must be createdConfigurationUpdatedEventPlayer.load(SourceConfiguration). UsePlayer.load(Source)orPlayer.load(SourceConfig)insteadflagsparameter fromOfflineContentManager.getOfflineContentManager()andBitmovinDownloadService()- Empty
Configinterface that some configs implemented CastConfig. UseRemoteControlConfiginsteadPlaybackConfig.getAutoplayEnabled. UseisAutoplayEnabledinsteadPlaybackConfig.getMuted. UseisMutedinsteadPlaybackConfig.getTimeShiftEnabled. UseisTimeShiftEnabledinsteadAdBreakConfig.skippable. UseskippableAfterinsteadLinearAd.skippable. UseskippableAfterinstead- Deprecated
BitmovinCastManager.initializefunctions Track.getDefault. UseisDefaultinsteadThumbnailTrackconstructor which allows setting theurl,label,idandisDefault. UseThumbnailTrack(url)insteadStyleConfig.getUiEnabled. UseisUiEnabledinsteadgetShowErrors,isShowErrorsandsetShowErrorsfrom theStyleConfig- Deprecated methods from
SourceConfig - Deprecated
PlayerAPIfunctions. The removed functionality can be found on their individual namepsaces (e.g.Player.buffer,Player.lowLatency,Player.vr) PlayerConfig.fromJSONPlayerAPIand moved definitions to thePlayerinterface- Generic type parameter from
UserInterfaceApi DrmSystemsenum. UseWidevineConfigandClearKeyConfigdirectlyPlayerViewconstructor that takes aPlayerConfig. UsePlayerView(Context, Player?)to provide a custom player insteadGoogleCastReceiverVersionand all usagesPlayerFragmentJsonConverter
Updated 6 days ago