mirror of
https://github.com/androidx/media.git
synced 2025-05-12 18:19:50 +08:00
Opt some more bits of the main demo app into the unstable API
PiperOrigin-RevId: 446161354
This commit is contained in:
parent
33b049c104
commit
eb1dc508a5
@ -178,7 +178,7 @@ public class IntentUtil {
|
|||||||
headers.put(keyRequestPropertiesArray[i], keyRequestPropertiesArray[i + 1]);
|
headers.put(keyRequestPropertiesArray[i], keyRequestPropertiesArray[i + 1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@Nullable UUID drmUuid = Util.getDrmUuid(Util.castNonNull(drmSchemeExtra));
|
@Nullable UUID drmUuid = Util.getDrmUuid(drmSchemeExtra);
|
||||||
if (drmUuid != null) {
|
if (drmUuid != null) {
|
||||||
builder.setDrmConfiguration(
|
builder.setDrmConfiguration(
|
||||||
new MediaItem.DrmConfiguration.Builder(drmUuid)
|
new MediaItem.DrmConfiguration.Builder(drmUuid)
|
||||||
|
@ -90,7 +90,12 @@ public class PlayerActivity extends AppCompatActivity
|
|||||||
// For ad playback only.
|
// For ad playback only.
|
||||||
|
|
||||||
@Nullable private AdsLoader clientSideAdsLoader;
|
@Nullable private AdsLoader clientSideAdsLoader;
|
||||||
|
|
||||||
|
// TODO: Annotate this and serverSideAdsLoaderState below with @OptIn when it can be applied to
|
||||||
|
// fields (needs http://r.android.com/2004032 to be released into a version of
|
||||||
|
// androidx.annotation:annotation-experimental).
|
||||||
@Nullable private ImaServerSideAdInsertionMediaSource.AdsLoader serverSideAdsLoader;
|
@Nullable private ImaServerSideAdInsertionMediaSource.AdsLoader serverSideAdsLoader;
|
||||||
|
|
||||||
private ImaServerSideAdInsertionMediaSource.AdsLoader.@MonotonicNonNull State
|
private ImaServerSideAdInsertionMediaSource.AdsLoader.@MonotonicNonNull State
|
||||||
serverSideAdsLoaderState;
|
serverSideAdsLoaderState;
|
||||||
|
|
||||||
@ -119,12 +124,7 @@ public class PlayerActivity extends AppCompatActivity
|
|||||||
startAutoPlay = savedInstanceState.getBoolean(KEY_AUTO_PLAY);
|
startAutoPlay = savedInstanceState.getBoolean(KEY_AUTO_PLAY);
|
||||||
startItemIndex = savedInstanceState.getInt(KEY_ITEM_INDEX);
|
startItemIndex = savedInstanceState.getInt(KEY_ITEM_INDEX);
|
||||||
startPosition = savedInstanceState.getLong(KEY_POSITION);
|
startPosition = savedInstanceState.getLong(KEY_POSITION);
|
||||||
Bundle adsLoaderStateBundle = savedInstanceState.getBundle(KEY_SERVER_SIDE_ADS_LOADER_STATE);
|
restoreServerSideAdsLoaderState(savedInstanceState);
|
||||||
if (adsLoaderStateBundle != null) {
|
|
||||||
serverSideAdsLoaderState =
|
|
||||||
ImaServerSideAdInsertionMediaSource.AdsLoader.State.CREATOR.fromBundle(
|
|
||||||
adsLoaderStateBundle);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
trackSelectionParameters = new TrackSelectionParameters.Builder(/* context= */ this).build();
|
trackSelectionParameters = new TrackSelectionParameters.Builder(/* context= */ this).build();
|
||||||
clearStartPosition();
|
clearStartPosition();
|
||||||
@ -216,9 +216,7 @@ public class PlayerActivity extends AppCompatActivity
|
|||||||
outState.putBoolean(KEY_AUTO_PLAY, startAutoPlay);
|
outState.putBoolean(KEY_AUTO_PLAY, startAutoPlay);
|
||||||
outState.putInt(KEY_ITEM_INDEX, startItemIndex);
|
outState.putInt(KEY_ITEM_INDEX, startItemIndex);
|
||||||
outState.putLong(KEY_POSITION, startPosition);
|
outState.putLong(KEY_POSITION, startPosition);
|
||||||
if (serverSideAdsLoaderState != null) {
|
saveServerSideAdsLoaderState(outState);
|
||||||
outState.putBundle(KEY_SERVER_SIDE_ADS_LOADER_STATE, serverSideAdsLoaderState.toBundle());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Activity input
|
// Activity input
|
||||||
@ -270,24 +268,20 @@ public class PlayerActivity extends AppCompatActivity
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean preferExtensionDecoders =
|
|
||||||
intent.getBooleanExtra(IntentUtil.PREFER_EXTENSION_DECODERS_EXTRA, false);
|
|
||||||
RenderersFactory renderersFactory =
|
|
||||||
DemoUtil.buildRenderersFactory(/* context= */ this, preferExtensionDecoders);
|
|
||||||
|
|
||||||
lastSeenTracks = Tracks.EMPTY;
|
lastSeenTracks = Tracks.EMPTY;
|
||||||
player =
|
ExoPlayer.Builder playerBuilder =
|
||||||
new ExoPlayer.Builder(/* context= */ this)
|
new ExoPlayer.Builder(/* context= */ this)
|
||||||
.setRenderersFactory(renderersFactory)
|
.setMediaSourceFactory(createMediaSourceFactory());
|
||||||
.setMediaSourceFactory(createMediaSourceFactory())
|
setRenderersFactory(
|
||||||
.build();
|
playerBuilder, intent.getBooleanExtra(IntentUtil.PREFER_EXTENSION_DECODERS_EXTRA, false));
|
||||||
|
player = playerBuilder.build();
|
||||||
player.setTrackSelectionParameters(trackSelectionParameters);
|
player.setTrackSelectionParameters(trackSelectionParameters);
|
||||||
player.addListener(new PlayerEventListener());
|
player.addListener(new PlayerEventListener());
|
||||||
player.addAnalyticsListener(new EventLogger());
|
player.addAnalyticsListener(new EventLogger());
|
||||||
player.setAudioAttributes(AudioAttributes.DEFAULT, /* handleAudioFocus= */ true);
|
player.setAudioAttributes(AudioAttributes.DEFAULT, /* handleAudioFocus= */ true);
|
||||||
player.setPlayWhenReady(startAutoPlay);
|
player.setPlayWhenReady(startAutoPlay);
|
||||||
playerView.setPlayer(player);
|
playerView.setPlayer(player);
|
||||||
serverSideAdsLoader.setPlayer(player);
|
configurePlayerWithServerSideAdsLoader();
|
||||||
debugViewHelper = new DebugTextViewHelper(player, debugTextView);
|
debugViewHelper = new DebugTextViewHelper(player, debugTextView);
|
||||||
debugViewHelper.start();
|
debugViewHelper.start();
|
||||||
}
|
}
|
||||||
@ -322,6 +316,17 @@ public class PlayerActivity extends AppCompatActivity
|
|||||||
.setServerSideAdInsertionMediaSourceFactory(imaServerSideAdInsertionMediaSourceFactory);
|
.setServerSideAdInsertionMediaSourceFactory(imaServerSideAdInsertionMediaSourceFactory);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setRenderersFactory(
|
||||||
|
ExoPlayer.Builder playerBuilder, boolean preferExtensionDecoders) {
|
||||||
|
RenderersFactory renderersFactory =
|
||||||
|
DemoUtil.buildRenderersFactory(/* context= */ this, preferExtensionDecoders);
|
||||||
|
playerBuilder.setRenderersFactory(renderersFactory);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void configurePlayerWithServerSideAdsLoader() {
|
||||||
|
serverSideAdsLoader.setPlayer(player);
|
||||||
|
}
|
||||||
|
|
||||||
private List<MediaItem> createMediaItems(Intent intent) {
|
private List<MediaItem> createMediaItems(Intent intent) {
|
||||||
String action = intent.getAction();
|
String action = intent.getAction();
|
||||||
boolean actionIsListView = IntentUtil.ACTION_VIEW_LIST.equals(action);
|
boolean actionIsListView = IntentUtil.ACTION_VIEW_LIST.equals(action);
|
||||||
@ -375,8 +380,7 @@ public class PlayerActivity extends AppCompatActivity
|
|||||||
if (player != null) {
|
if (player != null) {
|
||||||
updateTrackSelectorParameters();
|
updateTrackSelectorParameters();
|
||||||
updateStartPosition();
|
updateStartPosition();
|
||||||
serverSideAdsLoaderState = serverSideAdsLoader.release();
|
releaseServerSideAdsLoader();
|
||||||
serverSideAdsLoader = null;
|
|
||||||
debugViewHelper.stop();
|
debugViewHelper.stop();
|
||||||
debugViewHelper = null;
|
debugViewHelper = null;
|
||||||
player.release();
|
player.release();
|
||||||
@ -391,6 +395,11 @@ public class PlayerActivity extends AppCompatActivity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void releaseServerSideAdsLoader() {
|
||||||
|
serverSideAdsLoaderState = serverSideAdsLoader.release();
|
||||||
|
serverSideAdsLoader = null;
|
||||||
|
}
|
||||||
|
|
||||||
private void releaseClientSideAdsLoader() {
|
private void releaseClientSideAdsLoader() {
|
||||||
if (clientSideAdsLoader != null) {
|
if (clientSideAdsLoader != null) {
|
||||||
clientSideAdsLoader.release();
|
clientSideAdsLoader.release();
|
||||||
@ -399,6 +408,21 @@ public class PlayerActivity extends AppCompatActivity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void saveServerSideAdsLoaderState(Bundle outState) {
|
||||||
|
if (serverSideAdsLoaderState != null) {
|
||||||
|
outState.putBundle(KEY_SERVER_SIDE_ADS_LOADER_STATE, serverSideAdsLoaderState.toBundle());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void restoreServerSideAdsLoaderState(Bundle savedInstanceState) {
|
||||||
|
Bundle adsLoaderStateBundle = savedInstanceState.getBundle(KEY_SERVER_SIDE_ADS_LOADER_STATE);
|
||||||
|
if (adsLoaderStateBundle != null) {
|
||||||
|
serverSideAdsLoaderState =
|
||||||
|
ImaServerSideAdInsertionMediaSource.AdsLoader.State.CREATOR.fromBundle(
|
||||||
|
adsLoaderStateBundle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void updateTrackSelectorParameters() {
|
private void updateTrackSelectorParameters() {
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
trackSelectionParameters = player.getTrackSelectionParameters();
|
trackSelectionParameters = player.getTrackSelectionParameters();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user