diff --git a/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/DefaultReceiverPlayerManager.java b/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/DefaultReceiverPlayerManager.java index daaac9486e..f4678fc541 100644 --- a/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/DefaultReceiverPlayerManager.java +++ b/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/DefaultReceiverPlayerManager.java @@ -268,7 +268,7 @@ import java.util.ArrayList; public void onTimelineChanged( Timeline timeline, @Nullable Object manifest, @TimelineChangeReason int reason) { updateCurrentItemIndex(); - if (timeline.isEmpty()) { + if (currentPlayer == castPlayer && timeline.isEmpty()) { castMediaQueueCreationPending = true; } } diff --git a/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/DemoUtil.java b/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/DemoUtil.java index 369cb8ab90..776ed1a3bd 100644 --- a/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/DemoUtil.java +++ b/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/DemoUtil.java @@ -15,7 +15,6 @@ */ package com.google.android.exoplayer2.castdemo; -import com.google.android.exoplayer2.ext.cast.MediaItem; import com.google.android.exoplayer2.util.MimeTypes; import java.util.ArrayList; import java.util.Collections; @@ -24,50 +23,64 @@ import java.util.List; /** Utility methods and constants for the Cast demo application. */ /* package */ final class DemoUtil { + /** Represents a media sample. */ + public static final class Sample { + + /** The uri of the media content. */ + public final String uri; + /** The name of the sample. */ + public final String name; + /** The mime type of the sample media content. */ + public final String mimeType; + + /** + * @param uri See {@link #uri}. + * @param name See {@link #name}. + * @param mimeType See {@link #mimeType}. + */ + public Sample(String uri, String name, String mimeType) { + this.uri = uri; + this.name = name; + this.mimeType = mimeType; + } + + @Override + public String toString() { + return name; + } + } + public static final String MIME_TYPE_DASH = MimeTypes.APPLICATION_MPD; public static final String MIME_TYPE_HLS = MimeTypes.APPLICATION_M3U8; public static final String MIME_TYPE_SS = MimeTypes.APPLICATION_SS; public static final String MIME_TYPE_VIDEO_MP4 = MimeTypes.VIDEO_MP4; /** The list of samples available in the cast demo app. */ - public static final List SAMPLES; + public static final List SAMPLES; static { // App samples. - ArrayList samples = new ArrayList<>(); - MediaItem.Builder sampleBuilder = new MediaItem.Builder(); + ArrayList samples = new ArrayList<>(); samples.add( - sampleBuilder - .setTitle("DASH (clear,MP4,H264)") - .setMimeType(MIME_TYPE_DASH) - .setMedia("https://storage.googleapis.com/wvmedia/clear/h264/tears/tears.mpd") - .buildAndClear()); - + new Sample( + "https://storage.googleapis.com/wvmedia/clear/h264/tears/tears.mpd", + "DASH (clear,MP4,H264)", + MIME_TYPE_DASH)); samples.add( - sampleBuilder - .setTitle("Tears of Steel (HLS)") - .setMimeType(MIME_TYPE_HLS) - .setMedia( - "https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/" - + "hls/TearsOfSteel.m3u8") - .buildAndClear()); - + new Sample( + "https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/" + + "hls/TearsOfSteel.m3u8", + "Tears of Steel (HLS)", + MIME_TYPE_HLS)); samples.add( - sampleBuilder - .setTitle("HLS Basic (TS)") - .setMimeType(MIME_TYPE_HLS) - .setMedia( - "https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_4x3" - + "/bipbop_4x3_variant.m3u8") - .buildAndClear()); - + new Sample( + "https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_4x3" + + "/bipbop_4x3_variant.m3u8", + "HLS Basic (TS)", + MIME_TYPE_HLS)); samples.add( - sampleBuilder - .setTitle("Dizzy (MP4)") - .setMimeType(MIME_TYPE_VIDEO_MP4) - .setMedia("https://html5demos.com/assets/dizzy.mp4") - .buildAndClear()); + new Sample("https://html5demos.com/assets/dizzy.mp4", "Dizzy (MP4)", MIME_TYPE_VIDEO_MP4)); SAMPLES = Collections.unmodifiableList(samples); } diff --git a/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/MainActivity.java b/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/MainActivity.java index 8ebfee1294..5278776070 100644 --- a/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/MainActivity.java +++ b/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/MainActivity.java @@ -17,7 +17,6 @@ package com.google.android.exoplayer2.castdemo; import android.content.Context; import android.os.Bundle; -import android.support.annotation.Nullable; import android.support.v4.graphics.ColorUtils; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; @@ -50,6 +49,8 @@ import com.google.android.gms.cast.framework.CastContext; public class MainActivity extends AppCompatActivity implements OnClickListener, PlayerManager.QueuePositionListener { + private final MediaItem.Builder mediaItemBuilder; + private PlayerView localPlayerView; private PlayerControlView castControlView; private PlayerManager playerManager; @@ -57,6 +58,10 @@ public class MainActivity extends AppCompatActivity private MediaQueueListAdapter mediaQueueListAdapter; private CastContext castContext; + public MainActivity() { + mediaItemBuilder = new MediaItem.Builder(); + } + // Activity lifecycle methods. @Override @@ -154,7 +159,14 @@ public class MainActivity extends AppCompatActivity sampleList.setAdapter(new SampleListAdapter(this)); sampleList.setOnItemClickListener( (parent, view, position, id) -> { - playerManager.addItem(DemoUtil.SAMPLES.get(position)); + DemoUtil.Sample sample = DemoUtil.SAMPLES.get(position); + playerManager.addItem( + mediaItemBuilder + .clear() + .setMedia(sample.uri) + .setTitle(sample.name) + .setMimeType(sample.mimeType) + .build()); mediaQueueListAdapter.notifyItemInserted(playerManager.getMediaQueueSize() - 1); }); return dialogList; @@ -254,19 +266,11 @@ public class MainActivity extends AppCompatActivity } - private static final class SampleListAdapter extends ArrayAdapter { + private static final class SampleListAdapter extends ArrayAdapter { public SampleListAdapter(Context context) { super(context, android.R.layout.simple_list_item_1, DemoUtil.SAMPLES); } - - @Override - public View getView(int position, @Nullable View convertView, ViewGroup parent) { - TextView view = (TextView) super.getView(position, convertView, parent); - MediaItem sample = DemoUtil.SAMPLES.get(position); - view.setText(sample.title); - return view; - } } }