Brightcove Native Player for Android Release Notes:

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<FrameworkMediaCrypto>. 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<String, String> of key/value pairs using the setProperties(Map<String, String>) 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<String>) : 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<String>) : 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<CatalogError>.
      * [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<CatalogError>) 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<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.

  FreeWheel Plugin Changes:

      * Adds support for live content with pre-roll client-side ads.

  SSAI Plugin Changes:

      * Fixes an issue where a content source could be loaded directly from the src attribute in the Playback API response, instead of from the contenturi attribute in the VMAP.

Version 6.8.0:

  SDK Changes:

      * 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 Changes:

      * 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

  FreeWheel Plugin Changes:

      * 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).

  IMA Plugin Changes:

      * 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 at https://support.brightcove.com for more information
      * Fixed an issue where midroll ads called after long periods of content playback would not play.

  SSAI Plugin Changes:

      * The SSAI Plugin now supports content delivery through the Brightcove Playback Authorization Service (PAS). Please refer to the Brightcove Android SDK documentation at https://support.brightcove.com for more information on using PAS with the SSAI Plugin.
      * Please note that PAS works only with the SSAI Plugin. PAS with the deprecated OnceUx Plugin is not supported.

Version 6.7.0:

  SSAI Plugin:

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

  OnceUx Plugin Changes:

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

Version 6.6.0:

  SDK Changes:

      * 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

  Brightcove Native SDK for Android support for the Brightcove Playback Authorization Service (PAS)

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

Version 6.5.1:

  OnceUx Plugin Changes:

      * Fixed an issue where the IFrameResource element was being incorrectly parsed from VMAP sources.

Version 6.5.0:

  SDK Changes:

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

  OnceUx Plugin Changes:

      * Fixed an issue where duplicate caption menu items would appear.

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

Version 6.4.0:

  SDK Changes:

      * 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 6.3.2:

  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:

  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:

  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:

  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:

  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:

  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:

  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:

  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:

  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:

  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:

  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:

  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

Version 6.0.0-Beta4:

  ExoPlayer Changes:

    * Added the following features for the Brightcove Native SDK for Android when using ExoPlayer 2:
      ** Support for Offline Playback.
      ** Support for Video 360 playback.
      ** Support for Android TV and Fire TV.
    * Added basic support for EIA-608 captions.
    * Minor bug fixes.

  SDK Changes:

    * Added support to emit SEEKBAR_DRAGGING_START, SEEKBAR_DRAGGING_PROGRESS and SEEKBAR_DRAGGING_STOP evens when dragging the Brightcove seek bar.

  FreeWheel Plugin changes:

    * Added AD_PROGRESS, AD_PAUSED and AD_RESUMED events.

Version 6.0.0-Beta3:

  ExoPlayer Changes:

    * Added the following features for the Brightcove Native SDK for Android when using ExoPlayer 2:
      ** Support for HLS Live and HLS Live DVR.

Version 6.0.0-Beta2:

  ExoPlayer Changes:

    * Added the following features for the Brightcove Native SDK for Android when using ExoPlayer 2:
      ** Support for Widevine Modular protected content playback.
      ** Support for Brightcove Dynamic Delivery with Server Side Ad Insertion.
    * Exposed the BrightcoveDrmSession through ExoPlayerVideoDisplayComponent.

Version 6.0.0-Beta1:

  ExoPlayer Changes:

    * This release of the Brightcove Native Player SDK for Android includes BETA support for ExoPlayer v2.5.3. See the com.brightcove.player.view.BrightcoveExoPlayerVideoView javadoc and our github sample app repo for more info.
    * Supported features of Brightcove Native SDK for Android, Beta 1, when using ExoPlayer 2:
      ** VOD Video formats: Mpeg-DASH, HLS, HLSe, MP4
      ** Web-VTT Closed Captions
      ** Multiple Audio Tracks
      ** Client-side advertising with Google IMA and FreeWheel

Version 5.2.0:

  SDK changes:

    * Offline Playback: Added support for downloading DASH Clear (non-DRM) content and viewing it without an internet connection.

  FreeWheel Plugin changes:

    * The FreeWheel plugin has been updated to support FreeWheel AdManager v6.17.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.17.0 for more information on the changes in that version.

Version 5.1.0:

  SDK changes:

    * The edge Catalog now accepts query parameters as a Map object which are included in the Playback API request.
    * Added Analytics.getSessionKey() static method, which can be used to access the application session identifier.

  OnceUx Plugin changes:

    * Added support for Brightcove Dynamic Delivery with Server Side Ad Insertion.

Version 5.0.7:

  SDK changes:

    * The Brightcove Native SDK for Android now supports Android 8.0 (Oreo).

  Brightcove ExoPlayer changes:

    * Fixed an issue where an IllegalStateException would cause a crash when starting a video download.

Version 5.0.6:

  SDK changes:

    * Fixed a timing issue where captions/gear icon was not appearing correctly on Android TV.
    * Fixed issue with download status notifications affecting certain devices like Pixel C.
    * Fixed multiple strict mode warnings that may appear when downloading videos
    * General improvements in updating download status notifications from the file downloader service.
    * General improvements when queueing multiple videos for download.

  Brightcove ExoPlayer changes:

    * Added a new field to the Video.Fields object. The WIDEVINE_HEADERS field is used when sending custom headers for Widevine license acquisition.

Version 5.0.5:

  SDK changes:

    * Fixed issue where getLiveEdge() was not updating if the playback head was out of live.

  IMA Plugin changes:

    * The IMA Plugin now supports v3.7.4 of the Google IMA SDK for Android. 
    * Fixed issue where an Ad would break after skipping an earlier Ad.
    * Fixed issue where the Ad timer will freeze after pausing and resuming the player.

Version 5.0.4:

  SDK Changes:

    * Fixed issues with resuming downloads when the device wakes from sleep.
    * Fixed issues with resuming downloads when the device recovers from a network interruption.

Version 5.0.3:

  SDK New Features:

    * Offline Playback: Added support for the following:
        Multiple Audio Tracks
        VTT Captions
        Rendition Selection

        Please also note that Offline Playback is currently supported only with Video Cloud Dynamic Delivery and DRM.

Version 5.0.0 (BETA):

  SDK changes:

    * Offline Playback: Added support for downloading DASH Widevine content and viewing it without an internet connection.

Version 4.13.7:

  SDK changes:

    * Fixed an issue in Live DVR where seeking into the DVR window caused the scrubber to advance back to the Live edge.

Version 4.13.6:

  SDK changes:

    * Improved Analytics to detect and report tablet devices reliably without using Telephony service.

Version 4.13.5:

  SDK changes:

    * Added support to use density-independent pixels for caption edge types.

  Brightcove ExoPlayer changes:

    * Added support to pull custom headers from the video properties for Widevine license acquisition.

Version 4.13.4:

  SDK changes:

    * Added support to configure the PROGRESS event heartbeat. The default heartbeat value for this event is 500ms, unchanged from previous SDK behavior.
    * Added support for customization of caption margins.
    * Fixed an issue in the PROGRESS event where in rare circumstances the event heartbeat frequency could be significantly reduced from its default value of 500ms.

    Please note that version 4.13.3 is identical to 4.13.4.

Version 4.13.2:

  SDK changes:

    * Added support to display captions with overlapping timecodes.
    * Fixed issue with analytics where device type will be reported as TV on relevant devices.

  Brightcove ExoPlayer changes:

    * Added the ability for a developer to modify the buffer size of a video, by setting the segment size and segment count in the ExoPlayerVideoDisplayComponent through the RendererConfig object.

Version 4.13.1:

  SDK changes:

    * Added the ability for developer to enable or disable a restriction to play protected HD content only to devices with Widevine security level 1.

  Brightcove ExoPlayer changes:

    * Added support for DASH manifests with multiple audio tracks.
    * Fixed an issue where the audio button in the Brightcove media controller was shown even when there was only one audio track.
    * Fixed an issue where the audio track playing was different than the audio selected in the audio menu for certain HLS videos.

  Freewheel Plugin changes:

    * Fixed an issue where a video will not replay after it finishes playing.

Version 4.13.0:

  SDK changes:

    * Support for Video 360 playback.
    * Fixed an issue where inline VTT caption styling could break caption background rendering.

  Brightcove ExoPlayer changes:

    * Added support for VideoCloud HLS and DASH videos with sidecar and in-manifest closed captions.

  IMA Plugin changes:

    * Fix to avoid stalled playback when IMA returns multiple empty ads.

Version 4.12.2:

  SDK changes:

    * Fixed a closed captions rendering issue when using the "outline" edge setting that caused the outline to be displayed on a single for multiple lines of caption text.
    * Fixed a closed captions rendering issue with the caption window settings, where changes to those settings were not being displayed in the player.
    * Fixed a DRM provisioning issue with Amazon FireTV and FireTV Stick that could occur when those devices were reset to factory settings.

  Brightcove ExoPlayer changes:

    * The Brightcove ExoPlayer has been updated to 1.5.13
    * Fixed a rounding error in DASH segment calculations that could result in a request for an additional, non-existent segment.

Version 4.12.1:

  SDK changes:

    * Added the ability for developers to control the HTTP read and connect timeout values in the ExoPlayerVideoDisplayComponent.
    * Added the ability for developers to specify an option via BrightcoveClosedCaptioningView.setKeepCaptionsWithinVideoBounds(boolean) to override the default (true) behaviour and display captions outside the bounds.
    * Fixed a closed captions rendering issue when using the "outline" edge setting that caused the opacity setting to be ignored.

Version 4.12.0:

  SDK changes:

    * The following classes in the com.brightcove.player.media package have been deprecated:
    * Catalog
    * ErrorListener
    * PlaylistListener
    * VideoListener
    These classes are still fully functional in version 4.12.0 of the Brightcove Native SDK for Android.

Version 4.11.1:

  SDK changes:

    * Improved data accuracy for analytic events.

  IMA Plugin changes:

    * Added a new constructor to the GoogleIMAComponent class to support
    passing in an instance of AdsRenderingSettings.

  VMAP Plugin changes:

    * Improved handling of VMAP response with empty ads.

Version 4.11.0:

  SDK changes:

    * Support for Fire TV.
    * Added support for captions when MediaController is not available.
    * Minor bug fixes.

  Brightcove ExoPlayer changes:

    * The Brightcove ExoPlayer has been updated to 1.5.11.

  FreeWheel Plugin changes:

    * Added support for skipCurrentAd and skipCurrentAdBreak.
      Note: FreeWheel AdManager library 6.10.0 is required in order to use these methods.

Version 4.10.0:

  SDK changes:

    * Support for Android TV.
    * Seek without ads by setting adsDisabled on VideoPlaybackController.
      is now supported for FreeWheel plugin.

  FreeWheel Plugin changes:

      * Upgraded FreeWheel AdManager library to 6.10.0.


Version 4.9.2:

  SDK changes:

    * Minor bug fixes.


Version 4.9.1:

  Omniture Plugin changes:

    * Updated plugin to use Adobe Mobile Library version  4.11.0.
    * Updated plugin to use Heartbeat library version 2.0.0. Note that this library version is REQUIRED in order to use Heartbeat with the plugin.


Version 4.9.0:

  SDK changes:

    * Fixed issue where content video may not render or stalls for a few seconds after resuming from an Ad.

  Brightcove ExoPlayer changes:

    * The Brightcove ExoPlayer has been updated to 1.5.9
    * The source code can now be found in https://github.com/brightcove/ExoPlayer

Version 4.8.3:

  SDK changes:

    * Added an adsDisabled property to the VideoPlaybackController that allows you
      to disable ad playback only when you're seeking through the video.
      Note: This feature currently works only with the Brightcove OnceUX and Google IMA plugins.
    * Added support for HLS when containing multiple rendition groups specified by GROUP-ID
    * Fixed issue with the seek bar on OnceUX plugin that caused the position to jump forward and backward temporarily.

  Brightcove ExoPlayer changes:

    * Updated to ExoPlayer version 1.5.7.2.

Version 4.8.2:

  SDK changes:

    * Added Playback API support for detecting the Widevine license URL in the Playback API response.

Version 4.8.1:

  SDK changes:

    * Added edge support for ignoring HLS FairPlay streams.
    * Added Playback API support for the "economics" field.

  Brightcove ExoPlayer changes:

    * Updated to ExoPlayer version 1.5.7.1.

Version 4.8.0:

  SDK changes:

    * Removed deprecations prior to 4.7.0.

    * Improved geo-restriction support.

  Brightcove ExoPlayer changes:

    * Updated to ExoPlayer version 1.5.6.2.

    * Added HLS multiple audio stream support.

    * Added HLS in-manifest webvtt support.

    * Added support for setting an adaptive peak bitrate.  See
      ExoPlayerVideoDisplayComponent.setPeakBitrate().

    * Fixed issue with missing VIDEO_DURATION_CHANGED event with mp4
      content.

  Cast Plugin changes:

    * Removed deprecations prior to 4.7.0.

  Freewheel Plugin changes:

    * Upgraded FreeWheel AdManager library to 6.5.0.

  IMA Plugin changes:

    * Removed deprecations prior to 4.7.0.

  OnceUx Plugin changes:

    * Added support for VMAP 1.0.1.

    * Removed deprecations prior to 4.7.0.

  VMAP Plugin changes:

    * Removed deprecations prior to 4.7.0.

Version 4.7.3:

  SDK changes:

    * Added AD_BREAK_STARTED and AD_BREAK_COMPLETED events.

    * Added brightcove_align to the BrightcoveControlBar style to
      disable aligning the media controls with the bottom of the video
      view.  Also, see BrightcoveControlBar.setAlign().

    * Added support for aligning the media controls with the bottom of
      the video still image.

    * Fixed an issue with cue points at point in time of zero not
      being emitted when seeking back to zero.

    * Added support for filtering out HbbTV and DVB DASH sources from
      Video Cloud.

    * Fixed an issue where the video name was not sent to Brightcove
      Analaytics.

  IMA Plugin changes:

    * Fixed issue where midrolls would not play properly with IMA SDK
      v3-3.1.3.

  OnceUx Plugin changes:

    * Fixed some cosmetic issues.

Version 4.7.2:

  SDK changes:

    * Added BaseVideoView.finishInitialization(), which should be used
      when trying to create a video view programatically.

    * Fixed issue with BaseVideoView.setSubtitleLocale(), where the captions
      for the locale were not getting loaded on Kitkat and above.

    * Added BaseVideoView.setClosedCaptioningEnabled(), which should
      be used to programmatically enable closed captions.

    * Modified BrightcoveSeekBarController to update the position upon
      SEEK_TO events.

  Brightcove ExoPlayer changes:

    * Improved seeking after resuming from the background when paused.

    * Modified to only create a default CookieManager if one doesn't
      exist already.

Version 4.7.1:

  SDK changes:

    * Fixed HLS and Widevine Classic issue with BrightcoveVideoVideo's
      setCurrentIndex() where subsequent videos would start playback
      where the previous video left off.

    * Ensured that on either a SET_CUE_POINT or SET_CUE_POINTS event
      that mid-roll ad markers are set on the seek bar
      accordingly. This change has impact on the IMA, FreeWheel, and
      VMAP plugins.

  IMA Plugin changes:

    * Fixed an issue with loading ads with playlists.

  VMAP Plugin changes:

    * Fixed an issue with loading ads with playlists.

  OnceUx Plugin changes:

    * Ensured that mid-roll ad markers are placed on the seek bar appropriately.

Version 4.7.0:

  SDK changes:

    * Removed the apklib and legacy jars from the release zip
      distribution.  aar files should be used instead.

    * Added device, hardware, manufacturer, model, and product to
      Analytics data.

  Brightcove ExoPlayer changes:

    * Fixed a DASH, including Widevine Modular, issue where an okio
      IllegalStateException was being thrown.  This issue was a
      regression caused by the header support added in 4.6.5.

  HLS Player changes:

    * This player is no longer included in the release zip
      distribution and no longer uploaded to the public maven repo.

Version 4.6.6:

  SDK changes:

    * Modified Analytics's UniqueIdentifierEnabled property to be true
      by default.

    * Fixed issue when using Video Cloud's captioning field.

  Brightcove ExoPlayer changes:

    * Updated to ExoPlayer 1.5.3.1.

    * Modified ExoPlayerVideoDisplayComponent to set a CookieManager
      for DASH, in addition to HLS.

    * Fixed the PROGRESS and VIDEO_DURATION_CHANGED's MAX_POSITION
      property and added a MIN_POSITION property for live streams.

    * Fixed issue where non-live HLS streams were reporting -1 for the
      duration in VIDEO_DURATION_CHANGED events.

  OnceUx Plugin changes:

    * Fixed ArrayIndexOutOfBoundsException caused by ExoPlayer
      reporting a playheadPosition beyond the OnceUX timeline length.

    * Fixed NullPointerException caused by replay of an OnceUX stream
      with no ads.

Version 4.6.5:

  SDK changes:

    * Added findPlaylistByID() and findPlaylistByReferenceID() to the
      edge Catalog.

    * Fixed issue with captions being displayed in the wrong location
      for roughly a second after the BaseVideoView changes size.

    * Added edge Catalog support for text_tracks.

  Brightcove ExoPlayer changes:

    * Added headers support for MP4, and DASH and HLS chunk requests.

    * Added initial support for HLS Live/DVR.

  IMA Plugin changes:

    * Updated to work with IMA SDK v3-3.b13.3.

  VMAP Plugin changes:

    * Fixed NullPointerException caused by hitting the back button
      during ad playback.

Version 4.6.4:

  SDK changes:

    * Updated the targetSdkVersion to 23.

    * Fixed resuming from the background issue introduced by 4.6.3.

    * Added ability to style the BrightcoveControlBar via a theme.

    * Added brightcove_seekbar, which allows disabling the seek bar,
      to BrightcoveControlBar style.

    * Modified Video to use DeliveryType.DASH for URLs with a path
      ending in .mpd.

    * Fixed an issue with the control bar position after resuming from
      the background.

    * Added CAPTIONS_LANGUAGES event, which contains a LANGUAGES property.

  Brightcove ExoPlayer changes:

    * Fixed captions issue on older Android versions, like 4.1.2.

  OnceUx Plugin changes:

    * Fixed replay issue.

Version 4.6.3:

  SDK changes:

    * Fixed issue with starting a subsequent video in a playlist
      before the WILL_CHANGE_VIDEO event had been processing.

  Brightcove ExoPlayer changes:

    * Updated to ExoPlayer version 1.5.2.1.

    * Fixed issue where resuming after an advertisement would restart
      the video.

    * Fixed HLSe issue where attributes following the
      #EXT-X-KEY:METHOD URI were parsed incorrectly.

  FreeWheel Plugin changes:

    * Modified FreeWheelController to wait until a duration is
      available before emitting the WILL_SUBMIT_AD_REQUEST event.

  VMAP Plugin changes:

    * Fixed duplicate AD_STARTED events.

Version 4.6.2:

  SDK changes:

    * Fixed issue with the BrightcoveControlBar being displayed in the
      wrong location for roughly a second after the BaseVideoView
      changes size.

  Brightcove ExoPlayer changes:

    * Fixed Id3MetadataListener.

Version 4.6.1:

  SDK changes:

    * Fixed issue with resuming when using a *TextureVideoView.

    * Fixed issue introduced by the generic ad events in 4.6.0 where
      AD_PROGRESS events would cause playback to resume at the wrong
      position after midrolls.

Version 4.6.0:

  SDK changes:

    * Enhancements to EventLogger; ability to specify alternate logging
      locations, ability to whitelist specific events. See documentation
      for more details.

    * Added AD_ID and AD_TITLE to Event.

    * Added AD_STARTED, AD_PAUSED, AD_RESUMED, AD_COMPLETED, and
      AD_ERROR to EventType.

    * Added LifecycleUtil to consolidate lifecycle management code
      shared by BrightcovePlayer, BrightcovePlayerFragement and the
      new AppCompat plugin.

    * Fixed load_time_ms Analytics issue caused by playing videos not
      found in the Catalog.

    * Added Event.SUPPORT_FRAGMENT for the FRAGMENT_ACTIVITY_CREATED
      event's property when using an support Fragment.

    * Modified BrightcovePlayer.onCreate() to no longer require
      subclasses to call setContentView() and set brightcoveVideoView
      before calling super.onCreate().

  AppCompat plugin changes:

    * Initial release, includes BrightcovePlayerActivity and
      BrightcovePlayerFragment.

  Brightcove ExoPlayer changes:

    * Fixed NPE caused by clearing the playlist.

  Cast Plugin changes:

    * Updated to use CastCompanionLibrary-anndroid 2.5.1.

    * Added GoogleCastComponent.initializeVideoCastManager(), which
      must be called before inflating the MiniController.

  FreeWheel Plugin changes:

    * Added support for new advertising EventTypes.

  IMA Plugin changes:

    * Added support for new advertising EventTypes.

Version 4.5.2:

  SDK changes:

    * Fixed issue where in app closed captioning settings changes were
      overridden by the OS level closed captioning settings.

  Brightcove ExoPlayer changes:

    * Added minBufferMs and minRebufferMs settings to
      ExoPlayerVideoDisplayComponent.

    * Changed 608 captions label to "cc1".

Version 4.5.1:

  SDK changes:

    * Added isHlsRecommended() to BaseVideoView and overrides to many
      of it's subclasses.

    * Added support for CAPTION event.

  Brightcove ExoPlayer changes:

    * Fixed issue where DID_SEEK_TO was emitted before the seek was
      completed.

    * Added basic 608/708 closed captions support.

    * Added bandwidth meter logging.

    * Added ability to set a custom BandwidthMeter on
      ExoPlayerVideoDisplayComponent.

    * Added ability to customize the minimum buffer size before a
      higher rendition is selected and the maxium buffer size before a
      lower rendition is selected.  See setMinBufferDurationToSwitchUp()
      and setMaxBufferDurationToSwitchDown() in
      ExoPlayerVideoDisplayComponent.

  OnceUx Plugin changes:

    * Improved support for using the OnceUx plugin with the
      BrightcoveExoPlayerVideoView, which is now the recommended
      VideoView for OnceUx content.

  FreeWheel Plugin changes:

    * Fixed issue where the end of a display ad was causing another ad
      to play before it was suppose to play.

Version 4.5.0:

  SDK changes:

    * Added new QOS support.

    * Fixed ArrayIndexOutOfBoundsException in MediaService when a
      legacy Media API response had a "captions" custom field without
      a locale appended.  The value of this field is now assumed to be
      English.

    * Added support for disabling the Play button.

  Brightcove ExoPlayer changes:

    * Fixed issue with playlists not advancing.

Version 4.4.2:

  SDK changes:

    * Changed the names of several strings and attrs to include a
      "brightcove" prefix to prevent conflicts with other libraries.

    * Added getMeasuredVideoWidth() and getMeasuredVideoHeight() to
      classes extending BaseVideoView.  These APIs return the actual
      rendered height and width of the video from the RenderView.

    * Fixed placement of Closed Captions.  Previously, there was a 10%
      buffer below the caption window, it has been fixed to reflect
      the FCC guidelines of 5%.

    * Fixed an issue with the captions extending outside the bounds of
      the video, when the VideoView was larger than the video itself.

    * Fixed a bug in BrightcoveMediaController where SHOW_MEDIA_CONTROLS
      was being ignored.

    * Fixed a bug in BrightcoveMediaController where repeated tapping on
      a control or dragging the seekbar would not extend the hide timeout.

    * Fixed placement of the BrightcoveMediaController.  The
      controller will now align itself to the bottom of the video, not
      the VideoView.

    * Added a new abstract EventListener class, BackgroundEventListener.
      All classes extending this class will receive event notifications
      on a background thread.  See javadoc for more information.

    * Added support for resuming playback after dismissing the
      captions settings dialog if playing before hand.

    * Added SEGMENT_DURATION property, when available, to PROGRESS
      events.

  Brightcove ExoPlayer changes:

    * Added BrightcoveExoPlayerTextureVideoView to support using a
      TextureView with ExoPlayer.

Version 4.4.1:

  SDK changes:

    * Added the ability to disable buttons in the Brightcove media
      controller.  As a result, the control bar layout must use
      BrightcoveControlBar instead of LinearLayout now.  See
      res/layout/default_media_controller.xml for an example.

    * Added setShowHideAnimationStyle() and setShowHideTimeout() to
      BrightcoveMediaController.

    * Fixed issue with BaseVideoView.setMediaController(null), where
      the default controls would be visible for a short time.

    * Added setShouldImportSystemSettings() to
      BrightcoveClosedCaptioningController.

    * Added support for resuming playback after dismissing the
      captions dialog if playing before hand.

Version 4.4.0:

  SDK changes:

    * The Brightcove Player Controls are now GA and the new default controls.

    * Fixed NullPointerException when extending appcompat's
      AppCompatActivity and calling super.onCreate() before
      setContentView().

    * Fixed issue where the Brightcove Player Controls buttons were
      missing when using ThemeOverlay.AppCompat.Dark.ActionBar.

    * Modified VideoStillDisplayComponent to hide the video still upon
      the first PROGRESS event instead of DID_PLAY to prevent
      obscuring some of the video.

  Brightcove ExoPlayer changes:

    * The Brightcove ExoPlayer is now GA.

    * Support for Video Cloud transcoded Widevine Modular videos has been added.

  HLS Player changes:

    * Updated VisualOn libraries to version 3.15.0.

    * Fixed resume from background issue.

  HLS API3 Player changes:

    * Updated VisualOn libraries to version 3.15.0.

    * Fixed resume from background issue.

Version 4.3.9:

  SDK changes:

    * Bumped up the Analytics connect and read timeouts from 60ms to
      60sec.

    * Modified the DID_SHOW_CONTROLS event to include a
      CONTROLS_HEIGHT property.

    Closed Captioning changes:

      * The BrightcoveClosedCaptioningOptionsDialog class has been replaced with the
        BrightcoveCaptionPropertiesFragment and BrightcoveCaptionPropertiesActivity classes.

      * The BrightcoveClosedCaptioningStyle class has been replaced with the BrightcoveCaptionStyle
        class.

      * Refactored addSubtitleSource() to allow for setting of captions data within an application
        for both pre and post Android 4.4 KitKat.

      * Added a BrightcoveCaptionsFormat class for holding caption metadata to be passed into the
        refactored addSubtitleSource() method.

      * Consolidated all stored caption data into the CAPTION_SOURCES Video Field, which contains a
        List<Pair<Uri, BrightcoveCaptionFormat>>.

      * Added support for storing and switching of multiple caption locales.

      * Added new constants class, CaptionConstants, that maintains preference keys and default values
        for SharedPreferences storing of caption styling data.

      * Overhauled implementations for captions styling and storage in the BrightcoveClosedCaptioningManager,
        BrightcoveClosedCaptioningTextView and the BrightcoveClosedCaptioningController.

  Brightcove ExoPlayer changes:

    * Updated to the ExoPlayer r1.3.3 release.

    * Added support for the BUFFERED_UPDATE event.

  IMA Plugin changes:

    * Upgraded from Google IMA Android SDK v3beta9 to v3beta11.

  HLS Player changes:

    * Added support for VIDEO_DURATION_CHANGED events while paused.

  HLS API3 Player changes:

    * Added support for VIDEO_DURATION_CHANGED events while paused.

Version 4.3.8:

  SDK changes:

    * Fixed resume from background issue where playback was not
      automatically being resumed.

    * Modified DID_PLAY event to be emitted before the first PROGRESS event.

    * Improved handling of non-fatal MediaPlayer errors:

      http://stackoverflow.com/questions/23364930/android-media-player-errors-and-hls

  OnceUx Plugin changes:

    * Improved support for resuming after an app has been destroyed.

Version 4.3.7:

  HLS Player changes:

    * Fixed audio issue with the Nexus 9.

    * Fixed ANR intermittently caused by pausing during prebuffering.

  HLS API3 Player changes:

    * Fixed audio issue with the Nexus 9.

    * Fixed ANR intermittently caused by pausing during prebuffering.

Version 4.3.6:

  SDK changes:

    * Added beta support for the new Brightcove Player Controls.  See
      the com.brightcove.player.mediacontroller.BrightcoveMediaController
      javadoc and our github sample app repo for more info.

    * Renamed DID_LOAD_CAPTIONS event to DID_LOAD_CLOSED_CAPTIONS to
      improve event name consistency.

    * Fixed some caption font size issues.

    * Fixed issue when a seek starts before the surface is destroyed,
      but finishes afterwards.

    * Fixed issue with playlists, which contain MP3 and HLS content.

  Brightcove ExoPlayer changes:

    * Added beta support for the Brightcove ExoPlayer integration.
      See the com.brightcove.player.view.BrightcoveExoPlayerVideoView
      javadoc and our github sample app repo for more info.

  HLS Player changes:

    * Made font scale and size for captions consistent throughout the caption renderer.

    * Fixed issue where captions could not be turned off once turned on for devices running below
      version 4.4 (KitKat).

    * Fixed issue where the player would hang upon playback if it had
      been created after the surface had been destroyed.

  HLS API3 Player changes:

    * Fixed issue where the player would hang upon playback if it had
      been created after the surface had been destroyed.

  OnceUx Plugin changes:

    * Changed plugin to be less strict about OnceUX XML responses.

Version 4.3.5:

  SDK changes:

    * Fixed issue with jacoco code coverage being included in the
      artifacts.

    * Added device CPU to Analytics data.

  HLS Player changes:

    * Fixed javadocs issue.

Version 4.3.4:

  SDK changes:

    * Changed the media control's default anchorView to be the *VideoView.

    * Added support for removing the default media controls.  For example:

        brightcoveVideoView.setMediaController((MediaController) null);

  HLS Player changes:

    * Fixed issue with the Surface's size being set incorrectly.

    * Fixed a playlist playback race condition, which sometimes caused
      playback to hang.

    * Improved invalid ID3 tag handling.

    * Added support for setting the initial buffer size, see
      SeamlessVideoDisplayComponent.setBufferInitialSize().

  HLS API3 Player changes:

    * Fixed a playlist playback race condition, which sometimes caused
      playback to hang.

    * Improved invalid ID3 tag handling.

    * Added support for setting the initial buffer size, see
      SeamlessVideoDisplayComponent.setBufferInitialSize().

  OnceUx Plugin changes:

    * Added support for multiple locale closed caption files.

Version 4.3.3:

  SDK changes:

    * Added setOnInfoListener() support.

    * Fixed issue with the BuildConfig class being included in the
      legacy apklib file.

    * Fixed a couple of bugs where styling options for captions from
      the TTML document were not showing up.

    * Changed how caption files are parsed by the LoadCaptionsService().
      Only one asychronous event is fired based on caption format detection
      now.

    * Added support for pulling caption sidecar data from VideoCloud Media API.

    * Updated the edge Catalog's DEFAULT_EDGE_BASE_URL.

  HLS Player changes:

    * Fixed setClosedCaptionsEnabled() issue where if the video was
      already playing, calling this method would pause it.

  HLS API3 Player changes:

    * Fixed setClosedCaptionsEnabled() issue where if the video was
      already playing, calling this method would pause it.

  OnceUx Plugin changes:

    * Fixed issue with ad countdown timer starting negative when
      seeking past an ad.

    * Fixed issue with skip ad button not skipping to the correct
      position with midrolls.

Version 4.3.2:

  SDK changes:

    * Changed Analytics to use https.

  Cast Plugin changes:

    * Modified GoogleCastComponent to add castMediaMetadataVideoId to
      the MediaInfo.  This property should be set via the
      SET_MEDIA_METADATA event and can be used by custom receiver
      apps.

  HLS Player changes:

    * Improved handling when native libraries are unable to be
      loaded.  An error event is emitted.

    * Fixed issue with DID_SEEK_TO, where it was emitted before the
      seek completed.

  HLS API3 Player changes:

    * Improved handling when native libraries are unable to be
      loaded.  An error event is now emitted.

    * Updated VisualOn libraries to version 3.13.17.

    * Removed unnecessary DID_OPEN event.  DID_SET_SOURCE is used instead.

    * Fixed issue with DID_SEEK_TO, where it was emitted before the
      seek completed.

  OnceUx Plugin changes:

    * Fixed an issue with backwards seeking whereby ad controls were not set set correctly.

    * Fixed a regression issue whereby pausing and resuming in an ad segment got broken.

    * Fixed a few issues with Activity backgrounding/foregrounding.

  ExoPlayer changes:

    * Updated to v1.1 of the ExoPlayer library.

    * Fixed a bug where playhead positions between the ExoPlayer library
      and the ANP weren't synchronized.

Version 4.3.1:

  SDK changes:

    * Added AD_PROGRESS event, which can be used by plugins to update
      the default control's playhead position and duration.

    * Removed maxSdkVersion from AndroidManifest.xml.

    * Updated the targetSdkVersion to 21.

    * Added legacy .apklib file for closed caption settings dialog
      resources.

  HLS Player changes:

    * Added support for captioning style options for the SeamlessVideoView
      pre-KitKat via the showClosedCaptioningDialog() method in the
      BrightcovePlayer class.

    * Updated VisualOn libraries to version 3.13.17.

  OnceUx Plugin changes:

    * Modified to emit AD_PROGRESS events during ads instead of
      PROGRESS events.

    * Fixed an issue with resuming a paused video from a content segment.

    * Fixed an issue with seeking backwards.

  IMA Plugin changes:

    * Fixed bug where midrolls were not being played with AdRules.

Version 4.3.0:

  SDK changes:

    * Added TextureView rendering support.  Use
      BrightcoveTextureVideoView instead of BrightcoveVideoView in
      your XML layout file to enable it.

    * Changed MediaService to use https.

    * Changed video still to also be recycled upon ACTIVITY_STOPPED and
      FRAGMENT_STOPPED events.

  HLS Player changes:

    * Fixed problem with in-manifest webvtt captions not rendering.

  HLS API3 Player changes:

    * Beta release, uses version 3.12.20 of the new VisualOn API3.

  IMA Plugin changes:

    * Upgraded from Google IMA Android SDK v3beta8 to v3beta9.

  OnceUx Plugin changes:

    * Added ad skipping support.

  VMAP Plugin changes:

    * Beta release, for use with non-Google VMAP based ad servers.

Version 4.2.8:

  SDK changes:

    * Fixed manifest merge issue when using gradle 1.12 and Android
      Build Tools 0.12 where the SDK application label was causing a
      collision.

    * Added initial support for the new Brightcove CMS API.  See
      com.brightcove.player.edge.Catalog.

    * Fixed Analytics global account ID override to only be used if
      the Video does not have an account ID.

    * Added support for displaying DFXP captions from VideoCloud or via
      the DFXPService.loadDFXP() method.

    * Added beta support for closed caption settings on Android 4.3
      and below. See showClosedCaptioningDialog() and
      hideClosedCaptioningDialog() in BrightcovePlayer.

  HLS Player changes:

    * Added ID3Frames property to ID3TAG event and changed the ID3Data
      property from a String to a byte[].

    * Modified the SeamlessVideoDisplayComponent to support seeking
      before the player has finished preparing.

    * Fixed bug where a video URL with an underscore in it would fail
      to play.

    * Simplified the workflow for Perform accounts by only requiring
      an Analytics global account ID to be specified.  See
      Analytics.setAccount().

  IMA Plugin changes:

    * Fixed issue, where the logcat was getting filled up with
      "V/GoogleIMAVideoAdPlayer﹕ getProgress..." statements, caused
      by an IMA SDK background thread, which was not getting shutdown
      properly during application backgrounding.

Version 4.2.7:

  SDK changes:

    * Added support for fragment lifecycle events and fixed some
      issues with activity lifecycle events.

    * Added Brightcove Analytics global account override.

  HLS Player changes:

    * Fixed bug where playing or seeking without a surface causes a
      SIGSEGV.

  Cast Plugin changes:

    * Added support for activity and fragment lifecycle events.

  IMA Plugin changes:

    * Added support for activity and fragment lifecycle events.

  OnceUx Plugin changes:

    * Added support for fragment lifecycle events.

Version 4.2.6:

  HLS Player changes:

    * Fixed issue with calling seekTo() upon DID_SET_VIDEO and then
      calling start().  The player was incorrectly jumping from the
      seekTo position back to the zero position.

    * Added x86 native libraries.

Version 4.2.5:

  HLS Player changes:

    * Fixed an issue with the initial VIDEO_DURATION_CHANGED event not
      including the correct duration.

Version 4.2.4:

  HLS Player changes:

    * Fixed issue with auto playing MP4 content.

    * Fixed ClassCastException due to enabling closed captions,
      disabling closed captions, and then going to full screen.

Version 4.2.3:

  HLS Player changes:

    * Fixed NullPointerException when inflating a view with only a
      SeamlessVideoView in it.

Version 4.2.2:

  SDK changes:

    * Fixed Analytics issue with live streams by switching from
      range=%d to video_seconds_viewed=%d.

    * Fixed problem with duplicate launcher icons when using the
      onceux plugin.

  HLS Player changes:

    * Fixed rendering on Android 2.3.x.

    * Updated VisualOn libraries to version 3.12.20, which fixes
      problems with the HLS player on Android "L".

Version 4.2.1:

  SDK changes:

    * Added unique tracking support to the Analytics class.  See
      setUniqueIdentifierEnabled().

    * Fixed layout bug caused by orientation changes.

    * Updated analytics by removing the player_load event, because it
      did not really make sense for native android applications.

  HLS Player changes:

    * Fixed issue where seeking from a DID_SET_SOURCE listener would
      start playback.

    * Fixed issue where NullPointerExceptions would happen when a 4.4+
      device did not have a CAPTIONING_SERVICE and closed captioning
      was enabled.

Version 4.2.0:

  OnceUx Plugin changes:

    * Refactor to base the plugin at com.brightcove.onceux to be
      consistent with all other plugins.

  HLS Player changes:

    * Fixed issue when going to full screen with closed captions
      enabled.

Version 4.1.22:

  SDK changes:

    * Modified the VideoDisplayComponent to no longer call
      MediaPlayer.setDisplay(null) when destroying the playing,
      because we've seen this hang on some devices with some content,
      like Widevine.

  FreeWheel Plugin changes:

    * Changed default submissionTimeout from 3 to 30 seconds.

  HLS Player changes:

    * Modified SeamlessVideoDisplayComponent to turn off the video
      stream for the prebuffering player earlier during
      initialization, because it's an asynchronous call and the call
      to start buffering is synchronous.  Previously, under certain
      loads, the asynchronous call could be delayed and a bit of audio
      from the next video could be heard.

Version 4.1.21:

  IMA Plugin changes:

    * Modified the GoogleIMAVideoAdPlayer to listen for SEEK_TO events
      and suppress reporting progress until playback has progressed at
      lesat 1 second.  This prevents all the accumulated midrolls from
      piling up and being played when slowly scrubbing to the end of a
      video.

Version 4.1.20:

  SDK changes:

    * Fixed issue where the Surface is destroyed between the time that
      the MediaPlayer is prepared and start() is called.

  HLS Player changes:

    * Updated the VisualOn libvossl_OSMP library, which includes an
      update to the OpenSSL library from version 0.9.8m to version
      0.9.8za.  The VisualOn 3.11.26 update in version 4.1.17
      unknowingly reverted the previous libvossl_OSMP library update.

    * Modified setClosedCaptionsEnabled() to enable/disable closed
      captioning for the current playing video.

  Widevine Plugin changes:

    * Added uniqueId, type, and message properties to DRM events.

Version 4.1.19:

  IMA Plugin changes:

    * Fixed issue where when starting playback from a non-zero
      position, playback would skip back to that non-zero position
      after the first ad finished.  This was a side effect of the fix
      in 4.1.18.

Version 4.1.18:

  IMA Plugin changes:

    * Fixed hang caused by ad responses without any valid ads when
      using Ad Rules.

Version 4.1.17:

  HLS Player changes:

    * Updated VisualOn libraries to version 3.11.26.

    * Fixed issue with URLs longer than 1024 characters.

Version 4.1.16:

  HLS Player changes:

    * Fixed issue with missing native libraries in the legacy .apklib file.

  OnceUx Plugin changes:

    * Implemented companion ad click throughs.

    * Reworked companion ad tracking beacons to only be sent when a companion ad is actually being shown.

Version 4.1.15:

  SDK changes:

    * Removed recently added MediaPlayer.reset() call from
      VideoDisplayComponent's destroyPlayer(), because it causes ANR
      hangs with some devices and some content.

  IMA Plugin changes:

    * Fixed issue where the onResume() callback was called instead
      onPlay() when ads began playback.

  OnceUx Plugin changes:

    * Deprecated the two URI processVideo() method in favor of a
      single URI interface.

    * Added initial support for companion ads.

  HLS Player changes:

    * Updated the VisualOn libvossl_OSMP library, which includes an
      update to the OpenSSL library from version 0.9.8m to version
      0.9.8za.

    * The .aar file now has the .so files in the jni/armeabi folder
      instead of in the armeabi.jar, which was a workaround and
      support for the workaroudn was recently removed from the Android
      Gradle Build Tools.

    * Updated to emit DID_INTERRUPT_CONTENT and DID_RESUME_CONTENT.

Version 4.1.14:

  SDK changes:

    * Added VERSION event.

    * Updated analytics with "destination" fix and the addition of
      "source", "platform" and "platform_version" parameters.

    * Fixed OutOfMemoryException caused by large video still images.

  IMA Plugin changes:

    * Removed the need to call initializeAdsRequests() when using Ad
      Rules.

    * Fixed Ad Rules midroll regression caused by 4.1.13.

  FreeWheel Plugin changes:

    * Modified AD_START and AD_COMPLETE events to include CUSTOM_ID
      and SLOT properties.

  Omniture Plugin changes:

    * Updated plugin to use 4.x of the Adobe Mobile Library.

    * Added Video Heartbeat support.

Version 4.1.13:

  SDK changes:

    * Updated analytics by adding player_load event, removed some
      parameters, which are longer used parameters, and fixed issue
      with requests being sent out of order.

    * Added two new events, DID_INTERRUPT_CONTENT and
      DID_RESUME_CONTENT.  These are emitted when the default
      WILL_INTERRUPT_CONTENT and WILL_RESUME_CONTENT event listeners
      complete.

    * Added getEventLogger() to the BrightcovePlayer class.

  IMA Plugin changes:

    * Fixed issue with extra PAUSE and RESUME tracking events at the
      beginning of each ad break.

    * Fixed issue with video auto playing when the Ad Rules URL failed
      to load.

    * Added logic to prevent playback from starting before the Ad
      Rules URL has loaded.

  FreeWheel Plugin changes:

    * Updated to use DID_INTERRUPT_CONTENT and DID_RESUME_CONTENT.

  Widevine Plugin changes:

    * Updated to emit DID_INTERRUPT_CONTENT and DID_RESUME_CONTENT.

Version 4.1.12:

  SDK changes:

    * Modified VideoStillDisplayComponent's SET_VIDEO_STILL listener
      to be a @Default listener, so it can be more easily prevented.

    * Fixed exception caused when the SeamlessVideoView tried to emit
      an ERROR event.

Version 4.1.11:

  SDK changes:

    * Fixed the inclusion of R inner classes in the legacy jars.

  IMA Plugin changes:

    * Applied the following fix to GoogleIMAVideoAdPlayer:

      https://github.com/googleads/googleads-ima-android/commit/f24d5158e55e5bb36e7dd9af178d55c3e77180b8

Version 4.1.10:

  SDK changes:

    * Attempted to fix missing classes, like RegisteringEventEmitter,
      in the legacy jars.

Version 4.1.9:

  SDK changes:

    * Attempted to fix black box seen when changing between full
      screen and normal screen during Google IMA ad playback with
      Widevine content.  This was done by modifying
      BrightcoveVideoView's setLayoutParams() to only apply the layout
      params to the video still ImageView and the video content
      SurfaceView.

Version 4.1.8:

  SDK changes:

    * Improved memory usage related to video still images.

  HLS Player changes:

    * Updated VisualOn libraries to version 3.11.6.

Version 4.1.7:

  SDK changes:

    * Fixed runtime error when running on lower than Kitkat devices:

        Could not find class 'android.media.SubtitleController'

  HLS Player changes:

    * Fixed issue where WILL_INTERRUPT_CONTENT was emitting a PAUSE
      event, which caused the GoogleIMAComponent to hang after
      finishing an ad break.

Version 4.1.6:

  IMA Plugin changes:

    * Modified the ADS_MANAGER_LOADED event to include a ADS_MANAGER
      property.

    * Fixed issue with postrolls when using "Ad Rules".

Version 4.1.5:

  OnceUx Plugin changes:

    * Initial version.

    * Provides support for hiding player controls while ads are being played.

    * Provides tracking beacons for each add per the VMAP ad data.

    * Provides click-through support for VMAP ads via a "Learn more" button.

    * Provides full event handling for customer access to VMAP data binding.

    * Provides a VMAP timeline to customers for customization.

Version 4.1.4:

  SDK changes:

    * Fixed a bug where an ERROR event was not being emitted properly
      when an exception occurred during an asynchronous Catalog call.

  IMA Plugin changes:

    * Added an ADS_MANAGER_LOADED event, which can be used to
      trigger auto play when using Ad Rules.

Version 4.1.3:

  SDK changes:

    * Fixed a bug with closed captioning causing class finding issues
      on versions of Android below 4.4 (kitkat).

  Cast Plugin changes:

      * Initial checkin

Version 4.1.0:

  SDK changes:

    * Added support for Android 4.4 (kitkat) closed captioning.

Version 4.0.24:

  IMA Plugin changes:

    * Fixed issue with missing AdEvents and overlay with midroll ads.

Version 4.0.23:

  HLS Player changes:

    * Fixed media controls issue.

  IMA Plugin changes:

    * Use com.brightcove.player as the Maven group identifier when publishing the plugin.

Version 4.0.22:

  SDK changes:

    * Added support for setting HTTP headers via the Video and Source
      properties.
    * Made the properties of model objects, like Video and Source, no
      longer read only.
    * Modified VideoDisplayComponent to defer creating a MediaPlayer
      for HLS or Widevine content until the PLAY event.  This prevents
      a throw away player from being prepared when prerolls occur.

  HLS Player changes:

    * Fixed layout issue introduced by 4.0.21's closed captions fix.

  Freewheel Plugin changes:

    * Added support for new flag,
      AdCuePointComponent.CLEAR_PLAYED_SLOTS, which when added to a
      COMPLETED event controls if the played slots are cleared.
    * Use com.brightcove.player as the Maven group identifier when publishing the plugin.

  Omniture Plugin changes:

    * Use com.brightcove.player as the Maven group identifier when publishing the plugin.

  Widevine Plugin changes:

    * Added support for DeliveryType.WVM.

    * Use com.brightcove.player as the Maven group identifier when publishing the plugin.

Version 4.0.21:

  HLS Player changes:

    * Fixed issue where calling:

        SeamlessVideoDisplayComponent.setClosedCaptionsEnabled(true)

      would cause an exception.

  Freewheel Plugin changes:

    * Fixed issue where seeking to the end of a video with a midroll
      ad was causing the video to be replayed afterwards.

  IMA Plugin changes:

    * Fixed issue where seeking to the end of a video with a midroll
      ad was causing the video to be replayed afterwards.

  Widevine Plugin changes:

    * Added support for "widevine://" based URLs without a ".wvm" extension.

Version 4.0.18:

  IMA Plugin changes:

    * Fixed issue with Widevine content.

Version 4.0.15:

  HLS Player changes:

    * Fixed issue where slow network connections were causing hangs
      when opening a video.

Version 4.0.14:

  IMA Plugin changes:

    * Added constructor to GoogleIMAComponent to support passing in
      a ImaSdkSettings instance.

Version 4.0.13:

  SDK changes:

    * Fixed issue where an processEvent(), which threw a Throwable,
      would crash an application.
    * Added SET_VOLUME event, which can be used to set the volume
      of the media player.

  HLS Player changes:

    * Added setBufferMaxSize() to SeamlessVideoDisplayComponent.
    * Added support for ID3 Tag extraction via listening for the
      SeamlessVideoDisplayComponent.ID3_TAG event.
    * Added SET_VOLUME listener to control the volume of the
      Seamless player.

  IMA Plugin changes:

    * Upgraded from Google IMA Android SDK v3beta3 to v3beta5.

Version 4.0.12:

  IMA Plugin changes:

    * Added support for "Ad Rules".

Version 4.0.10:

  SDK changes:

    * Added enable() and disable() to EventEmitter.

  HLS Player changes:

    * Added getStartCapEnabled() and setStartCapEnabled() to
      SeamlessVideoDisplayComponent.

Version 4.0.9:

  SDK changes:

    * Added SOURCE and VIDEO properties to the SOURCE_NOT_PLAYABLE
      event.

    * DID_SET_SOURCE and DID_SET_VIDEO are no longer emitted if a
      MediaPlayer error occurs before the MediaPlayer has finished
      preparing.

Version 4.0.8:

  SDK changes:

    * Added off() to EventListener.

Version 4.0.7:

  SDK changes:

    * Changed BrightcoveVideoView to listen for DID_PAUSE and DID_STOP
      instead of PAUSE and STOP.

Version 4.0.6:

  SDK changes:

    * Added destination to analytics.

  HLS Player changes:

    * Fixed issue with background threads not being cleaned up.

Version 4.0.5:

  SDK changes:

    * Compiled with target API level 18.
    * Fixed issue where the scrubber bar would not reflect the
      duration until playback begins.

  HLS Player changes:

    * Compiled with API level 18.
    * Fixed issue where seeking before playback begins would fail.

  Freewheel Plugin changes:

    * Compiled with target API level 18.

  IMA Plugin changes:

    * Compiled with target API level 18.

  Omniture Plugin changes:

    * Compiled with target API level 18.

  Widevine Plugin changes:

    * Compiled with target API level 18.

Version 4.0.4:

  HLS Player changes:

    * Added redraw() to SeamlessVideoDisplayComponent.

Version 4.0.2:

  HLS Player changes:

    * Added VIDEO_START_BUFF and VIDEO_STOP_BUFF events.

Version 4.0.1:

  SDK changes:

    * Added Android 4.3 support.
    * Fixed issue where seeking would sometimes hang video playback.
    * Fixed issue where cue points at position zero would be skipped
      with replay.

  Freewheel Plugin changes:

    * Added FreeWheelController constructors that take a FrameLayout
      instead of a SurfaceView.  Deprecated the SurfaceView constructors.
    * Added FreeWheelController.setupContext(), which can be used to
      enable ad playback when replaying a video.

  Widevine Plugin changes:

    * Added logging and events for Widevine events, errors, and info.

Version 4.0.0:

  SDK changes:

    * Added BrightcovePluginManager to handle plugin
      registration and Crashlytics support.
    * Added release build information to console output.


  HLS Player changes:

    * Fixed issue where the first HLS rendition, even if it was audio
      only, was being picked before adaptive streaming would kick in.

  IMA Plugin changes:

    * Renamed GoogleIMAComponent.reloadAdRequest() to reloadAdsRequest().

Version 2.2.19:

  SDK changes:

    * Added analytics support for device_type, device_os, and
      device_os_version.
    * Added support for Media API json error responses.
    * Fixed BEFORE cue points not being emitted when seeking before
      starting.
    * The BrightcoveVideoView media player will now hide when an
      ad is playing and be shown again when the ad is complete.
    * Removed the need to listen for a READY_TO_PLAY event at the
      application layer.
    * Calls to seekTo() from the application layer will now only
      be completed once a call to start() has been made.

  HLS Player changes:

    * Fixed issue where resuming from a midroll would hang the
      playlist.

Version 2.2.17:

  Freewheel Plugin changes:

    * Fixed issue with the video starting while prerolls are playing
      and with playlists advancing while postrolls are playing.

Version 2.2.16:

  SDK changes:

    * A SET_SOURCE event with a null URL property no longer causes an
      ERROR event to be emitted.
    * The surface being released while a catalog request is in flight
      should no longer causes an IllegalArgumentException.
    * Fixed a potential cause of out-of-memory exceptions by shutting
      down the PROGRESS event emitter when a player is destroyed.
    * Added device_os, device_os_version, and device_type to the
      analaytics reporting.

  HLS Player changes:

    * Fixed issue where pausing after an ad caused the screen to go
      blank.

Version 2.2.15:

  SDK changes:

    * DID_PLAY now fires once playback has begun, instead
      of when play is called.
    * Added setMediaController() to BrightcoveVideoView.

  HLS Player changes:

    * Fixed dequeueBuffer issue caused by not updating the
      prebuffering player when there was a surface change.

Version 2.2.14:

  IMA Plugin changes:

    * Upgraded from Google IMA Android SDK v3beta2 to v3beta3.

Version 2.2.13:

  SDK changes:

    * Fixed an issue with hangs occurring when processing cue points
      by removing the blocking of PLAY events from
      VideoPlaybackController.

  IMA Plugin changes:

    * Fixed issues with changing to another video in a playlist
      while an ad is playing.

Version 2.2.12:

  Omniture Plugin changes:

    * Updated to Omniture 3.2.2.

Version 2.2.11:

  SDK changes:

    * Added a MediaPlayer.OnInfoListener to log additional info.
    * Renamed EventType's WILL_PRESENT_CONTENT to
      WILL_INTERRUPT_CONTENT and DID_PRESENT_CONTENT to
      WILL_RESUME_CONTENT.
    * Added a DID_STOP event with a PLAYHEAD_POSITION property.
    * Fixed issue where the BrightcoveVideoView was not updating the
      playheadPosition correctly after a seekTo().  This caused
      resuming from a backgrounded app to start the video at the
      beginning.

  IMA Plugin changes:

    * Fixed issue where empty VAST responses would cause playback to
      not be resumed.

Version 2.2.10:

  SDK changes:

    * Added PLAYHEAD_POSITION property to the PLAY original event of
      "point in time" cue points.
    * Fixed playback on some older devices by removing the
      Surface.isValid() checks from VideoDisplayComponent.

  IMA Plugin changes:

    * Fixed issue with addView() exception when playing multiples ads.
    * Improved handling of ad errors, such that playback resumes
      gracefully.
    * Added an AD_EVENT property to GoogleIMAComponent events.  This
      property is of type com.google.ads.interactivemedia.v3.api.AdEvent.
    * Fixed issues with playing multiple ads at one time.

Version 2.2.7:

  SDK changes:

    * Fixed bug where before and position 0 cue points would be
      emitted upon resume.
    * Added support for "android.resource://..." Uris.

  HLS Player changes:

    * Added support for enabling closed captions and setting the dvr
      playback offset.  See SeamlessVideoDisplayComponent's
      setClosedCaptionsEnabled() and setDVRPlaybackOffset().
    * Fixed flickering issue caused by "next" player preparation.
    * Added apklib for native libraries.

  Freewheel Plugin changes:

    * Upgraded FreeWheel AdManager library to 5.7.2.

  IMA Plugin changes:

    * Upgraded from Google IMA Android SDK v1 to v3-beta2.  In
      addition to API changes required by the upgrade,
      GoogleIMAEventType's DID_BEGIN_PLAYING_AD and
      DID_FINISH_PLAYING_AD have been replaced by DID_COMPLETE_AD,
      DID_PAUSE_AD, DID_RESUME_AD, and DID_START_AD, and
      METADATA_VISIBILITY was moved from GoogleIMAEventType to
      GoogleIMAComponent.

  Omniture Plugin changes:

    * Updated to Omniture 3.1.0.

Version 2.2.6:

  Freewheel Plugin changes:

    * Modified AdCuePointComponent to emit PAUSE before playing an ad.
    * FreeWheelController to defer updating the AdContext until
      the ad request returns successfully and to reuse the previous
      AdContext if available when an ad request fails.
    * Upgraded FreeWheel AdManager library to 5.5.3.  As a result, removed
      AdManagerLoader library and it's use.
    * Added adRequestingEnabled flag to FreeWheelController.

  IMA Plugin changes:

    * Added support for clicking on an ad.
    * Modified GoogleIMAComponent to ignore cue points from a
      backwards seek.
    * Added support for WILL_CHANGE_SURFACE_VISIBILITY event.

  Omniture Plugin changes:

    * Changed OmnitureComponent's openVideo(), play(),
      stopPlayback(), and closeCurrentVideo() protected to make
      extending easier.

  Widevine Plugin changes:

    * Added support for DID_PRESENT_CONTENT and WILL_PRESENT_CONTENT
      events.

    * Added workaround for kernel crashes when resuming a widevine
      video after playing an ad.

Version 2.2.4:

  SDK changes:

    * Modified BrightcoveVideoView.setVideoURI() to take an
      android.net.Uri parameter instead of a java.net.URI.  This fixes
      an inconsistency between BrightcoveVideoView and
      android.widget.VideoView.

  HLS Player changes:

    * Added BITRATE_CHANGED event.
    * Added FRAMES_PER_SECOND and FRAMES_DROPPED to PROGRESS events.
    * Added MIN_POSITION and MAX_POSITION to PROGRESS events for DVR
      streams.
    * Fixed some flickering when transitioning between videos in a
      playlist.
    * Added support for overriding the voVidDec.dat and cap.xml
      files.  For example:

        SeamlessVideoDisplayComponent.voVidDecDatFileName = "voVidDec.orig.dat";
        SeamlessVideoDisplayComponent.capXmlFileName = "cap.orig.xml";

    * Added logging of all seamless events.

Version 2.2.2:

  SDK changes:

    * Removed Serializable requirement for Event properties.
    * Added checks for an invalid surface.
    * HttpService now supports headers and JSON GET and POST requests.
    * Fixed design view issue with setAppName().
    * Added "start" and "end" properites to CUE_POINT events.
    * Added logic to ignore PLAY events while handling a CUE_POINT event.
    * Added handling for a null window.
    * Modified CUE_POINT behavior such that the player isn't
      automatically paused.  Cue point handlers should emit a PAUSE
      event if necessary.

Version 2.1.0:

  SDK changes:

    * Fixed bug where BrightcoveVideoView would not maintain the correct aspect ratio
      of the video.
    * Fixed crash on Kindle Fire if you touch the BrightcoveVideoView before content
      has been loaded.
    * Fixed a bug where the SEEK_POSITION data of a SEEK_TO was expecting a String.
      Now expects a int.
    * When using the OOTB MediaController, the seekbar no longer jumps to 0 before seeking.
    * DID_SEEK no longer emitted after resuming playback
    * RTMP urls from the MediaSurface no longer have their delivery type set incorrectly
      as MP4.  They are now UNKNOWN.
    * Emitting a Event.SET_SOURCE event with a source with no url will now emit a
      SOURCE_NOT_FOUND event.

Version 2.0.4:

  SDK changes:

    * Catalog pulls sources from the WVMRenditions video field from Media API response.

Version 2.0.1:

  SDK changes:

    * Fixed bug where replay failed after the WILL_CHANGE_VIDEO event was cancelled.
    * Added VIDEO_DURATION_CHANGED event to support programmatically
      changing the duration.
    * Fixed bug where BEFORE and AFTER cue points were not emitted for
      subsequent videos in a playlist.
    * Fixed numerous bugs related to autoplay of subsequent videos in a playlist.
    * Fixed replay bug with last video in a playlist.
    * Fixed layout issues.  BrightcoveVideoView now properly supports wrap_content,
      fill_parent, and exact dimensions.
    * Added localization support for error messages.
    * Added support for calling play before DID_SET_SOURCE.

  SDK Open issues:

    * Seeking with HLS videos sometimes fails.  Android's VideoView has the same behavior.

Version 1.0.0:

  HLS Player Open Issues:

    * Intermittent crashes due to fatal signals.  We are still looking
      for reproducible test cases.

  Freewheel Plugin Open Issues:

    * Midrolls with HLS videos are not supported due to an Android
      bug.  The underlying Android MediaPlayer for the main video
      throws an error when resumed after the midroll.

  IMA Plugin Open Issues:

    * Midrolls with HLS videos are not supported due to an Android
      bug.  The underlying Android MediaPlayer for the main video
      throws an error when resumed after the midroll.
