Brightcove Native Player for Android Release Notes: Release Notes: Version 10.0.0 SDK Changes: * Standardize the User-Agent to conform to the DeviceAtlas standard * Change the MIN_SDK from 17 to 21. ExoPlayer Changes: * Migration of the ExoPlayer library to Media3 library v1.4.1 IMA Plugin Changes: * Update the IMA library to v3.36.0. Playback Notification Plugin Changes: * Fix an issue where two media could simultaneously be played in the background. Version 9.2.3 Exoplayer Changes: * Fixed a problem where the default bitrate was reset after attempting to change the audio track. Version 9.2.2 SDK Changes: * Fixed a problem where the video frames were not displayed after the SDK switched from playing CSAI ads. Version 9.2.1 SDK Changes: * Fixes an issue where the current position view is not properly updated when manually seeking. * Addresses an unexpected view stacking behavior that could occur if a caption cue had less than 250ms of its remaining duration in the current second of playback. * Fixes a problem where Generic Stream Concurrency is not completely stopped once the setStreamConcurrencyEnabled(false) is called. * Two new methods were added to enable and disable stream concurrency: enableStreamConcurrency() or disableStreamConcurrency(). Side note, stream concurrency cannot be initiated after the video started to play. * Deprecated the method setStreamConcurrencyEnabled(boolean) in the BaseVideoView class. Instead us enableStreamConcurrency() or disableStreamConcurrency() from the same class. SSAI Plugin Changes: * Fixes a problem where seeking within the player's progress bar would lead to unexpected replay of midroll ads. * Fixes a crash while using custom controllers and SSAI. * Fixes a formatting exception when the Tracking Events returned an invalid URI. Version 9.2.0 SDK Changes: * Fixes a problem where caption language re-selection was not working after the initial selection and after SSAI ads. * Fixes an issue where seeking to the extreme end of a player could prevent a video's captions from being displayed when replaying the video. ExoPlayer Changes: * Fixes an issue where some live streams could not be played. SSAI Plugin Changes: * Builds the CAPTION_SOURCES Video Object from the TimedTextURL Extensions if they are present in the Brightcove VMAP. Version 9.1.0 SDK Changes: Added support for the Brightcove Interactivity functionality. Please check the official documentation for more details. Version 9.0.0 New plugin release: * The new Playback-Notification plugin helps in background playback. See the "Android: Background Playback" documentation for more details. SDK Changes: * Address a policy change in the Google Play Store regarding foreground services usage. For more details, read the "Android SDK v9.0 Migration Guide" documentation. * Adding support for the use of bumper videos with the SDK. Version 8.4.4 SDK Changes: * Fixes a regression when enabling captions from the Settings screen fails. * Adds support the EBU+TTML caption type. Version 8.4.3 SDK Changes: * Fix a regression where only one caption was displayed from several that have the same timestamp. Version 8.4.2 SDK Changes: * Fix for a regression where descriptive audio track items for DASH video were not displayed as expected in the Audio Track Selection menu. * Set custom read and connect timeouts for catalog requests through the HttpRequestConfig class. * Implement better handling of exceptions in Generic Stream Concurrency and in the PlaybackNotification. * Fix for a regression when disabling captions from the Settings screen fails. * Support for display MP4-Encapsulated VTT captions IMA Changes: * Fix for a crash when tapping back button or closing the screen in ad playback. * Improvements to Ad Insights reporting for ad errors, audible duration (for muted and partially-muted ads) and video resumption after mid-roll ad pods. * Upgrade the IMA library to v3.33.0. It fixes the issue where ad clickthroughs using the Learn more button and the companion ad will not open a new page in Android API version 30 and higher. SSAI Changes: * Fix for a regression where a mid-roll is repeatedly played for every seek after it was crossed. Version 8.4.1 SDK Changes: * Changed the startup flag on the MediaPlaybackService to START_STICKY to improve foreground service performance. ExoPlayer Changes: * Fixed an issue with seeking and navigation in the Brightcove notification. Version 8.4.0 SDK Changes: * Support for Android 14 is added with this version of the Brightcove Native SDK for Android. * With this version of the Brightcove Native SDK for Android, Android OS versions 6 and 7 are moved to Passive Support. Please refer to the Android SDK support pages for more information on support levels. * Adds support functionality that allows users to zoom in and out of a video while it is playing. * Fixes an issue where the player was not destroyed when a fragment was destroyed. * Remove unnecessary code that could cause a potential bug in the LoadImageTask class. ExoPlayer Changes: * Adds support for overriding ExoPlayer's default connect and read timeout settings. Freewheel Plugin Changes: * Fixes an issue that could produce a crash during ad playback. IMA Plugin Changes: * The IMA plugin now offers a function to clear some internal and external objects used by the plugin. OfflinePlayback Changes: * Improved download queue functionality now gracefully handles individual download failures, ensuring uninterrupted progression of remaining downloads. SSAI Plugin Changes: * Fixes an issue where ad stitched positions were returned for ad and linear start events with incorrect values. Version 8.3.0 SDK Changes: * Fixes a regression issue where the Fast Backward button shows the wrong icon on TV devices. * Fixes an issue where the fast-forward button could not be set with a custom icon. * Fixes a crash issue on Android 14 devices with BroadcastReceiver and Foreground Service. * Video.findHighQualitySource now favors HTTPS, ensuring safer downloads and ClearText restriction compliance. * Prioritize HTTPS URLs, enhancing security and compatibility in restricted ClearText environments. ExoPlayer Changes: * The Brightcove Native Player SDK for Android now supports ExoPlayer 2.19.1. Please refer to the ExoPlayer release notes for information on ExoPlayer changes since 2.17.1, particularly for TrackSelectionOverride changes made in ExoPlayer 2.18.0. * Fixes an issue where the Play and Pause button on Android TV remotes did not work as expected. * Fixes an issue where the notification shows the title instead of the description. Cast Plugin Changes: * The Cast plugin is updated to use the latest Brightcove Cast receiver app. IMA Plugin Changes: * The Google IMA SDK dependency has been upgraded to 3.31.0. This upgrade fixes a crash in Android 14 related to this library. Offline Playback Changes: * Fixes an issue where a clear text source could be selected by the OfflineCatalog, and improves source selection. * Fixes incorrect error handling when downloading offline videos. * Enhanced error handling in DownloadManager to prevent stalls and improve notification management. SSAI Plugin Changes: * Included ProGuard consumer files to retain essential IAB parser classes when minification is enabled. Version 8.2.3 SDK Changes: * Adds support for Player ID, Player Name, and Application ID Analytics fields. Note that these fields are optional; if a value is not supplied, an empty or placeholder value will not be sent. * Improves null checking when adding videos or playlists to a player. * Fixes an issue where a preroll ad was played twice when added using cue points. * Fixes an issue with customizing the Captions, Rewind, Fast Forward, and Audio Tracks buttons. Offline Plugin Changes: * Selects https source URL by default for offline playback. SSAI Plugin Changes: * Fixes an issue with the Play/Pause button state after seeking through midroll ads. * Improves null checking when adding videos or playlists to a player. * Fixes an issue where a NullPointerException would be thrown when using the SSAIComponent class constructor: SSAIComponent(@NonNull Context context, @NonNull BaseVideoView baseVideoView, int connectTimeout, int readTimeout) * Fixes an issue where the adDataReady event was emitted after adding the video to the view. This fix restores the order of emitted events in previous SDK versions. * Fixes an issue with rewind behavior when the player’s playhead position is 0. Version 8.2.2 SSAI Plugin Changes: * Fixes an issue where midroll ads would replay after seeking backwards through content Version 8.2.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 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. Version 8.1.1 SDK Changes: * 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. ExoPlayer Changes: * Fixes an issue where the COMPLETED event could be emitted on clearing a video from a playlist without completing playback. Offline Playback Plugin Changes: * 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 Version 8.1.0 SDK Changes: * 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 Analytics rebuffering_count will be incremented for rebuffering_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 IMA Plugin Changes: * Adds support for SpringServe macros to the IMA Plugin for the Brightcove Native SDK for Android SSAI Plugin Changes: * 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 Version 8.0.1 SDK Changes: * 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. ExoPlayer Changes: * Fixes an issue in ExoMediaPlayback where transitions between videos in playlists could prevent preroll ads from playing on subsequent videos. SSAI Plugin Changes: * Adds support for setting custom read and connect timeouts in the SSAIComponent and SSAIVideoProcessor Version 8.0.0 Please Note: This major release of the Brightcove Native SDK for Android contains significant behavioral changes. Please refer to Support documentation for more information on these changes. A summary of key behavioral changes: * SDK Changes: * 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 the VideoView to support continuous playback of audio-only media. The MediaPlayback communicates playback state to the notification and the VideoView. * Support for an ongoing foreground service for continuous playback. * Improves loading playlists and pre-buffering media for a smoother end-user experience. * ExoPlayer Changes: * Added a media-style notification with customizable playback controls from the notification shade and lockscreen. This BrightcoveNotification class connects playback with a foreground service. Version 7.1.4 Cast Plugin Changes: * Adds support for the Brightcove Cast Receiver emeHeaders CustomData object. Version 7.1.3 SDK Changes: * 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 Playback Authorization Service (PAS) and Edge Playback Authorization (EPA). Please note that stream concurrency limiting (through climit and cbeh payloads, also referred to as License Protection) will be supported in an upcoming SDK release. Version 7.1.2 SDK Changes: * 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. Please refer to Support documentation for more information. ExoPlayer Changes: * Added support for Dub and Description DASH role values. Version 7.1.1 SDK Changes: * Fixes a performance issue that could occur when loading larger size closed captions ExoPlayer Changes: * Adds setter and getter methods for the allowChunklessPreparation property ExoPlayer’s HLSMediaSource.Factory. With Exoplayer 2.17.0, the default value of this property was changed from false to true, 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 the ExoPlayerVideoDisplayComponent’s setAllowHlsChunklessPreparation(false) to disable HLS chunkless preparation in ExoPlayer’s HLSMediaSource.Factory, which will restore display of 608/708 captions. Version 7.1.0 SDK Changes: * 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. ExoPlayer Changes: * Provides setter and getter methods in ExoPlayerVideoDisplayComponent for the DefaultRenderersFactory. * In the TrackSelectorHelper class, applySelectionOverride(int, SelectionOverrideCreator) is deprecated. Please use applyTrackSelectionOverrides(int, TrackSelectionOverrideCreator) instead. * Fixes the callbacks to retrieve metadata of the media during playback SSAI Plugin Changes: * 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. Version 7.0.1 Please Note: This major release of the Brightcove Native SDK for Android contains breaking changes, as detailed below. SDK Changes: * 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. ExoPlayer Changes: * The Brightcove Native Player SDK for Android now supports ExoPlayer 2.17.1. Please note the following breaking changes: * This version of ExoPlayer requires Java 11 and Gradle 7.4. * The DrmSession interface no longer requires a parameter. * The ExoPlayerDrmSessionManager interface no longer requires a parameter. * In the TrackSelectorHelper class. The method updateTracksSelectionArray(@Nullable TrackSelectionArray trackSelections) is now deprecated and replaced with updateTracksGroupInfos(@Nullable ImmutableList trackGroupInfos) * In the MediaSourceUtil class, the method findRenditionUrl(@NonNull HlsMasterPlaylist hlsMasterPlaylist, int trackType, @NonNull Format format) is now deprecated and is replaced with findRenditionUrl(@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 with ExoPlayerVideoDisplayComponent.setPeakBitrate(int). * The DashPeakBitRateTrackSelector class is now deprecated and replaced with ExoPlayerVideoDisplayComponent.setPeakBitrate(int). * The HLSPeakBitrateTrackSelector class is now deprecated and replaced with ExoPlayerVideoDisplayComponent.setPeakBitrate(int). Cast Plugin Changes: * In the GoogleCastComponent class, these methods: loadItem(MediaQueueItem, int) addItems(MediaQueueItem) now return void instead of PendingResult. * 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: * The Google IMA SDK dependency has been upgraded to 3.27.0. This upgrade includes support for Android 12. SSAI Plugin Changes: * 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, call processVideo(String vmapXmlString) in the SSAIComponent class. Version 6.18.6 SDK Changes: * Fixes a threading issue in the Catalog class, which resulted in a requirement in SDK version 6.18.5 that the Catalog must be defined and instantiated only from the Player’s main thread. From version 6.18.6 onwards, the Catalog must still be defined within the Player 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 the Catalog. * 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. ExoPlayer Changes: * Fixes an issue where a seek in a paused player would cause the seekbar’s scrubber to fail to update its progress. * Fixes an issue with Short Manifest TTLs where the Multi-Session DRM setting was not re-applied if the video was refreshed after its manifest timestamp expired. Version 6.18.5 SDK Changes: * Adds support for Short Manifest TTLs. IMPORTANT: Using this SDK version requires the Catalog and HttpRequestConfig objects to be created on the player’s main thread (in its onCreate method). This is a requirement independent of the use of the Short Manifest TTLs feature. SSAI Plugin Changes: * Adds support for Short Manifest TTLs. Version 6.18.4 SDK Changes: * 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. Version 6.18.3 SDK Changes: * 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. ExoPlayer Changes: * Provides a getter method that returns the current instance of the WidevineMediaDrmCallback, or an empty instance if it needs to be created. Thumbnail Plugin Changes: * Fixes an issue where Playlists with a mix of VideoCloud and remote videos would cause a thumbnail from the last-played VideoCloud video to be displayed when selecting a remote video. Version 6.18.2 SDK Changes: * Fixed an issue where video_engagement Analytics events for remote VOD videos could have a video_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 returns Integer.MIN_VALUE with an explanatory message. ExoPlayer Changes: * 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 the DefaultDrmSessionManager in ExoPlayer. Version 6.18.1 ExoPlayer Changes: * Added a check to address a crash that could occur if the ExoPlayer instance becomes null and getCurrentManifest() is called in the ExoPlayerVideoDisplayComponent. Version 6.18.0 SDK Changes: * 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 For a complete list of fields and methods that are migrated, please refer to the support pages for the Brightcove Native SDK for Android. SSAI Plugin Changes: * With this release, the SSAI plugin has been refactored to better support playback and seeking use cases. For a complete description of the behavioral and API-level changes to this plugin, please refer to the support pages for the Brightcove Native SDK for Android. * Fixes an issue where seeking in a paused player over ads could load the wrong player controls. Version 6.17.3 SDK Changes: * 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. Version 6.17.2 SDK Changes: * 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. Version 6.17.1 ExoPlayer Changes: * Fixed an issue with overly verbose logging from the ExoPlayerVideoDisplayComponent Version 6.17.0 ExoPlayer Changes: The Brightcove Native Player SDK for Android now supports ExoPlayer 2.14.2. Please note the following changes: * In the ExoPlayerVideoDisplayComponent class the getBrightcoveDrmSession() : BrightcoveDrmSession method has been deprecated. Instead please use ExoPlayerDrmSessionManager. See ExoPlayerVideoDisplayComponent:getExoPlayerDrmSessionManager() : ExoPlayerDrmSessionManager * In the ExoPlayerVideoDisplayComponent class, in the InfoListener subclass the method onDecoderInitialized(AnalyticsListener.EventTime eventTime, int trackType, String decoderName,long initializationDurationMs) has been deprecated. Instead please use onAudioDecoderInitialized(AnalyticsListener.EventTime eventTime, String decoderName, long initializationDurationMs) : void and/or onVideoDecoderInitialized(AnalyticsListener.EventTime eventTime, String decoderName, long initializationDurationMs) : void. * The constructor for the ExoPlayerDrmSessionManager class has been deprecated, instead use the ExoPlayerDrmSessionManager.Builder. * The constructor for the OfflineLicenseManager class has been deprecated. The OfflineLicenseManager now uses the Builder pattern. See OfflineLicenseManager.Builder. * In the class TrackSelectoParameterFactory, the method DefaultTrackSelector.Parameters createWithMaxVideoBitrate(int maxVideoBitrate) has been deprecated. Instead please use DefaultTrackSelector.Parameters createWithMaxVideoBitrate(Context context, int maxVideoBitrate). * In the class BrightcoveSegmentTemplate, the method getSegmentCount(long periodDurationUs) has been deprecated. Instead please use getSegmentCountLong(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 The Brightcove Native Player SDK for Android now supports Android 11. Version 6.16.6: SDK Changes: * Improved the video_seconds_viewed measurement in video_engagement events sent to the Brightcove Analytics back-end ExoPlayer Changes: * Fixed an issue where a device could go to sleep during ad playback Version 6.16.5 SDK Changes: * 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 ExoPlayer Changes: * Emit an AD_ERROR error event if ad loading is interrupted, or if the ExoAdPlayer or its context are null Offline Playback Plugin Changes: * Fixed a problem where backgrounding or exiting the app could cause offline content to fail to play Version 6.16.4 Offline Playback Changes: * Fixed an issue where some image files would not download successfully. Version 6.16.3 SDK Changes: * Added support for setting a label property in the BrightcoveCaptionFormat class to support sending selected caption and audio track information to a Cast receiver. * 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. Cast Plugin Changes: * 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. Please Note that there is a known, non-regression issue that will be addressed in an upcoming release, where in-manifest caption selections are not automatically displayed on the sender if the Cast session is closed during playback. A workaround for this problem is that the selection made before opening the Cast session can be re-selected and displayed when the session is reopened on the Sender device. Offline Playback Changes: * Added support for setting properties in the AbstractOfflineCatalog class. Offline Catalog properties can be set in two ways: * As a Map of key/value pairs using the setProperties(Map) method * Through the getProperties().put(key, value) method * Added support for creating custom NotificationChannels in the DownloadManager class. Please refer to the Android SDK Support Documentation for more information. Version 6.16.2 SDK Changes: * 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 additional "line-left" or "line-right" attribute were not being parsed or displayed. ExoPlayer 2 Changes: * Fixed an issue where an incorrect index could be used to get the current selected audio language Omniture Plugin: * Fixed an issue where the heartbeat would continue after the player was destroyed. SSAI Plugin Changes * Added parsing support for nested VAST and VMAP Extension elements. Please Note: Extension elements, regardless of nesting depth, are not executed by the SSAI plugin, and so this support only ensures that parsing VAST and VMAP with nested Extension elements of any depth does not fail. * Added parsing support for VAST AdVerification elements. Please Note: AdVerification elements are not executed by the SSAI plugin, and so this support only ensures that parsing VAST with AdVerification elements does not fail. In addition, AdVerification elements are a VAST 4.0 feature, and the Brightcove Android SDK does not yet fully support VAST 4.x. This parsing support should not be considered as support for VAST 4.x in general in the Brightcove Native SDK for Android. Version 6.16.1 SDK Changes: * Improved Video Engagement reporting for SSAI VOD videos. * The DashWidevineAuthorizer class is deprecated. Please use the WidevineAuthorizer class instead. IMA Plugin Changes: * 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 - see Builder.setMimeTypes(List) : void * Setting the ad video load timeout in the AdsRenderingSettings object - see Builder.setLoadVideoTimeout(int) : void * Setting debug mode in the ImaSdkSettings object - see Builder.setDebugMode(boolean) : void Please note: * These convenience methods are member methods in the AdsRenderingSettings and ImaSdkSettings Google IMA SDK objects. * When called through the Builder directly, these methods will configure the AdsRenderingSettings and ImaSdkSettings objects that are created by default in the Builder. * If you decide to create custom AdsRenderingSettings and ImaSdkSettings 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 SSAI Plugin Changes * Added support for Live SSAI streams that are created as remote Video objects. Version 6.16.0 Cast Plugin Changes: * 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. Version 6.15.1 SDK Changes: * The Brightcove Native SDK for Android now supports Arabic (RTL) language in player controls and UI labels * Fixed an issue where certain video_view and video_engagement event parameters would include non-Western Arabic numerals for the following parameters: * video_view: start_time_ms load_time_ms * video_engagement: range video_seconds_viewed Cast Plugin Changes: * 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. Offline Playback Plugin Changes: * The Offline Playback plugin now supports Arabic (RTL) text in UI labels Pulse Plugin Changes: * The Pulse plugin now supports Arabic (RTL) text in Ad controls and UI labels SSAI Plugin Changes: * The SSAI plugin now supports Arabic (RTL) text in Ad controls and UI labels Version 6.15.0 SDK Changes: * Implemented additional null checking for caption URIs. IMA Plugin Changes: * 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 removed. For 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 the BrightcoveVideoView by default. You may provide an AdDisplayContainerFactory to the GoogleIMAComponent.Builder to provide your own AdDisplayContainer. * 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 calling GoogleIMAVideoAdPlayer.pauseAd and GoogleIMAVideoAdPlayer.resumeAd, respectively. For more information, please visit the Brightcove Android SDK Overview in the Brightcove Support site. VMAP Plugin changes: * 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. OnceUx Plugin Changes: * The deprecated OnceUx plugin has been removed from the Brightcove Native SDK for Android. Please use the SSAI plugin instead. Version 6.14.1 SSAI Plugin Changes: * Fixes an issue where the CustomClick element would fail to parse. * Fixes an issue in parsing the VAST Extension element. Version 6.14.0 SDK Changes: * 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. IMA Plugin Changes: * ExoPlayer is now used for Ad playback instead of MediaPlayer. Version 6.13.3 SDK Changes: * Improved rendering of ruby text in sidecar closed captions. A similar improvement for in-manifest captions is forthcoming. Cast Plugin Changes: * Fixed a problem where the the activity was not released as expected when the Chromecast plugin is used. IMA Plugin Changes: * Added support for Audience Segment (Ad) Targeting, whereby key/value pairs are added to the ad tag URL's cust_params parameter. SSAI Plugin Changes: * 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 Version 6.13.2 Offline Playback Changes: * 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. Thumbnail Plugin Changes: * Fixed an alignment issue between the scrubber and the thumbnail preview on Android TV. Version 6.13.1 SDK Changes: * 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. Pulse Plugin Changes: * Added seek without ads support when setting adsDisabled on VideoPlaybackController. * Added support to play Pulse passback ads. * Added a message to indicate when the user is in a Pause Ad. Thumbnail Plugin Changes: * Increased size of the thumbnail image shown in tablets. * Increased speed of thumbnail dragging on Android TV. SSAI Plugin Changes: * Fixed an issue where the Closed Captions might be out of sync with the Video. Version 6.13.0 Thumbnail Plugin Changes: * With this release, the Brightcove Native SDK for Android implements the Thumbnail Plugin to support Thumbnail-based Seeking. For more information on this new plugin, please visit the Brightcove Android SDK Overview in the Brightcove Support site. Pulse Plugin Changes: * Added support for Android TV. * Allow cross-protocol Redirects for Ad Playback. * Fix issue where the error event was not being tracked. Version 6.12.0: SDK Changes: * Deprecated BrightcoveSurfaceView.isVideo360Supported(). Based on current supported versions, it always returns true. Pulse Plugin: * With this release, the Brightcove Native SDK for Android implements the Pulse Advertising Plugin. Please note that this plugin is in Limited Availability. Contact your Account Manager for more information. Version 6.11.0: SDK Changes: * Added support for the Brightcove Playback Rights Management Service. Please note that this new feature is in Limited Availability. * The Video object now has a status code, which can be either Status.OK or Status.ERROR. You may retrieve the status through Video.getStatus():Status. - Status.OK: The Video has all the expected properties and does not have Video.Fields.ERRORS in it. - Status.ERROR: The video has Video.Fields.ERRORS in its properties in the form of List. * [Breaking Change] The Playlist object is now immutable. * The Playlist object can now contain a mix of videos with status Status.OK and Status.ERROR. - Playlist.getErrorVideos(): This new method will return only videos with status Status.ERROR. - Playlist.getAllVideosAndErrors(): This new method will return all videos with both status, Status.OK and Status.ERROR, following the same order as returned from the Playback Rights Management Service response. - Note: Playlist.getVideos() and Playlist.getCount() behave the same way as previous versions, that is, they consider only the videos with status Status.OK. * Added ErrorListener.onError(List) callback. * Deprecated ErrorListener.onError(String) callback. VMAP Plugin: * The VMAP plugin has been deprecated. For client-side advertising with VMAP and VAST documents, please use the IMA plugin. Version 6.10.1: ExoPlayer Changes: * Fixed a crash when attempting to play an HLS Live stream. Offline Playback Changes: * Fixed an issue where some VTT closed captions files would not download successfully. Cast Plugin: * Added new CastMediaUtil.toMediaInfo methods without the unnecessary Android Context parameter. * Deprecated CastMediaUtil.toMediaInfo methods with the unnecessary Android Context parameter. Version 6.10.0: SDK Changes: * [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 in BrightcoveCaptionStyle 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 Changes: * 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. IMA Plugin Changes: * Adds support for live content with pre-roll client-side ads. SSAI Plugin Changes: * 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. Version 6.9.0: SDK Changes: * 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 ID * HttpRequestConfig.KEY_AD_CONFIG_ID: Used to add an SSAI Ad Config ID ExoPlayer v1 Changes: * All support for ExoPlayer 1.x has been removed from The Brightcove Native SDK for Android. Please make sure to use ExoPlayer v2. For more information about the migration process, please visit https://support.brightcove.com/migrating-exoplayer-2-framework SSAI Plugin Changes: * 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 and EventType.AD_PROGRESS, now contains the absolute playhead position, which is the same playhead position given by the underlying player. Please use Event.PROGRESS_BAR_PLAYHEAD_POSITION instead to get the relative playhead position. * The Event.PROGRESS_BAR_PLAYHEAD_POSITION property was introduced for both EventType.PROGRESS and EventType.AD_PROGRESS events which contains the relative playhead position (as Event.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. Version 6.8.1: ExoPlayer2 Changes: * ExoPlayer2 has been downgraded to version 2.9.3 due to an issue with HLS Multiple Audio Tracks in version 2.9.6. Offline Playback Changes: * 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