
This ensures we have full test coverage for proguard configs now. The only configs not covered by tests are: - IMA and OkHttp which copy recommended configs from the respective library. I couldn't reproduce failures by removing them (and thus couldn't write a test that ensures they are correct). - Some dontwarn lines that just suppress warnings. In addition, this change fixes a couple of related issues: - Moved AV1 proguard config to correct module. - Removed mentioning of deprecated ExtractorMediaSource from README - Suppressed warning from IMA code that prevent proguarding under strict rules - Fixed wrong proguard exclusion in VP9 module. - Moved FLAC exclusion (DefaultExtractorsFactory) to correct module. - Added AlertDialog suppression for de-jetified code. - Removed unusued dependency from UI module that causes large APK size increase. #exofixit #minor-release PiperOrigin-RevId: 344427532
ExoPlayer IMA extension
The IMA extension is an AdsLoader implementation wrapping the Interactive Media Ads SDK for Android. You can use it to insert ads alongside content.
Getting the extension
The easiest way to use the extension is to add it as a gradle dependency:
implementation 'com.google.android.exoplayer:extension-ima:2.X.X'
where 2.X.X
is the version, which must match the version of the ExoPlayer
library being used.
Alternatively, you can clone the ExoPlayer repository and depend on the module locally. Instructions for doing this can be found in ExoPlayer's top level README.
Using the extension
To use the extension, follow the instructions on the
Ad insertion page
of the developer guide. The AdsLoaderProvider
passed to the player's
DefaultMediaSourceFactory
should return an ImaAdsLoader
. Note that the IMA
extension only supports players which are accessed on the application's main
thread.
Resuming the player after entering the background requires some special
handling when playing ads. The player and its media source are released on
entering the background, and are recreated when returning to the foreground.
When playing ads it is necessary to persist ad playback state while in the
background by keeping a reference to the ImaAdsLoader
. When re-entering the
foreground, pass the same instance back when
AdsLoaderProvider.getAdsLoader(MediaItem.AdsConfiguration adsConfiguration)
is called to restore the state. It is also important to persist the player
position when entering the background by storing the value of
player.getContentPosition()
. On returning to the foreground, seek to that
position before preparing the new player instance. Finally, it is important to
call ImaAdsLoader.release()
when playback has finished and will not be
resumed.
You can try the IMA extension in the ExoPlayer demo app, which has test content
in the "IMA sample ad tags" section of the sample chooser. The demo app's
PlayerActivity
also shows how to persist the ImaAdsLoader
instance and the
player position when backgrounded during ad playback.
Links
- ExoPlayer documentation on ad insertion
- Javadoc: Classes matching
com.google.android.exoplayer2.ext.ima.*
belong to this module.