Reuse media sources in demo apps.

Especially the cast demo app benefits from this feature as it can keep its
ConcatenatingMediaSource all the time without having to repopulate it
when switching players.

Issue:#3498

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=187866048
This commit is contained in:
tonihei 2018-03-05 07:52:22 -08:00 committed by Oliver Woodman
parent 6e5ae87cae
commit c0c11af29f
2 changed files with 58 additions and 61 deletions

View File

@ -79,8 +79,8 @@ import java.util.ArrayList;
private final CastPlayer castPlayer;
private final ArrayList<DemoUtil.Sample> mediaQueue;
private final QueuePositionListener queuePositionListener;
private final ConcatenatingMediaSource concatenatingMediaSource;
private ConcatenatingMediaSource concatenatingMediaSource;
private boolean castMediaQueueCreationPending;
private int currentItemIndex;
private Player currentPlayer;
@ -116,6 +116,7 @@ import java.util.ArrayList;
this.castControlView = castControlView;
mediaQueue = new ArrayList<>();
currentItemIndex = C.INDEX_UNSET;
concatenatingMediaSource = new ConcatenatingMediaSource();
DefaultTrackSelector trackSelector = new DefaultTrackSelector(BANDWIDTH_METER);
RenderersFactory renderersFactory = new DefaultRenderersFactory(context, null);
@ -154,9 +155,8 @@ import java.util.ArrayList;
*/
public void addItem(Sample sample) {
mediaQueue.add(sample);
if (currentPlayer == exoPlayer) {
concatenatingMediaSource.addMediaSource(buildMediaSource(sample));
} else {
if (currentPlayer == castPlayer) {
castPlayer.addItems(buildMediaQueueItem(sample));
}
}
@ -185,9 +185,8 @@ import java.util.ArrayList;
* @return Whether the removal was successful.
*/
public boolean removeItem(int itemIndex) {
if (currentPlayer == exoPlayer) {
concatenatingMediaSource.removeMediaSource(itemIndex);
} else {
if (currentPlayer == castPlayer) {
if (castPlayer.getPlaybackState() != Player.STATE_IDLE) {
Timeline castTimeline = castPlayer.getCurrentTimeline();
if (castTimeline.getPeriodCount() <= itemIndex) {
@ -214,9 +213,8 @@ import java.util.ArrayList;
*/
public boolean moveItem(int fromIndex, int toIndex) {
// Player update.
if (currentPlayer == exoPlayer) {
concatenatingMediaSource.moveMediaSource(fromIndex, toIndex);
} else if (castPlayer.getPlaybackState() != Player.STATE_IDLE) {
if (currentPlayer == castPlayer && castPlayer.getPlaybackState() != Player.STATE_IDLE) {
Timeline castTimeline = castPlayer.getCurrentTimeline();
int periodCount = castTimeline.getPeriodCount();
if (periodCount <= fromIndex || periodCount <= toIndex) {
@ -262,6 +260,7 @@ import java.util.ArrayList;
public void release() {
currentItemIndex = C.INDEX_UNSET;
mediaQueue.clear();
concatenatingMediaSource.clear();
castPlayer.setSessionAvailabilityListener(null);
castPlayer.release();
localPlayerView.setPlayer(null);
@ -349,10 +348,6 @@ import java.util.ArrayList;
// Media queue management.
castMediaQueueCreationPending = currentPlayer == castPlayer;
if (currentPlayer == exoPlayer) {
concatenatingMediaSource = new ConcatenatingMediaSource();
for (int i = 0; i < mediaQueue.size(); i++) {
concatenatingMediaSource.addMediaSource(buildMediaSource(mediaQueue.get(i)));
}
exoPlayer.prepare(concatenatingMediaSource);
}

View File

@ -118,6 +118,7 @@ public class PlayerActivity extends Activity
private DataSource.Factory mediaDataSourceFactory;
private SimpleExoPlayer player;
private MediaSource mediaSource;
private DefaultTrackSelector trackSelector;
private TrackSelectionHelper trackSelectionHelper;
private DebugTextViewHelper debugViewHelper;
@ -253,9 +254,8 @@ public class PlayerActivity extends Activity
// Internal methods
private void initializePlayer() {
if (player == null) {
Intent intent = getIntent();
boolean needNewPlayer = player == null;
if (needNewPlayer) {
TrackSelection.Factory adaptiveTrackSelectionFactory =
new AdaptiveTrackSelection.Factory(BANDWIDTH_METER);
trackSelector = new DefaultTrackSelector(adaptiveTrackSelectionFactory);
@ -315,7 +315,7 @@ public class PlayerActivity extends Activity
playerView.setPlaybackPreparer(this);
debugViewHelper = new DebugTextViewHelper(player, debugTextView);
debugViewHelper.start();
}
String action = intent.getAction();
Uri[] uris;
String[] extensions;
@ -344,8 +344,8 @@ public class PlayerActivity extends Activity
for (int i = 0; i < uris.length; i++) {
mediaSources[i] = buildMediaSource(uris[i], extensions[i], mainHandler, eventLogger);
}
MediaSource mediaSource = mediaSources.length == 1 ? mediaSources[0]
: new ConcatenatingMediaSource(mediaSources);
mediaSource =
mediaSources.length == 1 ? mediaSources[0] : new ConcatenatingMediaSource(mediaSources);
String adTagUriString = intent.getStringExtra(AD_TAG_URI_EXTRA);
if (adTagUriString != null) {
Uri adTagUri = Uri.parse(adTagUriString);
@ -362,6 +362,7 @@ public class PlayerActivity extends Activity
} else {
releaseAdsLoader();
}
}
boolean haveResumePosition = resumeWindow != C.INDEX_UNSET;
if (haveResumePosition) {
player.seekTo(resumeWindow, resumePosition);
@ -424,6 +425,7 @@ public class PlayerActivity extends Activity
updateResumePosition();
player.release();
player = null;
mediaSource = null;
trackSelector = null;
trackSelectionHelper = null;
eventLogger = null;