[object Object] Icon

Learn how to create, start, manage and modify Encodings

[object Object] Icon

Learn how to create, start, manage and modify Players

[object Object] Icon

Learn how to create, start, manage and modify Analyticss

Docs Home
User shortcuts for search
Focus by pressing f
Hide results by pressing Esc
Navigate via   keys

Player Android / AndroidTV Release 3.0.0




V3 of the Android Player SDK marks a new direction where the player itself and the sources it plays back become more decoupled. Check out the V2 -> V3 Migration Guide for a detailed description and migration steps.


  • 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 the Player, Source and PlayerView. It now requires less boilerplate to subscribe/unsubscribe to events and works with either lambdas or EventListener implementations, offering intuitive usage from Kotlin and Java
  • Player, which replaces the BitmovinPlayer as the main player type. A Player instance can be created via Player.create
  • Source, which represents the new main type that is loaded into a Player. It emits its own events and is configured via the SourceConfig. A Source instance can be created via Source.create
  • PlaylistConfig, which allows the configuration of a playlist consisting of multiple Sources. 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 playback
  • Player.playlist to manage the player's playlist and transition between sources
  • Player.source, which returns the currently active Source
  • Player.load(Source) to enable loading of the new Source type
  • SourceConfig.url, which returns the url of the SourceConfig
  • SourceConfig(url: String, type: SourceType) constructor to create a SourceConfig of a specific type
  • PlayerEvent.PlaylistTransition, which is emitted when the player transitions between two sources in a playlist
  • SourceEvent.DurationChanged, which is emitted when a source transitions from live to VoD
  • PlayerEvent.Active, which is emitted when a playback session starts (i.e. a Source or PlaylistConfig is loaded into the player)
  • PlayerEvent.Inactive, which is emitted when the player is unloaded


  • Renamed Maven artifactId from playercore to player. The full dependency is now com.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 to Vr, API to Api)
  • Replaced BitmovinPlayerEvent with Event and two subtypes: PlayerEvent and SourceEvent
  • All events are now split up between PlayerEvent and SourceEvent (e.g. ReadyEvent is now PlayerEvent.Ready, SourceLoadedEvent is now SourceEvent.Loaded)
  • Error codes were reworked and split up into PlayerErrorCode and SourceErrorCode enums
  • Warning codes were reworked and split up into PlayerWarningCode and SourceWarningCode enums
  • EventListener now has a onEvent function to make it generic and usable for all events instead of requiring a different interface for each event
  • SourceEvent.Load.sourceConfig of type SourceConfig to SourceEvent.Load.source of type Source
  • SourceEvent.Loaded.sourceConfig of type SourceConfig to SourceEvent.Loaded.source of type Source
  • PlayerEvent.Seek now has from and to properties of type SeekPosition
  • Default Bitmovin Web UI version to 3.25.0
  • CAF is now used as the default cast receiver
  • Renamed SourceItem to SourceConfig
  • Renamed all configuration objects to use the Config suffix instead of the Configuration 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 to PlayerView
  • Renamed BitmovinSubtitleView to SubtitleView
  • Renamed BitmovinPlayerNotificationManager to PlayerNotificationManager
  • SourceConfig to only handle a single ProgressiveSource
  • SourceConfig to only handle a single DrmConfig
  • SourceConfig.setPersistentPoster to sourceConfig.setPosterPersistent
  • Renamed MediaSourceType to SourceType
  • Deprecated constructor SourceConfig(url: String) in favour of SourceConfig.fromUrl(url: String)
  • Changed all Array return types in the Player to return List instead
  • Improved nullability information on PlayerConfig, VrConfig and LowLatencyConfig
  • Renamed FullscreenHandler.isFullScreen to FullscreenHandler.isFullscreen for consistency
  • SourceConfig.posterSource is now of type String? instead of URLResource
  • Changed return type of AdvertisingConfig.schedule from Array to List
  • Changed return types of PlaybackConfig.videoCodecPriority and PlaybackConfig.audioCodecPriority from Array to List
  • Renamed AdaptationConfig.isAllowRebuffering to AdaptationConfig.isRebufferingAllowed
  • Track.id is not nullable anymore


  • Support for Bitmovin Web UI v2. Use Bitmovin Web UI v3 instead
  • Support for non-CAF Cast Receivers
  • EventHandler. Refer to the new EventEmitter to see how to subscribe to events of the Player/Source/PlayerView
  • All *Listener classes, as the new EventEmitter works with lambdas or generic EventListener implementations
  • Player.setup. In order to re-configure player behaviour, a new player must be created
  • ConfigurationUpdatedEvent
  • Player.load(SourceConfiguration). Use Player.load(Source) or Player.load(SourceConfig) instead
  • flags parameter from OfflineContentManager.getOfflineContentManager() and BitmovinDownloadService()
  • Empty Config interface that some configs implemented
  • CastConfig. Use RemoteControlConfig instead
  • PlaybackConfig.getAutoplayEnabled. Use isAutoplayEnabled instead
  • PlaybackConfig.getMuted. Use isMuted instead
  • PlaybackConfig.getTimeShiftEnabled. Use isTimeShiftEnabled instead
  • AdBreakConfig.skippable. Use skippableAfter instead
  • LinearAd.skippable. Use skippableAfter instead
  • Deprecated BitmovinCastManager.initialize functions
  • Track.getDefault. Use isDefault instead
  • ThumbnailTrack constructor which allows setting the url, label, id and isDefault. Use ThumbnailTrack(url) instead
  • StyleConfig.getUiEnabled. Use isUiEnabled instead
  • getShowErrors, isShowErrors and setShowErrors from the StyleConfig
  • 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 the Player interface
  • Generic type parameter from UserInterfaceApi
  • DrmSystems enum. Use WidevineConfig and ClearKeyConfig directly
  • PlayerView constructor that takes a PlayerConfig. Use PlayerView(Context, Player?) to provide a custom player instead
  • GoogleCastReceiverVersion and all usages
  • PlayerFragment
  • JsonConverter


  • MediaSource, AdaptiveSource, HlsSource, SmoothSource, ProgressiveSource and DashSource. SourceConfig should instead be constructed using an url and a SourceType. 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 version
  • SourceConfig.addSubtitleTrack functions that do not take a SubtitleTrack directly. These deprecated functions will be removed in an upcoming minor version
  • SourceConfig.setThumbnailTrack function that does not take a ThumbnailTrack directly. This deprecated function will be removed in an upcoming minor version

Give us feedback