Join the mailing list and receive release announcements for the Native SDKs:
- Sign up to the Brightcove Native Player SDKs mailing list
- The posts in the channel are for historical purposes. Signing up will add you to the email list for SDK releases.
Current release
Version 8.2.2
25 August 2023
ExoPlayer 2.17.1
SSAI Plugin Changes:
- Fixes an issue where midroll ads would replay after seeking backwards through content
Previous releases
Version 8.2.1
15 August 2023
ExoPlayer 2.17.1
SDK Changes:
- Improvements and minor bug fixes to Ad Insights.
- Fix playback issues for Dolby Atmos media on unsupported devices. Also emit an error event when a video with only Atmos-capable audio is attempted to load on a device without Atmos decoder support.
- Fixes an issue where captions languages could be emitted with an empty language list for SSAI videos.
ExoPlayer Changes
- Fixes an issue where destroying the player on garbage-collecting the playback Object could result in a crash on TV platforms.
Version 8.2.0
21 July 2023
ExoPlayer 2.17.1
SDK Changes:
- Improvements to handling captions; fix formatted offline caption playback.
- Use the language label set in Brightcove Video Cloud when showing the dialog for available captions.
- Fix a NullPointerException when playback is using Generic Stream Concurrency and the device goes offline.
- Adds support for Brightcove Ad Insights analytics
- Changes the datatype of the Video.Fields.ODRM_PLAYBACK_ALLOWED Video property to return a Boolean. To access this property, please cast it to Boolean.
- Fixes an issue where the COMPLETED event could be emitted on clearing a video from a playlist without completing playback.
- Fixes an issue where CuePoints were not being configured for offline videos due to a ClassCastException.
- Fixes an issue where Poster Images were not being configured for offline videos due to a ClassCastException.
- Adds support for Custom Fields in the OfflineVideo properties map
- Adds support for Tags in the OfflineVideo properties map
- Change the data type of the Analytics
rebuffering_seconds
parameter from an integer to a float - With the
rebuffering_seconds
value changed to a float, the Analyticsrebuffering_count
will be incremented forrebuffering_seconds
values of less than one second - Fixes an issue where rebuffering at player startup time was reported to Analytics as a player stall
- Fixes an issue where a player would continue playing automatically after being paused when in a stalled state
- Adds support for tags in the Video object
- Adds support for SpringServe macros to the IMA Plugin for the Brightcove Native SDK for Android
- Adds Open Measurement (OM) SDK support to the SSAI Plugin for Brightcove Native SDK for Android
- Fixes post-roll analytic events when the VMAP duration is greater than the video's actual duration
- Fixes an issue where transitions between videos in playlists could stretch the video display outside of the original bounds of the player display.
- Fixes an issue where transitioning to Player-In-Player (PiP) mode while the video was playing would load the PiP player in paused mode.
- Fixes an issue that would cause the
ShutterViewController
to hide between video loading and ad playback. - Fixes an issue that would prevent the
ShutterViewController
from hiding on detection of an ad error. - Fixes an issue in
ExoMediaPlayback
where transitions between videos in playlists could prevent pre-roll ads from playing on subsequent videos. - Adds support for setting custom read and connect timeouts in the
SSAIComponent
andSSAIVideoProcessor
. - With this version of the Brightcove Native SDK for Android,foreground and background playback of audio-only content is supported.
- The
MediaPlayback
interface abstracts playback from theVideoView
to support continuous playback of audio-only media. TheMediaPlayback
communicates playback state to the notification and theVideoView
. - Support for an ongoing foreground service for continuous playback.
- Improves loading playlists and pre-buffering media for a smoother end-user experience.
- Added a media-style notification with customizable playback controls from the notification shade and lockscreen. This
BrightcoveNotification
class connects playback with a foreground service. - Adds support for the Brightcove Cast Receiver emeHeaders
CustomData
object. - Fixes an issue where for some playback analytics metrics requests, a
video_duration
request parameter would not be included. - Fixes an issue with support for Live HLSe with License Keys Protection.
- Added support for Dolby Atmos audio. Since not all Android devices support playback with this format, it is recommended that content be transcoded to produce stereo as well as Dolby Atmos audio variants. For details, see the Dolby Atmos Audio document.
- Added support for Dub and Description DASH role values.
- Fixes a performance issue that could occur when loading larger size closed captions.
- Adds setter and getter methods for the
allowChunklessPreparation
property ExoPlayer'sHLSMediaSource.Factory
. With Exoplayer 2.17.0, the default value of this property was changed fromfalse
totrue
, which had the unintended side effect of turning off display of 608/708 captions if they were present in HLS content. If your HLS content includes 608/708 captions, use theExoPlayerVideoDisplayComponent
'ssetAllowHlsChunklessPreparation(false)
to disable HLS chunkless preparation in ExoPlayer'sHLSMediaSource.Factory
, which will restore display of 608/708 captions. - Adds support for an encryption Source property with HLSe Live streams.
- Improves response handling for Generic Stream Concurrency connections.
- Fixes an issue where a null or missing duration returned for a remote
live video created in the VideoCloud Studio, would result in a
VideoParserException
. - Adds a Generic Stream Concurrency (GSC) EventType,
GSC_HEARTBEAT_STOPPED
. - Provides setter and getter methods in
ExoPlayerVideoDisplayComponent
for theDefaultRenderersFactory
. - In the
TrackSelectorHelper
class,applySelectionOverride(int, SelectionOverrideCreator)
is deprecated. Please useapplyTrackSelectionOverrides(int, TrackSelectionOverrideCreator)
instead. - Fixes the callbacks to retrieve metadata of the media during playback.
- This release of the Brightcove Native SDK for Android is the final release to use the Brightcove IAB Android Library as an external dependency. Future SDK releases will include the IAB Android Library as an integration in the SSAI plugin.
- Fixes a parsing issue with
BrightcoveDebug
elements that have self-closing tags. - With this release, Live DRM with SSAI is supported.
- With this release of the Brightcove Native SDK for Android, MediaPlayer is no longer supported for content playback.
- The Brightcove Native SDK for Android is now compatible with Android 12.
- The Brightcove Native SDK for Android now supports playback of Low-Latency HLS live streams.
- This version of ExoPlayer requires Java 11 and Gradle 7.4.
- The
DrmSession <T extends ExoMediaCrypto></T>
interface no longer requires a parameter. -
The
ExoPlayerDrmSessionManager <T extends ExoMediaCrypto></T>
interface no longer requires a parameter. - In the
TrackSelectorHelper
class, the methodupdateTracksSelectionArray(@Nullable TrackSelectionArray trackSelections)
is deprecated and replaced withupdateTracksGroupInfos(@Nullable ImmutableList <TracksInfo.TrackGroupInfo> trackGroupInfos)
. - In the
MediaSourceUtil
class, the methodfindRenditionUrl(@NonNull HlsMasterPlaylist hlsMasterPlaylist, int trackType, @NonNull Format format)
is deprecated and is replaced withfindRenditionUrl(@NonNull HlsMultivariantPlaylist hlsMasterPlaylist, int trackType, @NonNull Format format)
. - In the
ExoAdPlayer
class, the constructor requires a StyledPlayerView instead of a PlayerView. - The
DashAudioTrackSelector
class is now deprecated and replaced withExoPlayerVideoDisplayComponent*.setPeakBitrate(int)*
. - The
DashPeakBitRateTrackSelector
class is now deprecated and replaced withExoPlayerVideoDisplayComponent*.setPeakBitrate(int)*
. - The
HLSPeakBitrateTrackSelector
class is now deprecated and replaced withExoPlayerVideoDisplayComponent*.setPeakBitrate(int)*.
- ExoPlayer Cast Extension support updated to 2.17.1
- In the
GoogleCastComponent
class, the methodsloadItems(MediaQueueItem, int)
andaddItems(MediaQueueItem)
now returnvoid
instead ofPendingResult
RemoteMediaClient.MediaChannelResult>
. - The Google IMA SDK dependency has been upgraded to 3.27.0. This upgrade includes support for Android 12.
- Pulse SDK support updated to 2.5.20.3.0
- The
SSAIComponent
now supports use of the Brightcove VideoCloud VMAP XML object itself as a source. To use a VideoCloud VMAP XML object as a source, callprocessVideo(String vmapXmlString)
in theSSAIComponent
class. - Fixes a threading issue in the
Catalog
class, which resulted in a requirement in SDK version 6.18.5 that theCatalog
must be defined and instantiated only from the Player's main thread. From version 6.18.6 onwards, theCatalog
must still be defined within thePlayer Activity
class, but instantiation can be called from other threads. Please refer to the Brightcove Android SDK Sample Apps for examples in defining and instantiating theCatalog
. - Updates the GSON dependency version from 2.8.5 to 2.8.9 in response to a CVE report (CVE-2022-25647) about a possible vulnerability in some classes, none of which are used by the Brightcove SDK.
- Fixes an issue where a seeking in a paused player would cause the seekbar's scrubber to fail to update its progress when playback was resumed.
- Fixes an issue with Short Manifest TTLs where the Multi-Session DRM
setting was not re-applied when the video was refreshed after its manifest
timestamp
expired. - Adds support for Short Manifest TTLs.
- IMPORTANT: Using this SDK version requires the Catalog
and
HttpRequestConfig
objects to be instantiated on the player's main thread (in itsonCreate
method). Note that these objects can be defined either globally (which is preferred) or in theonCreate
method. Please refer to the BasicSsaiSampleApp for an example of a locally defined and instantiated objects, and the VideoViewListSampleApp for an example of globally defined and locally instantiated objects. Please also note that this is a requirement independent of the use of the Short Manifest TTLs feature. - Adds support for Short Manifest TTLs.
- Fixes an issue where a crash could occur if an account not configured for Generic Stream Concurrency (GSC) were to attempt to play content in a player that is configured for GSC.
- Improves GSC error handling in cases where invalid or expired tokens might be used in attempting to play content.
- Fixes an Accessibility issue where when the seekbar has focus, the video
progress percentage is constantly read by the
TalkBack
system. - Fixes an Accessibility issue where double-tapping the video view would focus on the seekbar, and cause an unexpected seek into the video.
ExoPlayerVideoDisplayComponent
now provides a getter method that returns the current instance of theWidevineMediaDrmCallback
, or an empty instance if it needs to be created.- Fixes an issue where Playlists with a mix of Video Cloud and remote videos would cause a thumbnail from the last-played Video Cloud video to be displayed when selecting a remote video.
- Fixed an issue where
video_engagement
Analytics events for remote VOD videos could have avideo_seconds_viewed
parameter instead of the expected range parameter. - Fixed player button click listeners when using custom drawables.
- Fixed an issue where a call to
NumberUtil.safeLongToInt
might crash when its input is too large. Now, when the input can not be safely converted, the method returnsInteger.MIN_VALUE
with an explanatory message. - Fixed an issue where with mixed playlists with DRM and Clear content, playback failed if a Clear video is loaded after playing a DRM video.
- Added support for setting the
multiSession
property (required for key rotation) when creating theDefaultDrmSessionManager
in ExoPlayer. - Added a check to address a crash that could occur if the ExoPlayer
instance becomes null and
getCurrentManifest()
is called in theExoPlayerVideoDisplayComponent
. - IMPORTANT: Support for integer data types in player,
content and event properties is deprecated in the following areas of
content and ad playback:
- Playhead position, for VOD and Live playback
Video duration
- With this release, the SSAI plugin has been refactored to better support playback and seeking use cases.
Fixes an issue where seeking in a paused player over ads could load the wrong player controls.
For a complete description of the behavioral and API-level changes to this
plugin, see the SSAI
Plugin Changes with Android SDK v6.18.0 support document.
- Fixes a Generic Stream Concurrency (GSC) issue where the second heartbeat request would follow the first request 30 seconds later, instead of the account-configured frequency.
- Improvements to GSC heartbeat request functionality during Player Activity, Player Fragment and Picture-In-Picture lifecycle events, as well as retries on heartbeat request failures.
- This version adds support for Generic Stream Concurrency (GSC). Please refer to the Brightcove Support Pages for more information.
-
Limitations
- Chromecast is not supported in this version. Support for Chromecast will be included in a future release of the SDK.
-
Known Issues
- When sending requests to the GSC heartbeat service, the second request will follow the first request 30 seconds later, instead of at the frequency set for the account. This issue only occurs on the second heartbeat request, does not affect playback, and will be addressed in a future release of the SDK.
- Fixed an issue with overly verbose logging from the
ExoPlayerVideoDisplayComponent
- The Brightcove Native SDK for Android now supports Android 11
-
The Brightcove Native SDK for Android now supports ExoPlayer 2.14.2. Please note the following changes:
-
In the
ExoPlayerVideoDisplayComponent
class thegetBrightcoveDrmSession() : BrightcoveDrmSession
method has been deprecated. Instead please useExoPlayerDrmSessionManager
. SeeExoPlayerVideoDisplayComponent:getExoPlayerDrmSessionManager(): ExoPlayerDrmSessionManage
-
In the
ExoPlayerVideoDisplayComponent
class, in theInfoListener
subclass, the methodonDecoderInitialized(AnalyticsListener.EventTime eventTime, int trackType, String decoderName,long initializationDurationMs)
has been deprecated. Instead, please useonAudioDecoderInitialized(AnalyticsListener.EventTime eventTime, String decoderName, long initializationDurationMs) : void
and/oronVideoDecoderInitialized(AnalyticsListener.EventTime eventTime, String decoderName, long initializationDurationMs) : void
-
The constructor for the
ExoPlayerDrmSessionManager
class has been deprecated. Instead, use theExoPlayerDrmSessionManager.Builder
-
The constructor for the
OfflineLicenseManager
class has been deprecated. TheOfflineLicenseManager
now uses the Builder pattern. SeeOfflineLicenseManager.Builder
-
In the class
BrightcoveSegmentTemplate
, the methodgetSegmentCount(long periodDurationUs)
has been deprecated. Instead, please usegetSegmentCountLong(long periodDurationUs)
- This ExoPlayer version requires that any instance of the ExoPlayer
must be created and accessed in the main thread, so any access to the
ExoPlayerVideoDisplayComponent.getExoPlayer
method or direct access to any ExoPlayer method must be on the main thread as well. Version 6.16.6
-
- Improves the
video_seconds_viewed
measurement invideo_engagement
events sent to the Brightcove Analytics back-end - Fixes an issue where a device could go to sleep during ad playback
- Improved support for 608/708 captions that have a language attribute
- Emit a
DID_SET_VIDEO_STILL_ERROR
event when a video's poster image can not be loaded - Emit an
AD_ERROR
error event if ad loading is interrupted, or if the ExoAdPlayer or its context are null - Fixed a problem where backgrounding or exiting the app could cause offline content to fail to play
- Fixed an issue where some image files would not download successfully
- Adds support for Forensic Watermarking. For details, see the Forensic Watermarking with Native SDKs document.
- Updated the
VideoUtils
class to add a utility method to remove the sidecar caption sources from the Video object - Fixed an issue where the
video_duration
URL parameter was not included in requests to Brightcove’s Analytics back-end for reporting - Added support for setting a URL to a custom player for the Cast receiver app. Please refer to the Android SDK Support Documentation for more information
-
Added support for sending selected caption and audio track information to a Cast receiver
-
Added support for setting properties in the
AbstractOfflineCatalog
class. Offline Catalog properties can be set in two ways:- As a
Map<String, String>
of key/value pairs using thesetProperties(Map<String, String>)
method - Through the
getProperties().put(key, value)
method
- As a
- Added support for creating custom
NotificationChannels
in theDownloadManager
class. Please refer to the Android SDK Support Documentation for more information - Fixed an issue where text tracks with the kind
subtitles
were not being parsed or displayed - Fixed an issue where text tracks that have the
position
attribute with the additionalline-left
orline-right
attribute were not being parsed or displayed - Fixed an issue where an incorrect index could be used to get the current selected audio language
- Fixed an issue where the heartbeat would continue after the player was destroyed
-
Added parsing support for nested VAST and VMAP Extension elements
-
Added parsing support for VAST
AdVerification
elements - Improved Video Engagement reporting for SSAI VOD videos.
- The
DashWidevineAuthorizer
class is deprecated. Please use theWidevineAuthorizer
class instead. - The Google IMA SDK has been updated to version 3.21.1.
- Improved support for skippable ads, and fixed an issue where skippable ads might not exit cleanly, and ad audio might be heard after resuming content playback.
- Fixed an issue with setting mime types for ads, where user-supplied mime types were not being set by the plugin's Builder.
-
Added plugin Builder convenience methods for:
- Setting ad mime types in the
AdsRenderingSettings
object - seeBuilder.setMimeTypes(List
) : void - Setting the ad video load timeout in the
AdsRenderingSettings
object - seeBuilder.setLoadVideoTimeout(int) : void
- Setting debug mode in the
ImaSdkSettings
object - seeBuilder.setDebugMode(boolean) : void
- Setting ad mime types in the
- Please note:
These convenience methods are member methods in the
AdsRenderingSettings
andImaSdkSettings
Google IMA SDK objects. When called through the Builder directly, these methods will configure theAdsRenderingSettings
andImaSdkSettings
objects that are created by default in the Builder.If you decide to create custom
AdsRenderingSettings
andImaSdkSettings
Google IMA SDK objects for use in the IMA plugin, you can call those objects' methods directly:AdsRenderingSettings.setMimeTypes(List
) : void AdsRenderingSettings.setLoadVideoTimeout(int) : void
ImaSdkSettings.setDebugMode(boolean) : void
- Added support for Live SSAI streams that are created as remote Video objects.
- The Cast plugin has been redesigned and now supports the Brightcove Cast Receiver v2.0.
-
Please refer to the Brightcove Android Native SDK documentation, and the Brightcove Android Native SDK sample apps, for more information and code samples.
-
The Brightcove Native SDK for Android now supports Arabic (RTL) language in player controls and UI labels.
-
Please note: While the Arabic language (RTL) text is supported, only left-to-right (LTR) player control layouts are currently supported.
-
Fixed an issue where certain
video_view
andvideo_engagement
Analytics event parameters could include non-Western Arabic numerals for the following parameters:video_view
:start_time_ms
load_time_ms
video_engagement
:range
video_seconds_viewed
- The Cast plugin now supports Arabic (RTL) text in cast controls and UI labels.
-
Please note that Arabic language support does not extend to the displays (video elapsed time and duration) in the Cast expanded controller.
-
Displaying these components is controlled by the Google Cast API.
-
The Offline Playback plugin now supports Arabic (RTL) text in UI labels.
- The Pulse plugin now supports Arabic (RTL) text in Ad controls and UI labels.
- The SSAI plugin now supports Arabic (RTL) text in Ad controls and UI labels.
-
Implemented additional null checking for caption URIs
-
Fixed a regression in the
ExoPlayerVideoDisplayComponent setPeakBitrate()
method where the specified bitrate would be ignored, and the highest bitrate selected instead. -
The Google IMA SDK has been updated to version 3.19.4. Some of the changes include:
-
SdkFactory.createAdDisplayContainer()
is deprecated -
AdDisplayContainer.setPlayer(VideoAdPlayer)
is deprecated -
AdDisplayContainer.setAdContainer(ViewGroup)
is deprecated -
AdsRequest.setAdDisplayContainer(AdDisplayContainer)
is removedFor the full list of changes, please refer to the Google IMA Android SDK release history.
-
-
The
GoogleIMAComponent
now uses a Builder for its construction. -
The IMA plugin automatically creates the
AdDisplayContainer
using theBrightcoveVideoView
by default.You may provide an
AdDisplayContainerFactory
to theGoogleIMAComponent.Builder
to provide your ownAdDisplayContainer
. -
The following methods were deprecated in the
GoogleIMAVideoAdPlayer
class:-
playAd(). Use playAd(AdMediaInfo)
instead -
loadAd(String). Use loadAd(AdMediaInfo, AdPodInfo)
instead -
stopAd(). Use stopAd(AdMediaInfo)
instead -
resumeAd(). Use playAd(AdMediaInfo)
instead -
pauseAd(). Use pauseAd(AdMediaInfo)
instead
-
-
Fixed an issue where the IMA plugin was not emitting the
AD_PAUSED/AD_RESUME
events when callingGoogleIMAVideoAdPlayer.pauseAd
andGoogleIMAVideoAdPlayer.resumeAd
, respectively.For more information, please visit the Brightcove Android SDK Overview in the Brightcove Support site.
- The deprecated VMAP plugin has been removed from the Brightcove Native SDK for Android. For VMAP ad delivery, please continue to use the IMA plugin.
- The deprecated OnceUx plugin has been removed from the Brightcove Native SDK for Android. Please use the SSAI plugin instead.
-
Fixes an issue where the
CustomClick
element would fail to parse. -
Fixes an issue in parsing the VAST Extension element.
-
Improved integration with Android TalkBack (and Samsung Voice Assistant).
-
The
VideoParser
will now ignore any DRM source that does not contain Widevine key systems. -
Fixed an issue where the
VideoParser
would fail to parse a Thumbnail VTT Source that does not contain the bandwidth property. -
Fixed an issue on Android TV platforms where the Player Options button would fail to display after Server-Side Ad Insertion ad breaks completed.
-
ExoPlayer is now used for Ad playback instead of MediaPlayer.
-
Improved rendering of ruby text in sidecar closed captions. A similar improvement for in-manifest captions is forthcoming.
-
Fixed a problem where the the activity was not released as expected when the Chromecast plugin is used.
-
Added support for Audience Segment (Ad) Targeting, whereby key/value pairs are added to the ad tag URL's cust_params parameter.
-
Added support for Audience Segment (Ad) Targeting, whereby key/value pairs are added to the VMAP Source URL.
-
Fixed a problem where an empty or malformed URL in a VAST Tracking element can cause an app crash
-
Upgraded the FileDownloader dependency to v1.7.7
This upgrade fixes an issue where downloading while the app is in the background could pause unexpectedly.
-
Fixed an alignment issue between the scrubber and the thumbnail preview on Android TV
-
Added support for HEVC videos.
On devices that support HEVC (with API level 21 and higher), playback of HEVC is now automatically available. See documentation for technical details.
-
Added seek without ads support when setting
adsDisabled
onVideoPlaybackController
-
Added support to play Pulse passback ads
-
Added a message to indicate when the user is in a Pause Ad
-
Increased size of the thumbnail image shown in tablets
-
Increased speed of thumbnail dragging on Android TV
-
Fixed an issue where the Closed Captions might be out of sync with the Video
-
Deprecated
BrightcoveSurfaceView.isVideo360Supported()
. Based on current supported versions, it always returns true. -
With this release, the Brightcove Native SDK for Android implements the Pulse Advertising Plugin.
-
Added support for the Brightcove Playback Rights Management Service.
-
Breaking Change: The Playlist object is now immutable.
-
The Playlist object can now contain a mix of videos with status
Status.OK
andStatus.ERROR
-
Playlist.getErrorVideos()
: This new method will return only videos with status ofStatus.ERROR
-
Playlist.getAllVideosAndErrors()
: This new method will return all videos with both status,Status.OK
andStatus.ERROR
, following the same order as returned from the Playback Rights Management Service response -
Note:
Playlist.getVideos()
andPlaylist.getCount()
behave the same way as previous versions, that is, they consider only the videos with statusStatus.OK
-
Added
ErrorListener.onError(List
callback.) -
Deprecated
ErrorListener.onError(String)
callback. -
The Video object now has a status code, which can be either
Status.OK
orStatus.ERROR
. You may retrieve the status throughVideo.getStatus():Status
. -
Status.OK
: The Video has all the expected properties and does not haveVideo.Fields.ERRORS
in it. -
Status.ERROR
: The video hasVideo.Fields.ERRORS
in its properties in the form ofList<CatalogError>
. -
The VMAP plugin has been deprecated. For client-side advertising with VMAP and VAST documents, please use the IMA plugin.
-
Fixed a crash when attempting to play an HLS Live stream.
-
Fixed an issue where some VTT closed captions files would not download successfully.
-
Added new
CastMediaUtil.toMediaInfo
methods without the unnecessary Android Context parameter. -
Deprecated
CastMediaUtil.toMediaInfo
methods with the unnecessary Android Context parameter. -
Breaking Change: The Brightcove Android Native SDK is now built using AndroidX (JetPack) libraries. Please refer to the Android SDK Support pages for more information on this change, and required steps to migrate your application code.
-
Fixed an issue with the
backgroundOpacity
method inBrightcoveCaptionStyle
where this method was not setting background opacity on captions as expected. -
Fixed an issue where fullscreen functionality was not working as expected in the
BrightcovePlayerFragment
. -
ExoPlayer support in the Brightcove Android Native SDK has been upgraded to 2.10.8.
-
Fixed an issue in audio track selection where higher-bitrate renditions could not be selected after switching languages.
-
Adds support for live content with pre-roll client-side ads.
-
Fixed an issue where the Captions button would not consistently display during content playback. Please note that this issue is currently fixed for mobile devices only; a solution for Android TV devices will follow in an upcoming release.
-
The Android SDK now targets and supports Android 10 (targetSdkVersion 29).
-
Fixes a RunTimeException: "Canvas: trying to use a recycled bitmap", when attempting to display the Poster Image.
-
Added the following convenience constants as HttpRequestConfig query parameters key:
HttpRequestConfig.KEY_DELIVERY_RULE_CONFIG_ID
Used to add a Delivery Rules Config IDHttpRequestConfig.KEY_AD_CONFIG_ID
Used to add an SSAI Ad Config ID
-
All support for ExoPlayer 1.x has been removed from The Brightcove Native SDK for Android. Please make sure to use ExoPlayer v2. For details, see the Migrating to ExoPlayer 2 Framework document.
-
Live and Live DVR streams with Server Side Ad Insertion (Live SSAI) are now supported.
-
Breaking Change: The
Event.PLAYHEAD_POSITION
property in both events,EventType.PROGRESS
andEventType.AD_PROGRESS
, now contains the absolute playhead position, which is the same playhead position given by the underlying player.
Please useEvent.PROGRESS_BAR_PLAYHEAD_POSITION
instead to get the relative playhead position. -
The
Event.PROGRESS_BAR_PLAYHEAD_POSITION
property was introduced for bothEventType.PROGRESS
andEventType.AD_PROGRESS
events which contains the relative playhead position (asEvent.PLAYHEAD_POSITION
did in older versions). -
Added Ad controls for Android TV.
-
Fixed an issue where the rewind button will not rewind properly after consecutive clicks.
-
ExoPlayer2 has been downgraded to version 2.9.3 due to an issue with HLS Multiple Audio Tracks in version 2.9.6.
-
Add Playback Authentication Service (PAS) support.
-
The following methods are added to the
com.brightcove.player.edge.AbstractOfflineCatalog
:findOfflineVideoById(String, @NonNull HttpRequestConfig): Video
findOfflineVideoById(String, @NonNull HttpRequestConfig, @NonNull OfflineCallback<Video>): void
requestPurchaseLicense(@NonNull Video, @NonNull EventListener, @NonNull HttpRequestConfig): void
requestRentalLicense(@NonNull Video, @NonNull Date, long, @NonNull EventListener, @NonNull HttpRequestConfig): void
-
The following method is removed from the
com.brightcove.player.edge.AbstractOfflineCatalog
renewLicense(@NonNull Video, @NonNull EventListener): void
-
Fixes an issue loading poster images for downloaded videos. When available, a local image will be loaded.
-
Adds support for live content with pre-roll client-side ads
-
Fixes an issue where a content source could be loaded directly from the
src
attribute in the Playback API response, instead of from thecontenturi
attribute in the VMAP. -
The Android Minimum SDK Version supported by the Brightcove Native SDK for Android is now 19.
-
The Brightcove Native SDK for Android is now Java 8 compliant. Please note that Android apps developed using this version of the Android SDK may require the following directive added to the build.gradle file to ensure bytecode compatibility:
compileOptions{ targetCompatibility JavaVersion.VERSION_1_8 sourceCompatibility JavaVersion.VERSION_1_8 }
-
ExoPlayer2 has been upgraded to version 2.9.6
-
Please note that this upgrade has the following API changes:
-
Breaking Change Removed:
constructor TrackSelectorHelper(@NonNull ExoPlayer player, @NonNull MappingTrackSelector trackSelector)
Use
constructor TrackSelectorHelper(@NonNull ExoPlayer player, @NonNull DefaultTrackSelector trackSelector)
-
Breaking Change Removed:
setTrackSelector(@NonNull MappingTrackSelector trackSelector)
Use
setTrackSelector(@NonNull DefaultTrackSelector trackSelector)
-
Removed
getTrackSelector(): MappingTrackSelector
Use
getTrackSelector(): DefaultTrackSelector
-
The FreeWheel plugin has been updated to support FreeWheel AdManager version 6.28.0.
-
Please note that FreeWheel now packages the AdManager library as an Android Archive (AAR).
-
The IMA Plugin has been updated to support Google IMA SDK version 3.11.2.
-
This version of the Google IMA SDK supports Open Measurement standards.
-
Please refer to the Brightcove Android SDK documentation for more information.
-
Fixed an issue where midroll ads called after long periods of content playback would not play.
-
The SSAI Plugin now supports content delivery through the Brightcove Playback Authorization Service (PAS).
-
Please note that PAS works only with the SSAI Plugin. PAS with the deprecated OnceUx Plugin is not supported.
-
With this release, the Brightcove Native SDK for Android implements the SSAI Plugin. For more information on this new plugin, please visit the Brightcove Android SDK Overview in the Brightcove Support site.
-
With this release, the OnceUx Plugin is deprecated. Please use the new SSAI Plugin instead. For more information, please visit the Brightcove Android SDK Overview in the Brightcove Support site.
-
A new class, HttpRequestConfig has been added. This class supports the addition of request URL parameters and/or request headers that may be required by Brightcove services (e.g. the Brightcove Edge API, or the Brightcove Playback Authorization Service (PAS)). Please refer to Brightcove Support documentation for more information on usage of this class.
-
Along with the HttpRequestConfig class, the following methods are added to the com.brightcove.player.edge.Catalog class: findPlaylistByID(String, HttpRequestConfig, PlaylistListener): void findPlaylistByReferenceID(String, HttpRequestConfig, PlaylistListener): void findVideoByID(String, HttpRequestConfig, VideoListener): void findVideoByReferenceID(String, HttpRequestConfig, VideoListener): void
-
The following findPlaylist methods are deprecated in com.brightcove.player.edge.Catalog: findPlaylistByID(String, Map<String, String>, PlaylistListener): void findPlaylistByID(String, Map<String, String>, Map<String, String>, PlaylistListener): void findPlaylistByReferenceID(String, Map<String, String>, PlaylistListener): void findPlaylistByReferenceID(String, Map<String, String>, Map<String, String>, PlaylistListener): void
-
The following findVideo methods are deprecated in com.brightcove.player.edge.Catalog: findVideoByID(String videoID, Map<String, String>, VideoListener): void findVideoByID(String videoID, Map<String, String>, Map<String, String>, VideoListener): void findVideoByReferenceID(String, Map<String, String>, VideoListener): void findVideoByReferenceID(String, Map<String, String>, Map<String, String>, VideoListener): void
-
In the Limited Availability release of the Brightcove Playback Authorization Service (PAS), the following features are supported by the Brightcove Native SDK for Android:
-
Online streaming of DRM content with PAS
-
Online streaming of HLSe content with PAS
-
-
In the Limited Availability release of the Brightcove Playback Authorization Service (PAS), the following features are not currently supported by the Brightcove Native SDK for Android, and will be implemented in an upcoming release:
-
Server-side Ad Insertion with the OnceUx plugin with PAS
-
Offline Playback with PAS
-
Chromecast with PAS
-
-
Important Note About ExoPlayer 1:
-
ExoPlayer 1 is deprecated, and will be End Of Life by the end of Q3 2019, at which point it will no longer be available in the Brightcove Native SDK for Android.
-
-
Fixed an issue where the IFrameResource element was being incorrectly parsed from VMAP sources.
-
Removed unnecessary dependencies in the Brightcove Android SDK.
-
Added asynchronous versions of the following methods to the OfflineCatalog class: getVideoDownloadStatus findAllQueuedVideoDownload findAllVideoDownload findOfflineVideoByID downloadVideo cancelVideoDownload pauseVideoDownload resumeVideoDownload deleteVideo getMediaFormatTracksAvailable
-
Fixed an issue where the estimateSize method in the OfflineCatalog class was returning an unexpected value.
-
Fixed an issue where an offline video built using VideoParser.buildVideoFromJSON() would not play as expected.
-
Fixed an issue where duplicate caption menu items would appear.
-
Android 9 - Testing has shown that the following permission is required to use Chromecast with Android 9, in particular when the app is backgrounded and brought back to the foreground, and in order to use notifications to control a casting session. This uses-permission tag should be added to an app's AndroidManifest.xml: <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
-
Captions - Testing has shown that in-manifest captions only with Dynamic Delivery DASH display as expected.
-
Captions - In-manifest captions with HLS are not currently supported.
-
Captions - Sidecar captions in any video configuration are not currently supported. This clarification is also present in the Cast plugin release note for the Brightcove Android SDK v6.3.0 release.
-
The Brightcove Native SDK for Android now supports Android 9.0 (Pie). Please note that with the Android Pie release you must be aware of some important changes, such as Network TLS enabled by default, Apache HTTP client deprecation and the deprecation of Android ConnectivityManager constants. You might need to make additional changes in your application. For more information, please visit https://support.brightcove.com/android-pie-support-native-sdk-android.
-
The DefaultSourceSelectionController and ExoPlayerSourceSelectionController will now prefer HTTPS sources in its selection if available, otherwise the selection controller will select the first source available.
Version 8.1.1
12 May 2023
ExoPlayer 2.17.1
SDK Changes:
ExoPlayer Changes:
Offline Playback Plugin Changes:
Version 8.1.0
28 March 2023
ExoPlayer 2.17.1
SDK Changes:
IMA Plugin Changes:
SSAI Plugin Changes:
Version 8.0.1
15 March 2023
ExoPlayer 2.17.1
SDK Changes:
ExoPlayer Changes:
SSAI Plugin Changes:
Version 8.0.0
11 January 2023
ExoPlayer 2.17.1
This major release of the Brightcove Native SDK for Android contains significant behavioral changes. For details, see the The Native SDK for Android Release 8.0.0 document.
SDK Changes:
ExoPlayer Changes:
Version 7.1.4
16 November 2022
ExoPlayer 2.17.1
Cast Plugin Changes:
Version 7.1.3
27 October 2022
ExoPlayer 2.17.1
SDK Changes:
Version 7.1.2
30 September 2022
ExoPlayer 2.17.1
SDK Changes:
ExoPlayer Changes:
Version 7.1.1
1 September 2022
ExoPlayer 2.17.1
SDK Changes:
ExoPlayer Changes:
Version 7.1.0
22 August 2022
ExoPlayer 2.17.1
SDK Changes:
ExoPlayer Changes:
SSAI Plugin Changes:
Version 7.0.1
6 July 2022
ExoPlayer 2.17.1
SDK Changes:
ExoPlayer Changes:
The Brightcove Native Player SDK for Android now supports ExoPlayer 2.17.1. Please note the following breaking changes with this upgrade:
Cast Plugin Changes:
Fixes an issue when casting Remote DRM videos, where the Cast sender was sending an unexpected CustomData field to the Brightcove Cast Receiver app.
IMA Plugin:
Pulse Plugin:
SSAI Plugin Changes:
Version 6.18.6
14 June 2022
ExoPlayer 2.14.2
SDK Changes:
ExoPlayer Changes:
Version 6.18.5
27 May 2022
ExoPlayer 2.14.2
SDK Changes:
SSAI Plugin Changes:
Version 6.18.4
20 May 2022
ExoPlayer 2.14.2
SDK Changes:
Version 6.18.3
6 May 2022
ExoPlayer 2.14.2
SDK Changes:
ExoPlayer Changes:
Thumbnail Plugin Changes:
Version 6.18.2
24 Mar 2022
ExoPlayer 2.14.2
SDK Changes:
ExoPlayer Changes:
Version 6.18.1
26 Jan 2022
ExoPlayer 2.14.2
ExoPlayer Changes:
Version 6.18.0
21 Dec 2021
ExoPlayer 2.14.2
SDK Changes:
SSAI Plugin Changes:
Version 6.17.3
10 Dec 2021
ExoPlayer 2.14.2
SDK Changes:
Version 6.17.2
19 Nov 2021
ExoPlayer 2.14.2
SDK Changes:
Version 6.17.1
14 Oct 2021
ExoPlayer 2.14.2
ExoPlayer Changes:
Version 6.17.0
8 Oct 2021
ExoPlayer 2.14.2
SDK Changes:
ExoPlayer Changes:
Version 6.16.6
4 Oct 2021
ExoPlayer 2 v2.10.8
SDK Changes:
ExoPlayer Changes:
Version 6.16.5
23 Aug 2021
ExoPlayer 2 v2.10.8
SDK Changes:
ExoPlayer Changes:
Offline Playback Plugin Changes:
Version 6.16.4
4 Aug 2021
ExoPlayer 2 v2.10.8
Offline Playback Changes:
Version 6.16.3
1 July 2021
ExoPlayer 2 v2.10.8
SDK Changes:
Cast Plugin Changes:
Offline Playback Changes:
Version 6.16.2
10 May 2021
ExoPlayer 2 v2.10.8
SDK Changes:
ExoPlayer 2 Changes:
Omniture Plugin Changes:
SSAI Plugin Changes:
Version 6.16.1
12 Jan 2021
ExoPlayer 2 v2.10.8
SDK Changes:
IMA Plugin Changes:
SSAI Plugin Changes:
Version 6.16.0
14 Oct 2020
ExoPlayer 2 v2.10.8
Cast Plugin Changes:
Version 6.15.1
22 Sep 2020
ExoPlayer 2 v2.10.8
SDK Changes:
Cast Plugin Changes:
Offline Playback Plugin Changes:
Pulse Plugin Changes:
SSAI Plugin Changes:
Version 6.15.0
25 Aug 2020
ExoPlayer 2 v2.10.8
SDK Changes:
ExoPlayer Changes:
IMA Plugin Changes:
VMAP Plugin changes:
OnceUx Plugin Changes:
Version 6.14.1
7 Aug 2020
ExoPlayer 2 v2.10.8
SSAI Plugin Changes:
Version 6.14.0
8 Jul 2020
ExoPlayer 2 v2.10.8
SDK Changes:
IMA Plugin Changes:
Version 6.13.3
21 May 2020
ExoPlayer 2 v2.10.8
SDK Changes:
Cast Plugin Changes:
IMA Plugin Changes:
SSAI Plugin Changes:
Version 6.13.2
24 Apr 2020
ExoPlayer 2 v2.10.8
Offline Playback Changes:
Thumbnail Plugin Changes:
Version 6.13.1
16 Apr 2020
ExoPlayer 2 v2.10.8
SDK Changes:
Pulse Plugin Changes:
Thumbnail Plugin Changes:
SSAI Plugin Changes:
Version 6.12.0
5 Mar 2020
ExoPlayer 2 v2.10.8
SDK Changes:
Pulse Plugin:
Version 6.11.0
7 Feb 2020
ExoPlayer 2 v2.10.8
SDK Changes:
VMAP Plugin:
Version 6.10.1
17 Jan 2020
ExoPlayer 2 v2.10.8
ExoPlayer Changes:
Offline Playback Changes:
Cast Plugin:
Version 6.10.0
19 Dec 2019
ExoPlayer 2 v2.10.8
SDK Changes:
ExoPlayer Changes:
IMA Plugin Changes:
SSAI Plugin Changes:
Version 6.9.0
22 Oct 2019
ExoPlayer 2 v2.9.3
SDK Changes:
ExoPlayer v1 Changes:
SSAI Plugin Changes:
Version 6.8.1
31 May 2019
ExoPlayer 2 v2.9.3
ExoPlayer2 Changes:
Offline Playback Changes:
FreeWheel Plugin Changes:
SSAI Plugin Changes:
Version 6.8.0
1 May 2019
ExoPlayer 2 v2.9.6
SDK Changes:
ExoPlayer2 Changes:
FreeWheel Plugin Changes:
IMA Plugin Changes:
SSAI Plugin Changes:
Version 6.7.0
5 Apr 2019
ExoPlayer 2 v2.7.0
SSAI Plugin:
OnceUx Plugin Changes:
Version 6.6.0
29 Mar 2019
ExoPlayer 2 v2.7.0
SDK Changes:
Brightcove Native SDK for Android support for the Brightcove Playback Authorization Service (PAS)
Version 6.5.1
12 Feb 2019
OnceUx Plugin Changes:
Version 6.5.0
6 Dec 2018
SDK Changes:
OnceUx Plugin Changes:
Cast Plugin: Release note update: While the Cast plugin has no changes in this release, it is important to note these clarifications in the currently supported features of this plugin.
Version 6.4.0
17 Oct 2018
SDK Changes:
Older releases
Version 6.3.2
24 Sep 2018
SDK Changes:
-
Fixed an issue where the Settings button in Android TV was not working as expected.
-
Fixed an issue where getRefereiceId() and getDescription() in the Video class were not working as expected.
-
Added a method, getLongDescription(), to the Video class.
-
Fixed an issue in the OfflineCatalog class where calling setDownloadPath with a null argument caused a NullPointerException.
-
Fixed an issue in the OfflineCatalog class where calling the estimateSize method could return an unexpectedly large value.
-
Fixed an issue where an Activity that was not enabled for Picture-In-Picture would throw a non-fatal IllegalStateException. The error is now logged as a warning.
-
Deprecated support for the BrightcoveClosedCaptioningSurfaceView class.
OnceUx Plugin Changes:
-
Added support for the VAST Icon element.
Version 6.3.1
09 Aug 2018
SDK Changes:
-
Fixed an issue where Android Studio will throw an exception in the Layout Editor when rendering the BrightcoveVideView.
ExoPlayer v2 Changes:
-
Added LoadControlConfig and AllocatorConfig classes. The values set in these classes will be used to create the ExoPlayer DefaultLoadControl object, which is used when creating the ExoPlayer instance. The AllocatorConfig may be set when creating the LoadControlConfig. The LoadControlConfig may be set to the ExoPlayerVideoDisplayComponent instance.
OnceUx Plugin Changes:
-
Fixed an issue where the default poster image shown in the BrightcoveVideoView will not disappear after the preroll starts playing.
Version 6.3.0
27 July 2018
Cast Plugin Changes: The Cast Plugin has been updated with a dependency on the ExoPlayer Cast Extension v2.7.0. Please note that certain VideoCloud features have limited support, or are not yet supported when using Cast plugin with the Google sample receiver app.
-
Android 9 - Testing has shown that the following permission is required to use Chromecast with Android 9, in particular when the app is backgrounded and brought back to the foreground, and in order to use notifications to control a casting session. This uses-permission tag should be added to an app's AndroidManifest.xml: <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
-
Captions - Testing has shown that in-manifest captions only with Dynamic Delivery DASH display as expected.
-
Captions - In-manifest captions with HLS are not currently supported.
-
Captions - Sidecar captions in any video configuration are not currently supported.
-
Widevine Modular DRM is not supported when using the Cast plugin with the Google sample receiver app.
-
Multiple Audio Tracks are not supported when using the Cast plugin with the Google sample receiver app.
-
Client-side and Server-side Advertising is not supported when using the Cast plugin with the Google sample receiver app.
-
Live and Live DVR streams are not supported when using the Cast plugin with the Google sample receiver app.
FreeWheel Plugin Changes:
-
The FreeWheel plugin has been updated to support FreeWheel AdManager v6.23.0. Please note that this is a breaking change, and that this version of the Brightcove Native SDK for Android will not work with previous versions of FreeWheel AdManager. Please refer to the release notes in FreeWheel AdManager v6.23.0 for more information on the changes in that version.
IMA Plugin Changes:
-
The IMA Plugin now supports v3.9.0 of the Google IMA SDK for Android.
Version 6.2.3
16 July 2018
SDK Changes:
-
Offline Playback: Upgraded the FileDownloader library version to 1.7.4.
-
Offline Playback: Fixed an issue where backgrounding the app and changing network status could throw an IllegalArgumentException.
Version 6.2.2
9 July 2018
ExoPlayer v2 Changes:
-
Fixed an issue where values in the HEADERS field of the Video object were not being added as expected.
OnceUx Plugin Changes:
-
Fixed an issue where seeking without ads during the video could result in ad events still being fired.
Version 6.2.1
5 June 2018
ExoPlayer v2 Changes:
-
The Brightcove ExoPlayer has been reverted to v2.7.0, to work around a regression in backward seek behavior in live streams, and an unexpected change in how the Live Window Range value is calculated.
-
Fixed an issue with the calculation for BrightcoveSegmentTemplate.getSegmentCount when the DASH manifest has the startNumber parameter different than 0.
-
Added a validation for a potential NullPointerException in ExoPlayerVideoDisplayComponent.reportPlayerState
Version 6.2.0
18 May 2018
SDK Changes:
-
Added a VideoParser class with methods to build a Video and a Playlist from a JSON object, following the Brightcove Playback API response format.
-
Overloaded the requestPurchaseLicense() and requestRentalLicense() methods in the OfflineCatalog class in order to set the OutputProtection through the CustomerRightsTokenConfig object.
-
Updated the FileDownloader library to 1.7.3 for Offline Playback.
-
Fixed a race condition for Offline Playback when deleting multiple videos while being downloaded.
ExoPlayer v2 Changes:
-
The Brightcove ExoPlayer has been updated to 2.7.3.
-
The following methods were deprecated from BrightcoveDrmSession interface:
-
DrmException getDrmError()
-
Map<String, String> queryKeyStatus()
-
byte[] getOfflineLicenseKeySetId()
-
OnceUx Plugin Changes:
-
Added support to parse and read all Ad Creative IDs from SSAI VMAP.
-
Removed requirement for id attribute in Ad tag.
Version 6.1.2
24 Apr 2018
SDK Changes:
-
Fixed an issue where the download would not resume in slow networks (down to 256kbps) after killing and restarting the app.
OnceUx Plugin Changes:
-
Fixed an issue where all ads will be played after seeking over multiple ad pods.
Version 6.1.1
6 Apr 2018
SDK Changes:
-
Fixed an Offline Analytics dependency that was unexpectedly increasing app sizes.
-
Fixed an issue with Offline Playback where some downloads were hanging at 99%.
Version 6.1.0
29 Mar 2018
SDK Changes:
-
Added support for Picture-in-Picture on Android Oreo.
-
Fixed a UI performance issue for Offline Playback when downloading a video by making all Download Manager callbacks on a background thread.
-
Improvement in download speeds for Offline Playback.
-
Fixed an Offline Playback issue where the download_id parameter was missing from video_download_request and video_download_cancellation events for clear downloads.
-
Fixed an issue with WebVTT captions where using the "line:" attribute without a percentage (%) character was preventing the captions from displaying.
-
AbstractOfflineCatalog.renewLicense method is deprecated and is now non-functional. To renew an offline license, please use either AbstractOfflineCatalog.requestRentalLicense(Video, Date, long, EventListener) or AbstractOfflineCatalog.requestPurchaseLicense(Video, EventListener)
ExoPlayer2 changes:
-
ExoPlayer2 now reports the cumulative number of bytes downloaded through the current video engagement event and sends it to the Analytics server as media_bytes_transferred.
-
Added a convenience method to set the peak bitrate before preparing the player for a new video, or any time ExoPlayerVideoDisplayComponent.setPeakBitrate(int peakBitrate) is called.
Version 6.0.2
30 Jan 2018
SDK Changes:
-
Added support for offline playback analytics.
-
The deprecated Widevine Classic plugin has been removed.
IMA Plugin Changes:
-
Fixed an issue where viewable_impression beacons were not being fired as expected.
OnceUX Plugin Changes:
-
Fixed an issue where ad markers were not being displayed in their expected locations.
-
Fixed issues involving seeking past advertisements, and resuming playback from the intended seek position.
-
Fixed issues where player controls would appear in SSAI ads on orientation changes.
Version 6.0.1
18 Dec 2017
SDK Changes:
-
The deprecated legacy Media API classes, those in the com.brightcove.player.media package, were removed from the Brightcove Native SDK for Android.
-
The following classes were moved from com.brightcove.player.media to com.brightcove.player.model. Please note this is a breaking change:
-
DeliveryType
-
CaptionType
-
ErrorFields
-
VideoFields
-
ExoPlayer v2 Changes:
-
The Brightcove Native SDK for Android using ExoPlayer 2 (v2.5.3) is in General Availability.
-
Added support for the Omniture plugin when using ExoPlayer 2.
-
Several bug fixes.
ExoPlayer v1 Changes:
-
The Brightcove Native SDK for Android using ExoPlayer 1 has been deprecated. For more information about the migration process, please visit https://support.brightcove.com/migrating-exoplayer-2-framework
Complete release notes
For a complete list of release notes, see the Brightcove Native SDK for Android Release Notes.