Upgrade Guides

Upgrade Guides

Changes in 4.2.4

This release adds support for 64bit native code to all plugins including the OMA plugin. It also updates the OMA plugin so permit targeting Android API >= 23 with. That means you no longer need to split APKs when you are using OMA and you also no need to filter for an 64bit native libraries.

Changes in 4.2

The transition from version 4.1 to version 4.2 of the PRESTOplay SDK for Android involves some breaking API changes. We will highlight the changes here and describe the required changes that you might need to apply in your Application to upgrade to version 4.2.


The StreamingEventListener was used in version 4.1 to receive events about downloads triggered by the player library. In order to provide more information on these callbacks, we decided to change the method signatures slightly. Please check the API documentation for the StreamingEventListener interface and update your implementations accordingly. All information is still present, but we are exposing the underlying DataSpec as well, which allows you, for instance, to access the target URI of a given request.

Besides the changed order and the new parameter, the only parameter that was removed from the signature was the length. Please use the dataSpec.length property instead.


The AbstractStreamEventListener is removed and AbstractStreamingEventListener shall be used instead.


Header and query parameters

The DownloadServiceBinder.getDataSourceFactory() is no longer public and when providing the downloader with the additional header and query parameters, the SdkConsts.INTENT_HEADER_PARAMS_BUNDLE and SdkConsts.INTENT_QUERY_PARAMS_BUNDLE shall be used as keys in the Bundle passed to DownloadServiceBinder.prepareDownload(android.content.Context, android.os.Bundle, com.castlabs.sdk.downloader.Downloader$ModelReadyCallback).

Download size

The Download#getTotalSize() is replaced with Download.getEstimatedSize()


The Builder.Builder(java.lang.String, java.lang.String, java.lang.String, java.lang.String) should now be created with explicitly set assetId.


The KeyStore interface got promoted to an abstract class in 4.2. This is because some functionality was required to be implemented at this level, and shared across all KeyStore implementations.

The main motivation for this change was to perform serialization of the stored data before and after storing and reading the data.

In order to make transition easier we renamed the old interface methods, and expect the same behaviour from them. These correspond to the *internal named methods.

In addition new methods have been added; getAll, delete, deleteAll and getCount.

KeyStore in PlayerController

The setKeyStore method in the PlayerController has been removed. The static DEFAULT_KEY_STORE field in the PlayerSDK class should be used from now on.

Ads & IMA plugin

The IMA plugin is now based on the Exo Player’s ads interfaces and IMA extension. The change brings mainly performance benefits as all the ads are now played using the same PlayerView and Exo Player’s instance. The following client-facing ads interfaces have being updated as well:

  • AdSessionProvider is renamed to AdProvider and defines interface to create AdLoader. The implementation of this interface can be used for custom-based ads provider implementations.

  • AdController is removed and its APIs became part of AdInterface and AdClientInterface accessible via PlayerController

  • SdkConsts.INTENT_WAIT_FOR_ADS_TO_LOAD was removed


The SubtitlesViewComponent getView() is deprecated and componentView() should be used instead.



The onVideoFormatChange() and onAudioFormatChange() methods have been moved out of the StreamingEventListener interface to the new FormatChangeListener interface.

If you were using any of those methods, you should implement FormatChangeListener. Then you can add and remove the listener to the PlayerController with the addFormatChangeListener() and removeFormatChangeListener() methods respectively.


This new method will receive load error events. Note that retries will also be notified through this callback. Fatal load errors will still by reported by the PlayerListener, but now it won’t receive Warning retry calls anymore.


Now all the methods in the StreamingEventListener contain two extra params: currentAttempt and maxAttempts. You can use these params for instance in the error callback to check for a fatal error, or to know how many retries were required for successful loading.

Image loader

The following methods are deprecated:

Playback configuration

The following playback configuration options are deprecated:
Previous topic: Kotlin Extensions
Next topic: Licensing