[object Object] Icon

Encoding
Learn how to create, start, manage and modify Encodings

[object Object] Icon

Player
Learn how to create, start, manage and modify Players

[object Object] Icon

Analytics
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 Releases

Latest Releases

Date

Version

Stable

7/20/2021

3.5.0

Added

  • Support for EXT-X-DATERANGE metadata tags in HLS playlists, which are surfaced via SourceEvent.MetadataParsed and PlayerEvent.Metadata events

Fixed

  • Wrong text positioning when using the SubtitleView
  • Possible crash near end of stream with subtitles enabled
  • Player.destroy leading to a deadlock if called while metadata is being decoded

Stable

7/6/2021

3.4.0

Added

  • SourceEvent.MetadataParsed to be emitted for inactive sources in a playlist when DASH EventStream metadata is parsed

Changed

  • SourceEvent.MetadataParsed for DASH EventStream metadata is now emitted as soon as the manifest is parsed instead of near the start time of the metadata
  • EventMessage.durationMs is now nullable and is null if the duration of the metadata event is unknown

Fixed

  • EventMessage.durationMs returning a nonsensical value when the duration is unknown

Stable

6/22/2021

3.3.0

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 the Player 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

Stable

6/8/2021

3.2.0

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

Stable

5/26/2021

3.1.0

Added

  • BufferConfig.startupThreshold to configure the minimum amount of seconds of playback data to buffer before starting playback for the first time
  • BufferConfig.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 an OfflineConfig
  • UI not reflecting correct video qualities and playback speed when attaching the Player to the PlayerView after loading a source

Stable

5/11/2021

3.0.1

Fixed

  • PlayerEvent.Inactive not being emitted for the previous playback session when loading new sources into an already active player
  • Potential crash when starting playback during a cast session
  • Potential exception when casting to a remote device is stopped while it is actively playing
  • Potential selection of wrong tracks when downloading HLS content
  • Progressive content not being downloaded for offline playback
  • 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

Stable

4/27/2021

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.

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 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

Changed

  • 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

Removed

  • 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

Deprecated

  • 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

Stable

7/29/2021

2.69.1

Fixed

  • Possible crash near end of stream with subtitles enabled

Stable

7/20/2021

2.69.0

Changed

  • MetadataParsedEvent for DASH EventStream metadata is now emitted as soon as the manifest is parsed instead of near the start time of the metadata
  • EventMessage.durationMs is now nullable and is null if the duration of the metadata event is unknown

Fixed

  • Possible crash near end of stream with subtitles enabled
  • Wrong text positioning when using the BitmovinSubtitleView
  • EventMessage.durationMs returning nonsensical value when the duration is unknown

Known Issues

  • Possible crash near end of stream with subtitles enabled is not fixed, despite the changelog stating so

Stable

6/22/2021

2.68.1

Fixed

  • Duplicate PlaybackFinishedEvent being emitted when loading, unloading or pausing the player after playback has finished
  • Potentially wrong timeshift values after loading a source into a player that has played a live source before

Latest Releases

Give us feedback