Release Notes (Android)
Android SDK Release Notes
Release notes for the v2 version of the Android SDK can be found here.
3.93.0
Released: 2024-11-15
Added
DebugConfig.isLoggingEnabled
that enables debug-level logging for all events sent by Bitmovin components as well as ExoPlayer logsPlayerEvent.Info
,SourceEvent.Info
,OfflineEvent.Info
emitted with environment and config information on component creation
Fixed
- Some error events causing
StackOverflowError
when 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-session
module, 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 sessionMediaSessionService
as a base class to handle media session interactions, supporting controller connections and notifications
Changed
- Using the
TweaksConfig.forceReuseVideoCodecReasons
reconfigures the codec on reuse. Before it was reusing the codec without reconfiguration
Deprecated
DefaultMediaDescriptor
andPlayerNotificationManager
. To show a player notification, use the media session integration instead.
3.91.0
Released: 2024-10-31
Added
-
PlayerEvent.StallStarted
andPlayerEvent.StallEnded
being emitted when an active ad stalls due to insufficient buffer -
PlayerViewConfig.enableComposeSurfaceSyncWorkaround
to enable a fix for the PlayerView being cropped sometimes when
using compose on Android 34 devices. This is per default disabled
Changed
Player.isStalled
now returnstrue
when an active ad stalls due to insufficient buffer
3.90.0
Released: 2024-10-28
Added
UiConfig.Web.variant
to set the UI variant that should be used by the Bitmovin Web UIUiConfig.Web.focusUiOnInitialization
to allow the Bitmovin Web UI to request focus on initialization. Per default it will be enabled, when theTvUi
variant is configured
Fixed
AdError
event 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 ExoPlayer
version1.4.1
- Default Bitmovin Web UI version to
3.74.0
- Officially support Android 15. Update
targetSdk
andcompileSdk
to 35
3.89.0
Released: 2024-10-18
Added
TweaksConfig.forceReuseVideoCodecReasons
that 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.Warning
is 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.1
to2.49
to resolve incompatibility issues with versions earlier than2.50.0
, introduced by a breaking change in Dagger2.50.0
Removed
TweaksConfig.forceReuseVideoCodecOnColorInfoMismatch
in favor ofTweaksConfig.forceReuseVideoCodecReasons
3.88.0
Released: 2024-10-14
Added
TweaksConfig.reuseAdsLoaderAcrossImaAds
to 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.allowChunklessPreparationForHlsStreamingAds
tofalse
- Updated Bitmovin Analytics collector dependency to version
3.10.0
3.87.0
Released: 2024-10-04
Added
UiConfig.WebUi.customOptions
to allow configuring custom options for the Bitmovin Web UI
Changed
- When
catchupConfig
'sseekThreshold
is 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.qualityStabilityBalance
to 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.videoLoadTimeout
which can be used to change the default timeout to wait for a video to load before timing out. This applies to IMA ads onlyTweaksConfig.httpStatusCodesToTryFallback
which 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.MetadataParsed
events 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.releasePlayerTimeout
to configure the timeout to release the playerTweaksConfig.detachSurfaceTimeout
to configure the timeout to detach the player from the surfaceTweaksConfig.disableAudioTracksWhileInBackground
to 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.forceReuseVideoCodecOnColorInfoMismatch
that 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.Warning
is emitted when such a mismatch is ignoredPlayerEvent.Info
that 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.allowChunklessPreparationForHls
is 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
targetLatency
is defined and
TweaksConfig.enableMainContentDecodingDuringAds
is set tofalse
by 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.Error
in case of a decoder initialization failure - Detailed error data for
PlayerEvent.Error
in case of a decoder failure
Changed
- Improve performance when switching from a preroll ad to a live stream when
targetLatency
is defined by regularly timeShifting to the live edge
while the preroll is playing
3.79.0
Released: 2024-08-23
Added
PlayerErrorCode.Timeout
toPlayerErrorCode
that will be emitted as part of aPlayerEvent.Error
when the player times out in an operation such as releasing resources when destroying the playerPlayerWarningCode.DecoderInitializationRetry
andPlayerWarningCode.DecoderInitializationFallback
to report on internal failure recovery mechanismsTweaksConfig.enableMainContentVideoCodecInitializationFallback
andTweaksConfig.enableMainContentAudioCodecInitializationFallback
to change the decoder fallback behaviourTweaksConfig.enableAdContentVideoCodecInitializationFallback
andTweaksConfig.enableAdContentAudioCodecInitializationFallback
to 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.averageBitrate
andQuality.peakBitrate
which are accessible viaAudioQuality
andVideoQuality
Fixed
SourceEvent.VideoQualitiesChanged
not being emitted andSource.availableVideoQualities
not being populated during ad playback whenTweaksConfig.enableMainContentDecodingDuringAds
is set tofalse
3.78.0
Released: 2024-08-02
Added
TweaksConfig.enableMainContentDecodingDuringAds
to support ad playback on devices with only one hardware decoder.
OnlyAdSourceType.Ima
ads 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 ExoPlayer
version1.3.1
3.76.0
Released: 2024-07-19
Fixed
- Setting
SourceLiveConfig.targetLatency
now changes the initial player live edge instead of being the initial
timeShift
start 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.targetLatency
is now the live edge target latency. This means that:- Calling
timeShift(x)
doesn't changeLowLatencyApi.targetLatency
anymore - The player will only try to reach
LowLatencyApi.targetLatency
when 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
targetLatency
changes the live edge position
This aligns the behaviour of the Android player with the iOS and Web player- For example: when lowering the
targetLatency
by 5s, both thetimeShift
andmaxTimeShift
will lower by 5s, as the timeShift window is increased
- For example: when lowering the
- Calling
SourceLiveConfig.targetLatency
,LowLatencyApi.targetLatency
,LowLatencyApi.latency
,LowLatencyConfig.targetLatency
andLiveConfig.liveEdgeOffset
are now the distance
to the current real time, instead of player live edge. This means that the value returned
byLowLatencyApi.latency
is the glass-to-glass latency- Depending on the stream this change might cause the values that are returned by
LowLatencyApi.latency
to be
bigger, but this doesn't mean that the actual glass-to-glass latency is bigger compared to the old implementation - Similarly, bigger
SourceLiveConfig.targetLatency
should 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 fortargetLatency
duration away from the player live edge and it will try to maintain this position2.)
represents the new behaviour. Setting atargetLatency
moves the player live edge to the distance from the current real time. The player will try to bring theLowLatencyApi.latency
as close as possible to thetargetLatency
while 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.0
to5.0
due to the changed mentioned above
Deprecated
LiveConfig.liveEdgeOffset
, useSourceLiveConfig.targetLatency
instead. This has the same effect, but is
configurable on per source basis
3.75.1
Released: 2024-07-05
Fixed
- Returning
true
inAdvertisingConfig.shouldPlayAdBreak
for VMAP ads with multiple cue points sometimes results in invalid player state
3.75.0
Released: 2024-06-28
Added
TweaksConfig.preferSoftwareDecoding
to prefer the use of software decoding for main content
Fixed
- Wrong default value for
LowLatencyConfig.fallbackConfig
being used when noSourceConfig.liveConfig
is provided, causing the player to speed up when slowdown is needed
Changed
- Updated
kotlinx-coroutines
from1.8.0
to1.8.1
- Updated
kotlinx-serialization
from1.9.22
to2.0.0
- Updated
gson
from2.10.1
to2.11.0
- Updated
slf4j-api
from2.0.5
to2.0.7
- Updated
androidx.annotation
from1.7.1
to1.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.isAutoplayEnabled
totrue
Changed
- Updated Bitmovin Analytics collector dependency to version
3.5.1
Known Issues
- Wrong default value for
LowLatencyConfig.fallbackConfig
being used when noSourceConfig.liveConfig
is provided, causing the player to speed up when slowdown is needed
To work around this issue set aSourceConfig.liveConfig
on your live sources
3.73.0
Released: 2024-06-07
Fixed
- Calling
Player.seek
afterPlayerEvent.PlaybackFinished
erroneously resuming playback
Changed
- Default Bitmovin Web UI version to
3.64.0
Known Issues
- Wrong default value for
LowLatencyConfig.fallbackConfig
being used when noSourceConfig.liveConfig
is provided, causing the player to speed up when slowdown is needed
To work around this issue set aSourceConfig.liveConfig
on 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.ssai
API to collect analytics for server side ad insertion using Bitmovin AnalyticsVastAdData.wrapperAdSystems
andVastAdData.wrapperCreativeIds
to the [Ad.data] for VAST ads handled by the Google IMA SDK
Changed
- Increased the
minSdkVersion
to 19 - No notification is shown when setting the
OfflineConfig
and no download is in progress - Updated Bitmovin Analytics collector dependency to version
3.5.0
- Calling
PlayerView.setPlayer
with the already set instance has no effect anymore
Known Issues
- Wrong default value for
LowLatencyConfig.fallbackConfig
being used when noSourceConfig.liveConfig
is provided, causing the player to speed up when slowdown is needed
To work around this issue set aSourceConfig.liveConfig
on 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.seekThreshold
used for fallback and vice-versa - Player internally seeking to
SourceOptions.startOffset
thenSourceLiveConfig.targetLatency
on low latency stream start, leading to longer than expected playback start
Changed
- Live streams start at
SourceLiveConfig.targetLatency
if set instead ofSourceOptions.startOffset
- Default
TargetSynchronizationConfig.seekThreshold
toPOSITIVE_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.isAutoplayEnabled
isfalse
and user waits for more than5
second 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.fallbackConfig
being used when noSourceConfig.liveConfig
is provided, causing the player to speed up when slowdown is needed
To work around this issue set aSourceConfig.liveConfig
on your live sources
3.69.0
Released: 2024-05-17
Added
SourceLiveConfig
to configure the player behaviour when playing live content.
Contrary toPlayerConfig
'sLiveConfig
that applies to a whole playback session,
SourceLiveConfig
applies only the source itconfigures
.
Fixed
- Player might be paused after skipping an VMAP ad break by using
AdvertisingConfig.shouldPlayAdBreak
Changed
- Added
DOCTYPE
declaration 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.liveConfig
insteadLiveConfig.minTimeShiftBufferDepth
. UseSourceLiveConfig.minTimeShiftBufferDepth
instead
Known Issues
- Wrong default value for
LowLatencyConfig.fallbackConfig
being used when noSourceConfig.liveConfig
is provided, causing the player to speed up when slowdown is needed
To work around this issue set aSourceConfig.liveConfig
on 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 theVastMacroConfig
if required - Extended error message content for
DecoderGeneral
,DecoderInitialization
,DecodingFailed
,DecodingUnsupported
,DecodingExceedsCapabilities
,Io
,ConnectionFailed
,ConnectionTimeout
,HttpStatusCode
andClearTextConnection
3.67.1
Released: 2024-04-26
Fixed
- An
IllegalArgumentException
being thrown when reducing the value ofOfflineConfig.maxSimultaneousSegmentDownloads
and calling Bitmovin'sDownloadManager.setRequirements
3.67.0
Released: 2024-04-19
Added
PlayerWarningCode.TargetLatencyTooLowForCurrentNetworkQuality
,
which is emitted in aPlayerEvent.Warning
when 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.23
and 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.3
standard while offering reliable backward compatibility down to VAST2.0
.AdSourceType.Bitmovin
to schedule anAdSource
using 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)
BitmovinAdvertisingConfig
accessible viaAdvertisingConfig.bitmovin
to configure Bitmovin Advertising Module handlingVastMacroConfig
accessible viaBitmovinAdvertisingConfig.macro
to configure VAST macro handling within Bitmovin Advertising ModuleVastMacroValueProvider
accessible viaVastMacroConfig.macroValueProvider
to provide or override macro values dynamicallyVastMacro
,VastMacroContext
andVastMacroScope
to 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.Bitmovin
instead
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.html
HTML generation:\t
previously 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
,DecodingUnsupported
andDecodingExceedsCapabilities
toPlayerErrorCodes
Io
,ConnectionFailed
,ConnectionTimeout
,HttpStatusCode
andClearTextConnection
toSourceErrorCodes
AdvertisingConfig.shouldPlayAdBreak
that 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.minForwardBufferLevelForQualityIncrease
to configure the time to switch to better quality track
Fixed
- Low Latency target set via
Player.lowLatency
not applied on some live streams with autoplay enabled - Offline playback fails for some DRM protected HLS streams
Changed
PlayerEvent.Error
events are more fine granular withDecoderGeneral
,DecoderInitialization
,DecodingFailed
,DecodingUnsupported
,DecodingExceedsCapabilities
error codes and the respective errors are no longer reported with theGeneral
error codeSourceEvent.Error
events are more fine granular withIo
,ConnectionFailed
,ConnectionTimeout
,HttpStatusCode
andClearTextConnection
error codes and the respective errors are no longer reported with theGeneral
error 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.timeShift
is ignored when aLowLatencyConfig
is configured- Some special characters in subtitles are displayed incorrectly
3.61.0
Released: 2024-03-01
Added
SourceEvent.PeriodChanged
to be emitted from sources of type DASH for which the active period has changed
3.60.0
Released: 2024-02-16
Added
UiConfig.WebUi.forceSubtitlesIntoViewContainer
to force subtitles into the player view instead of cropping them when using the Bitmovin Web UILinearAd.uiConfig
that holds relevant information for displaying the linear ad
Fixed
NetworkConfig.preprocessHttpRequestCallback
not 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.forceSubtitlesIntoViewContainer
totrue
per default
3.59.0
Released: 2024-02-02
Fixed
- DRM license renewal requested when downloading a DRM protected source for offline playback although
DrmConfig.isLicenseRenewable
is 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
UnsupportedOperationException
thrown 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
startOffset
is defined
Known Issues
UnsupportedOperationException
thrown when playing a stream with ads on Android 7.1 and below
Changed
- Integrated changes from
Media3 ExoPlayer
version1.2.1
- Increased minimum required
compileSdk
to34
3.57.1
Released: 2024-01-19
Fixed
NoClassDefFoundException
when instantiating aPlayer
orSource
Known Issues
UnsupportedOperationException
thrown 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
Player
andSource
Player(Context, PlayerConfig, [AnalyticsPlayerConfig])
to create aPlayer
instancePlayerBuilder
forPlayer
creation from JavaSource(SourceConfig, [AnalyticsSourceConfig])
to create aSource
instanceSourceBuilder
forSource
creation from JavaAnalyticsPlayerConfig.Enabled
andAnalyticsPlayerConfig.Disabled
to either enabled and customize or disable analytics data collection onPlayer
instancesAnalyticsSourceConfig.Enabled
to customize analytics data collection forSource
s
Fixed
- Potential crash when the audio capabilities change during playback
Known Issues
NoClassDefFoundException
when instantiating aPlayer
orSource
UnsupportedOperationException
thrown when playing a stream with ads on Android 7.1 and below
Deprecated
Player.create
function andPlayerFactory
. Use thePlayer(...)
factory function, or thePlayerBuilder
insteadSource.create
function andSourceFactory
. Use theSource(...)
factory function, or theSourceBuilder
instead
3.56.0
Released: 2024-01-12
Added
PlaybackConfig.handleAudioFocus
to configure automatic audio focus handlingPlaybackConfig.handleAudioBecomingNoisy
to configure automatic audio becoming noisy handling- Progressive ads can be played without the IMA SDK
PlayerWarningCode.IncorrectApiUsage
when scheduling anAdItem
with sources of different types
Fixed
- Exception when the stream duration is negative. Now a
SourceEvent.Error
will 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.FrameAboutToBeRendered
which 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_SYNC
permission 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.videoAdaptation
callback 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.label
andAudioTrack.label
incorrectly returninglanguage
instead oflabel
for DASH streams withLabel
element presentAudioTrack.label
incorrectly returning an empty string if noNAME
parameter 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
jason
build might clash with exoplayer/media3 resources PlayerView
not displaying a fullscreen button when adding a fullscreen handler while not being attached to window
Changed
- The
exo
prefix of android resources of thejason
build 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.allowChunklessPreparationForHls
to allow HLS preparation without downloading media segments
Changed
- Integration from
ExoPlayer 2.19.1
toJetpack Media3 ExoPlayer 1.1.1
. This internal change does not require any further action except in special cases:- If you are using the
TweaksConfig.exoPlayerCache
api you will have to migrate the package imports fromcom.google.android.exoplayer2.upstream.cache.Cache
toandroidx.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'sCaptionStyleCompat
tocom.bitmovin.player.CaptionStyle
. - If you are catching
UnsupportedDrmException
you will have to update the import package fromcom.google.android.exoplayer2.drm.UnsupportedDrmException
tocom.bitmovin.player.api.deficiency.exception.UnsupportedDrmException
. This change was already introduced in 3.48.0 - If you are already using
Jetpack Media3 ExoPlayer
in addition toBitmovin Player
please make sure to use the+jason
version 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.requirements
is 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
ImaConfig
containing IMA specific configurationAdvertisingConfig.ima
to configure IMA for a playerImaUiType
andImaConfig.preferredUiType
to configure the preferred UI type for IMA adsPlayerWarningCode.DisablingImaUiFailed
which is emitted in aPlayerEvent.Warning
when theImaConfig.preferredUiMode
could not be appliedPlayerWarningCode.ApplyingImaUiElementPreferenceFailed
which is emitted in aPlayerEvent.Warning
when theImaConfig.preferredUiElements
could not be applied
Fixed
- Player wrongly emitting an additional
PlayerEvent.VideoSizeChanged
event with height and width set to0
when manually switching video quality, causingPlayerView
to be resized
Deprecated
AdvertisingConfig.adsManagerAvailableCallback
. UseImaConfig.adsManagerAvailable
insteadAdvertisingConfig.beforeInitialization
. UseImaConfig.beforeInitialization
insteadAdvertisingConfig.imaUiElements
. UseImaConfig.preferredUiElements
instead
3.48.0
Released: 2023-10-16
Added
UiConfig.WebUi.playbackSpeedSelectionEnabled
to provide access to the UIConfig.playbackSpeedSelectionEnabled of the Bitmovin Web UIOfflineConfig.deviceStateRequirements
as a replacement for the deprecatedOfflineConfig.requirements
SubtitleView.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.UnsupportedDrmException
as 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.deviceStateRequirements
insteadSubtitleView.setStyle(CaptionStyleCompat)
. UseSubtitleView.setStyle(CaptionStyle)
instead
Known Issues
- Player wrongly emitting an additional
PlayerEvent.VideoSizeChanged
event with height and width set to0
when manually switching video quality, causingPlayerView
to be resized
3.47.0
Released: 2023-10-09
Added
PlayerViewConfig
that configures the visual presentation and behaviour of aPlayerView
- Constructor to the
PlayerView
that allows passing aPlayerViewConfig
Deprecated
PlayerConfig.styleConfig
as well asStyleConfig
itself. Use the newly introducedPlayerViewConfig
on thePlayerView
instead
Known Issues
- Player wrongly emitting an additional
PlayerEvent.VideoSizeChanged
event with height and width set to0
when manually switching video quality, causingPlayerView
to 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:label
andandroid:supportsRtl
application fields declared inplayer-core
sAndroidManifest.xml
Known Issues
- Player wrongly emitting an additional
PlayerEvent.VideoSizeChanged
event with height and width set to0
when manually switching video quality, causingPlayerView
to be resized
3.45.0
Released: 2023-09-25
Added
TweaksConfig.preferSoftwareDecodingForAds
to prefer the use of software decoding for ads playback
3.44.0
Released: 2023-09-18
Added
foregroundServiceType
andFOREGROUND_SERVICE_DATA_SYNC
permission toBitmovinDownloadService
RECEIVER_NOT_EXPORTED
flag to dynamically registeredBroadcastReceiver
inPlayerNotificationManager
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
jason
build might clash with exoplayer/media3 resources
Changed
- The
exo
prefix of android resources of thejason
build tobmp
3.43.0
Released: 2023-09-04
Added
TweaksConfig.discardAdsWhileCasting
to 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.vastLoadTimeout
which can be used to change the timeout for VAST ad manifest downloads
3.41.0
Released: 2023-08-07
Added
Player
andSource
methods 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 aSource
with 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
getThumbnail
returns wrongThumbnail
for 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.isHideFirstFrame
is set totrue
Changed
- Some
AdItems
are processed quicker after scheduling, thus the timing of related ad event might change - No
PlayerEvent.Play
andPlayerEvent.Paused
are 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.sdkVersion
to 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-INF
tag contains a colon, e.g. the scheme separator in an absolute URI
3.37.1
Released: 2023-05-02
Fixed
SourceConfig.startOffset
not 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.preprocessHttpRequestCallback
is provided and its return value is notnull
Changed
- Enforced that consuming projects must use a
compileSdk
at 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.CastStarted
andPlayerEvent.CastStopped
not 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.0
throwing aClassNotFoundException
when 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.0
throws aClassNotFoundException
when trying to access the Player version
3.34.0
Released: 2023-03-13
Added
TweaksConfig.enableExoPlayerLogging
that specifies whether ExoPlayer logs shall be printed to the logcat console
Known Issues
- Bitmovin Analytics Collector <=
2.14.0
throws aClassNotFoundException
when trying to access the Player version
3.33.1
Released: 2023-03-06
Fixed
- Player triggering VAST
complete
tracking event when being destroyed while playing an ad - Player triggering VAST
complete
tracking 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
AdViewGroup
during ad playback
3.33.0
Released: 2023-02-27
Added
OfflineWarningCode.DrmGeneral
which is emitted in aOfflineEvent.Warning
when a general warning occurred for DRM handling
Fixed
- Memory leak when using the
BitmovinCastManager
and not updating the context on every activity switch
3.32.0
Released: 2023-02-20
Added
PlayerWarningCode.RemotePlaybackFailed
which is emitted when playback on a connected cast-compatible device produces an errorPlayerWarningCode.AdDiscarded
which 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.FeatureContextuallyUnsupported
which is emitted when a feature on thePlayer
is not supported in the current context
Fixed
- Some errors not being propagated during Ad playback
- Casting DRM protected content without providing
SourceConfig.httpHeaders
does not start the video on the connected cast-compatible device
3.30.0
Released: 2023-02-06
Added
PlayerWarningCode.IncorrectApiUsage
which is emitted when a certain API usage on thePlayer
is 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.onConfigureMediaInfo
which can be used to configure Google CastMediaInfo
objects before they are loaded on the cast enabled devicePlayerWarningCode.IncorrectApiUsage
which is emitted when a certain API usage on thePlayer
is not correct and will have no effect
3.28.0
Released: 2023-01-23
Added
PlayerWarningCode.PlaylistManipulationFailed
which is emitted in aPlayerEvent.Warning
when it was not possible to manipulate the playlistPlayerWarningCode.AdvertisingGeneral
which is emitted in aPlayerEvent.Warning
when a general warning occurred in the advertising featurePlayerWarningCode.AdBreakFetchingFailed
which is emitted in aPlayerEvent.Warning
when the current ad break will not play any ads as no ads could be fetchedPlayerWarningCode.CastSourceMappingFailed
which is emitted in aPlayerEvent.Warning
when the playlist state on the cast enabled device is inconsistent to the local playlist stateOfflineWarningCode.DrmLicenseReleaseFailed
which is emitted in aOfflineEvent.Warning
when the DRM license failed to releaseSourceWarningCode.IncorrectApiUsage
which is emitted when a certain API usage is not correct and will have no effectSourceWarningCode.FeatureContextuallyUnsupported
which is emitted when a feature is not supported in the current context- Crash when playing Progressive Ads using Bitmovin Web UI
Fixed
ForegroundServiceStartNotAllowedException
thrown 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
availabilityStartTime
attribute set to time not at epoch - Unlike Kotlin's
EventEmitter
,JavaEventEmitter
'sEventListener
s could not receive base events.
3.26.0
Released: 2022-12-06
Added
EventEmitter
functionality toOfflineContentManager
enabling subscriptions toOfflineEvent
s emitted during theOfflineContentManager
lifecycle.OfflineEvent.Error
,OfflineEvent.Warning
andOfflineEvent.Info
are the supported eventsPlayerEvent.Info
andSourceEvent.Info
, which allow further monitoring ofPlayer
andSource
workflows
3.25.2
Released: 2022-11-23
Fixed
- Player very rarely is paused after calling
play
Player.duration
sometimes returning0.0
instead of-1.0
in case that the duration is unknown during casting- Crash when encountering an IMA ad error while using the Bitmovin Web UI
VideoDownloadQualityChangend
andAudioDownloadQualityChanged
are 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
ParcelUtil
as 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
SourceConfig
containing metadata VrConfig
not being usable without thekotlin-parcelize
plugin
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
LowLatencyConfig
is 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-DATERANGE
metadata tags are not processed for HLS playlists where theEXT-X-PROGRAM-DATE-TIME
maps 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.imaUiElements
to configure the visible UI elements during IMA ad playback
3.20.0
Released: 2022-07-05
Added
PlaylistApi.remove
, which removes aSource
from 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 aSource
to an active playback sessionPlayerEvent.SourceAdded
, which is emitted when a source was added to the active playback sessionSourceEvent.AudioTrackAdded
to replaceSourceEvent.AudioAdded
for naming consistencySourceEvent.AudioTrackRemoved
to replaceSourceEvent.AudioRemoved
for naming consistencySourceEvent.AudioTrackChanged
to replaceSourceEvent.AudioChanged
for naming consistencySourceEvent.SubtitleTrackAdded
to replaceSourceEvent.SubtitleAdded
for naming consistencySourceEvent.SubtitleTrackRemoved
to replaceSourceEvent.SubtitleRemoved
for naming consistencySourceEvent.SubtitleTrackChanged
to replaceSourceEvent.SubtitleChanged
for naming consistency
Fixed
- Crash when trying to resume or delete a download initiated with player version < 3.14.1
Deprecated
SourceEvent.AudioAdded
. UseSourceEvent.AudioTrackAdded
insteadSourceEvent.AudioRemoved
. UseSourceEvent.AudioTrackRemoved
insteadSourceEvent.AudioChanged
. UseSourceEvent.AudioTrackChanged
insteadSourceEvent.SubtitleAdded
. UseSourceEvent.SubtitleTrackAdded
insteadSourceEvent.SubtitleRemoved
. UseSourceEvent.SubtitleTrackRemoved
insteadSourceEvent.SubtitleChanged
. UseSourceEvent.SubtitleTrackChanged
insteadPlayer.availableAudio
. InsteadSource.availableAudioTracks
can be used on the active sourcePlayer.source
Player.audio
. InsteadSource.selectedAudioTrack
can be used on the active sourcePlayer.source
Player.setAudio
. InsteadSource.setAudioTrack
can be used on the active sourcePlayer.source
Player.availableAudioQualities
. InsteadSource.availableAudioQualities
can be used on the active sourcePlayer.source
Player.audioQuality
. InsteadSource.selectedAudioQuality
can be used on the active sourcePlayer.source
Player.setAudioQuality
. InsteadSource.setAudioQuality
can be used on the active sourcePlayer.source
Player.availableVideoQualities
. InsteadSource.availableVideoQualities
can be used on the active sourcePlayer.source
Player.videoQuality
. InsteadSource.selectedVideoQuality
can be used on the active sourcePlayer.source
Player.setVideoQuality
. InsteadSource.setVideoQuality
can be used on the active sourcePlayer.source
Player.availableSubtitles
. InsteadSource.availableSubtitleTracks
can be used on the active sourcePlayer.source
Player.subtitle
. InsteadSource.selectedSubtitleTrack
can be used on the active sourcePlayer.source
Player.setSubtitle
. InsteadSource.setSubtitle
can be used on the active sourcePlayer.source
Player.removeSubtitle
. InsteadSource.removeSubtitleTrack
can be used on the active sourcePlayer.source
Player.getThumbnail
. InsteadSource.getThumbnail
can 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
OfflineContentManager
failing 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.AudioAdded
to be emitted from theSource
for which the audio track was added. It is now also emitted for inactive sources in a playlistSourceEvent.AudioRemoved
to be emitted from theSource
for which the audio track was added. It is now also emitted for inactive sources in a playlistSourceEvent.AudioTracksChanged
, which is emitted when theSource.availableAudioTracks
changedSourceEvent.AudioQualityAdded
, which is emitted when a new audio quality was added toSource.availableAudioQualities
SourceEvent.AudioQualityRemoved
, which is emitted when an audio quality was removed fromSource.availableAudioQualities
SourceEvent.AudioQualitiesChanged
, which is emitted when theSource.availableAudioQualities
changedSourceEvent.AudioChanged
to be emitted from theSource
for 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.AudioQualityChanged
to be emitted from theSource
for 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.AudioDownloadQualityChanged
to be emitted from theSource
for which the download quality changed. It is now also emitted for inactive sources in a playlistSourceEvent.Warning
andSourceEvent.Error
to be emitted from theSource
for which the respective warning or error occurred. It is now also emitted for inactive sources in a playlist
Fixed
- Crash when creating a
PlayerNotificationManager
on Android 31 devices - Some errors not being surfaced via the corresponding
SourceEvent.Error
orPlayerEvent.Error
listeners
3.17.0
Released: 2022-04-26
Added
Source.availableSubtitleTracks
, which provides the currently available subtitle tracks of the sourceSourceEvent.SubtitleAdded
to be emitted from theSource
for which the subtitle track was added. It is now also emitted for inactive sources in a playlistSourceEvent.SubtitleRemoved
to be emitted from theSource
for which the subtitle track was added. It is now also emitted for inactive sources in a playlistSourceEvent.SubtitleTracksChanged
, which is emitted when theSource.availableSubtitleTracks
changedSource.setSubtitleTrack
, which allows setting a subtitle track for the sourceSource.selectedSubtitleTrack
, which provides the currently selected subtitle track of the sourceSourceEvent.SubtitleChanged
to be emitted from theSource
for 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
OfflineConfig
before 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
AudioQuality
to "auto" AudioTrack
selection 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.availableVideoQualities
changedSourceEvent.VideoDownloadQualityChanged
to be emitted from theSource
for 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
ExpandedControllerActivity
loading 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
SubtitleTrack
selection is reset to default when selecting anAudioTrack
AudioTrack
selection 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-OFFSET
value if present in a live HLS playlist. This could lead to an invalid DVR window, affecting potentialtimeshift
operations
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+
AudioTrack
selection is reset to default when selecting aSubtitleTrack
and vice versa
Changed
- Integrated changes from ExoPlayer version
2.16.1
SourceOptions.startOffset
is now nullable andnull
per default. This change was necessary to properly supportEXT-X-START:TIME-OFFSET
values
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.TimeChanged
being emitted before the start offset is applied for live sourcesPlayerEvent.TimeChanged
not 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.initialBandwidthEstimateOverride
to replaceAdaptationConfig.startupBitrate
as the latter does not do what the name suggests
Fixed
Player.seek
orPlayer.timeshift
being ignored when called insidePlayerEvent.Ready
listener
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.TimeChanged
is now emitted on the main thread
Deprecated
AdaptationConfig.startupBitrate
as it does not do what the name suggests. UseAdaptationConfig.initialBandwidthEstimateOverride
instead
3.12.0
Released: 2022-01-18
Added
- Support for different audio and video codec priorities via
SourceConfig.audioCodecPriority
andSourceConfig.videoCodecPriority
when 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.General
error description in Bitmovin Web UI showing placeholder instead of a proper message- Potential
NullReferenceException
when 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.currentTime
returning incorrect values for progressive live streams- Post-roll IMA ads occasionally being played back only when replaying the source
ResourceIdentifierCallback
not being called for DASH segmentsSourceEvent.SubtitleChanged
containing a specialoff
subtitle track instead ofnull
when enabling/disabling subtitles during casting. This behaviour was not in line with the same event during local playback.- Subtitles not disabling when passing
null
toPlayer.setSubtitle
during casting.
3.11.0
Released: 2021-12-07
Added
SourceEvent.DrmDataParsed
to be emitted from the correspondingSource
Player.playbackTimeOffsetToRelativeTime
to convert absolute live timestamps to relative timestampsPlayer.playbackTimeOffsetToAbsoluteTime
to convert relative live timestamps to absolute timestamps
Fixed
Player.playbackVideoData
returningnull
after a period switch to a DASH period containing different qualities than the previous onePlayerEvent.VideoPlaybackQualityChanged
being emitted withnull
as the new quality after a period switch to a DASH period containing different qualities than the previous one- Setting
Player.volume
and callingPlayer.mute
orPlayer.unmute
not working when there is no source loaded - Setting
Player.volume
and callingPlayer.mute
orPlayer.unmute
not 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
OfflineOptionEntry
s for download - Invalid tracks being listed as
OfflineOptionEntry
s 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.CastStarted
orPlayerEvent.CastStopped
is emitted
3.10.0
Released: 2021-11-23
Added
SourceEvent.MetadataParsed
to be emitted for in-band metadata from theSource
the metadata actually belongs to. With this addition all metadata formats are emitted correctly through the respectiveSource
Fixed
Player.currentTime
not returning an epoch timestamp for DASH live streams with periods declaring astart
timePlayer.currentTime
returning the seek target timestamp while seekingPlayer.currentTime
returning the time shift target timestamp while time shiftingPlayerEvent.Seeked
being emitted before enough data is loaded to continue playbackPlayerEvent.TimeShifted
being emitted before enough data is loaded to continue playback- Incorrect
Metadata.startTime
for in-band metadata in the first Period of a DASH live streams - Incorrect
Metadata.startTime
for 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.TimeShift
not containing absolute timestamps when time shifting in a DASH live sourcePlayerEvent.TimeShift
not containing relative timestamps when time shifting in an HLS live source
Changed
PlayerEvent.Seeked
is 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.seek
PlayerEvent.TimeShifted
is 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.timeshift
PlayerEvent.StallStarted
andPlayerEvent.StallEnded
are not emitted during seek or time shift operations anymore- The new event sequence when triggering replay by calling
Player.play
when the player has finished playback isPlayerEvent.Play
,PlayerEvent.PlaylistTransition
,PlayerEvent.Playing
instead ofPlayerEvent.PlaylistTransition
,PlayerEvent.Play
,PlayerEvent.Playing
Known Issues
- Incorrect
Metadata.startTime
for 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.DownloadFinished
to 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.General
instead 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.createWithNotificationChannel
overload that takes aCustomActionReceiver
Source.getThumbnail
to expose thumbnails for inactive sources in a playerAdItem.preloadOffset
to 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.duration
returning0.0
instead of-1.0
if it is unknown during castingPlayer
crashing if it gets detached from thePlayerView
while 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
0
seconds (instead of10
). With introducing thepreloadOffset
on theAdItem
this 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
ResourceIdentifierCallback
parameter 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
@endNumber
attribute in DASH manifests
Fixed
- Additional
PlayerEvent.Playing
being emitted when player resumes playback after stall and it was playing before the stall PlayerEvent.Paused
being emitted when pausing a fresh playback session wherePlayer.play
was never called beforePlayer.isPaused
returning true for a fresh playback session wherePlayer.play
was never called before pausingPlayerEvent.CastPlaybackFinished
being emitted immediately after connecting to a cast-compatible device, even though playback is not finishedPlayerEvent.CastPlaying
being emitted immediately after connecting to a cast-compatible device, even though content is not playingPlayerEvent.CastPaused
being emitted immediately after connecting to a cast-compatible device, even though content was not explicitly pausedPlayerEvent.Paused
being emitted when connecting to a cast-compatible device when content was already playing on the local device before- Additional
PlayerEvent.Play
andPlayerEvent.Playing
being 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.audioCodecPriority
andSourceConfig.videoCodecPriority
not being respected when loading a single source into the playerDownloadFinished.lastRedirectionLocation
beingnull
when a redirect happened
Changed
PlayerEvent.Play
,PlayerEvent.Playing
,PlayerEvent.Paused
andPlayerEvent.PlaybackFinished
are now also emitted while connected to a cast-compatible device
Deprecated
PlayerEvent.CastPaused
,PlayerEvent.CastPlaying
,PlayerEvent.CastPlaybackFinished
.PlayerEvent.Paused
,PlayerEvent.Playing
andPlayerEvent.PlaybackFinished
can be used instead
Removed
TweaksConfig.shouldEmitAllPendingMetadataOnStreamEnd
as 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.audioFilter
andPlaybackConfig.videoFilter
that can be set to a newMediaFilter
to specify how strictly potentially unsupported media tracks and qualities are filtered out of a playback sessionTweaksConfig.devicesThatRequireSurfaceWorkaround
to workaround a potential problem with some device'sSurface
implementationCue.verticalType
to 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.availableAudioQualities
andPlayer.availableVideoQualities
.PlaybackConfig.audioFilter
andPlaybackConfig.videoFilter
can be set to a differentMediaFilter
to 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.MetadataParsed
andPlayerEvent.Metadata
events
Fixed
- Wrong text positioning when using the
SubtitleView
Player.destroy
leading to a deadlock if called while metadata is being decoded
3.4.0
Released: 2021-07-06
Added
SourceEvent.MetadataParsed
to be emitted for inactive sources in a playlist when DASHEventStream
metadata is parsed
Fixed
EventMessage.durationMs
returning a nonsensical value when the duration is unknown- Possible crash near end of stream with subtitles enabled
Changed
SourceEvent.MetadataParsed
for DASHEventStream
metadata is now emitted as soon as the manifest is parsed instead of near the start time of the metadataEventMessage.durationMs
is now nullable and is null if the duration of the metadata event is unknown
3.3.0
Released: 2021-06-22
Added
SourceEvent.MetadataParsed
to be emitted for inactive sources in a playlist when SCTE metadata is parsed for HLS content
Fixed
- Potentially wrong
timeshift
values after loading a source into a player that has played a live source before SourceEvent.Unloaded
not being emitted through thePlayer
when unloading the player- Video freezing when skipping an ad
- Duplicate
PlayerEvent.PlaybackFinished
being emitted when loading, unloading or pausing the player after playback has finished BufferApi.getLevel
returning the wrong buffer level when the next source in a playlist starts to load
3.2.0
Released: 2021-06-08
Added
TweaksConfiguration.useDrmSessionForClearSources
that 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
Surface
to 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.startupThreshold
to configure the minimum amount of seconds of playback data to buffer before starting playback for the first timeBufferConfig.restartThreshold
to configure the minimum amount of seconds of playback data to buffer before starting playback again after a stall
Fixed
- Potential
RemoteServiceException
when setting anOfflineConfig
- UI not reflecting correct video qualities and playback speed when attaching the
Player
to thePlayerView
after loading a source
3.0.1
Released: 2021-05-11
Fixed
- Potential crash when starting playback during a cast session
PlayerEvent.Inactive
not 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
api
package 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
,Source
andPlayerView
. It now requires less boilerplate to subscribe/unsubscribe to events and works with either lambdas orEventListener
implementations, offering intuitive usage from Kotlin and Java Player
, which replaces theBitmovinPlayer
as the main player type. APlayer
instance can be created viaPlayer.create
Source
, which represents the new main type that is loaded into aPlayer
. It emits its own events and is configured via theSourceConfig
. ASource
instance can be created viaSource.create
PlaylistConfig
, which allows the configuration of a playlist consisting of multipleSource
s. 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.playlist
to manage the player's playlist and transition between sourcesPlayer.source
, which returns the currently activeSource
Player.load(Source)
to enable loading of the newSource
typeSourceConfig.url
, which returns the url of theSourceConfig
SourceConfig(url: String, type: SourceType)
constructor to create aSourceConfig
of 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. aSource
orPlaylistConfig
is loaded into the player)PlayerEvent.Inactive
, which is emitted when the player is unloaded
Changed
- Renamed Maven
artifactId
fromplayercore
toplayer
. The full dependency is nowcom.bitmovin.player:player:<version>
- Moved all public API to new
com.bitmovin.player.api
package, 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.
VR
toVr
,API
toApi
) - Replaced
BitmovinPlayerEvent
withEvent
and two subtypes:PlayerEvent
andSourceEvent
- All events are now split up between
PlayerEvent
andSourceEvent
(e.g.ReadyEvent
is nowPlayerEvent.Ready
,SourceLoadedEvent
is nowSourceEvent.Loaded
) - Error codes were reworked and split up into
PlayerErrorCode
andSourceErrorCode
enums - Warning codes were reworked and split up into
PlayerWarningCode
andSourceWarningCode
enums EventListener
now has aonEvent
function to make it generic and usable for all events instead of requiring a different interface for each eventSourceEvent.Load.sourceConfig
of typeSourceConfig
toSourceEvent.Load.source
of typeSource
SourceEvent.Loaded.sourceConfig
of typeSourceConfig
toSourceEvent.Loaded.source
of typeSource
PlayerEvent.Seek
now hasfrom
andto
properties of typeSeekPosition
- Default Bitmovin Web UI version to 3.23.0
- CAF is now used as the default cast receiver
- Renamed
SourceItem
toSourceConfig
- Renamed all configuration objects to use the
Config
suffix instead of theConfiguration
suffix - 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
BitmovinPlayerView
toPlayerView
- Renamed
BitmovinSubtitleView
toSubtitleView
- Renamed
BitmovinPlayerNotificationManager
toPlayerNotificationManager
SourceConfig
to only handle a singleProgressiveSource
SourceConfig
to only handle a singleDrmConfig
SourceConfig.setPersistentPoster
tosourceConfig.setPosterPersistent
- Renamed
MediaSourceType
toSourceType
- Deprecated constructor
SourceConfig(url: String)
in favour ofSourceConfig.fromUrl(url: String)
- Changed all
Array
return types in thePlayer
to returnList
instead - Improved nullability information on
PlayerConfig
,VrConfig
andLowLatencyConfig
- Renamed
FullscreenHandler.isFullScreen
toFullscreenHandler.isFullscreen
for consistency SourceConfig.posterSource
is now of typeString?
instead ofURLResource
- Changed return type of
AdvertisingConfig.schedule
fromArray
toList
- Changed return types of
PlaybackConfig.videoCodecPriority
andPlaybackConfig.audioCodecPriority
fromArray
toList
- Renamed
AdaptationConfig.isAllowRebuffering
toAdaptationConfig.isRebufferingAllowed
Track.id
is not nullable anymore
Deprecated
MediaSource
,AdaptiveSource
,HlsSource
,SmoothSource
,ProgressiveSource
andDashSource
.SourceConfig
should 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.addSubtitleTrack
functions that do not take aSubtitleTrack
directly. These deprecated functions will be removed in an upcoming minor versionSourceConfig.setThumbnailTrack
function that does not take aThumbnailTrack
directly. 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 newEventEmitter
to see how to subscribe to events of thePlayer
/Source
/PlayerView
- All
*Listener
classes, as the newEventEmitter
works with lambdas or genericEventListener
implementations Player.setup
. In order to re-configure player behaviour, a new player must be createdConfigurationUpdatedEvent
Player.load(SourceConfiguration)
. UsePlayer.load(Source)
orPlayer.load(SourceConfig)
insteadflags
parameter fromOfflineContentManager.getOfflineContentManager()
andBitmovinDownloadService()
- Empty
Config
interface that some configs implemented CastConfig
. UseRemoteControlConfig
insteadPlaybackConfig.getAutoplayEnabled
. UseisAutoplayEnabled
insteadPlaybackConfig.getMuted
. UseisMuted
insteadPlaybackConfig.getTimeShiftEnabled
. UseisTimeShiftEnabled
insteadAdBreakConfig.skippable
. UseskippableAfter
insteadLinearAd.skippable
. UseskippableAfter
instead- Deprecated
BitmovinCastManager.initialize
functions Track.getDefault
. UseisDefault
insteadThumbnailTrack
constructor which allows setting theurl
,label
,id
andisDefault
. UseThumbnailTrack(url)
insteadStyleConfig.getUiEnabled
. UseisUiEnabled
insteadgetShowErrors
,isShowErrors
andsetShowErrors
from theStyleConfig
- Deprecated methods from
SourceConfig
- Deprecated
PlayerAPI
functions. The removed functionality can be found on their individual namepsaces (e.g.Player.buffer
,Player.lowLatency
,Player.vr
) PlayerConfig.fromJSON
PlayerAPI
and moved definitions to thePlayer
interface- Generic type parameter from
UserInterfaceApi
DrmSystems
enum. UseWidevineConfig
andClearKeyConfig
directlyPlayerView
constructor that takes aPlayerConfig
. UsePlayerView(Context, Player?)
to provide a custom player insteadGoogleCastReceiverVersion
and all usagesPlayerFragment
JsonConverter
Updated about 9 hours ago