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.
StreamingEventListener¶
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.
AbstractStreamEventListener¶
The AbstractStreamEventListener
is removed and AbstractStreamingEventListener
shall be used instead.
Downloader¶
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()
DRM¶
The Builder.Builder(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
should now be created with explicitly set assetId
.
KeyStore¶
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 toAdProvider
and defines interface to createAdLoader
. The implementation of this interface can be used for custom-based ads provider implementations.
AdController
is removed and its APIs became part ofAdInterface
andAdClientInterface
accessible viaPlayerController
SdkConsts.INTENT_WAIT_FOR_ADS_TO_LOAD
was removed
SubtitlesViewComponent¶
The SubtitlesViewComponent
getView()
is deprecated and componentView()
should be used instead.
StreamingEventListener¶
Format¶
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.
onLoadError¶
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.
Retries¶
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:
Use
LazyImageLoader.loadImage(java.lang.String, android.widget.ImageView, int)
instead ofLazyImageLoader#displayImage
Use
LazyImageLoader.shutdown()
instead ofLazyImageLoader#stopThread
Playback configuration¶
- The following playback configuration options are deprecated:
Initial video quality and keep flag: use
SdkConsts.INTENT_ABR_CONFIGURATION
instead ofSdkConsts#INTENT_INITIAL_VIDEO_QUALITY
andSdkConsts#INTENT_INITIAL_VIDEO_QUALITY_KEEP
SdkConsts#INTENT_PROGRESSIVE_DOWNLOAD_ID
was removedLanguage preferences: use
SdkConsts.INTENT_PREFERRED_AUDIO_LANGUAGE
andSdkConsts.INTENT_PREFERRED_TEXT_LANGUAGE
instead ofSdkConsts#INTENT_PREFERRED_LANGUAGE
Live edge latency: use
SdkConsts.INTENT_LIVE_CONFIGURATION
instead ofSdkConsts#INTENT_LIVE_EDGE_LATENCY_MS
andPlayerController.setLiveConfiguration(com.castlabs.android.player.LiveConfiguration)
instead ofPlayerController.setLiveEdgeLatency()