Player Android / AndroidTV Releases
Latest Releases
Stable
3.18.0
5/10/2022
Stable
5/10/2022
3.18.0
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
Stable
4/26/2022
3.17.0
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
Stable
4/12/2022
3.16.0
Added
Source.setVideoQuality
, which allows setting a fixed video quality for the sourceSource.selectedVideoQuality
, which provides the currently selected video quality of the source
Changed
- Download Service stops itself when all downloads are suspended
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
Stable
3/16/2022
3.15.0
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 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
Stable
3/16/2022
3.14.1
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.
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
AudioTrack
selection is reset to default when selecting aSubtitleTrack
and vice versa
Stable
3/16/2022
3.13.3
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
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
Fixed
Player.seek
orPlayer.timeshift
being ignored when called insidePlayerEvent.Ready
listenerPlayerEvent.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
Deprecated
AdaptationConfig.startupBitrate
as it does not do what the name suggests. UseAdaptationConfig.initialBandwidthEstimateOverride
instead
Stable
1/18/2022
3.12.0
Added
- Support for different audio and video codec priorities via
SourceConfig.audioCodecPriority
andSourceConfig.videoCodecPriority
when multiple sources are part of a playback session
Changed
- Default Bitmovin Web UI version to 3.32.0
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
Stable
12/21/2021
3.11.1
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
Known Issues
- The playhead on the seekbar can jump back and forth while seeking when using the Bitmovin Player Web UI
Stable
12/7/2021
3.11.0
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
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
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
Known Issues
- The playhead on the seekbar can jump back and forth while seeking when using the Bitmovin Player Web UI
Stable
11/23/2021
3.10.0
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
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
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 catch-up 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- Last frame of an ad staying visible once ad playback has finished
Known Issues
- The playhead on the seekbar can jump back and forth while seeking when using the Bitmovin Player Web UI
- Incorrect
Metadata.startTime
for in-band metadata in periods that are not at the first position in DASH live streams