Migrate DefaultAnalyticsCollectorTest to use the playlist API
Some test cases are still using `ConcatenatingMediaSource` even if they do not test specific features of the concatenating source. Apparently these test have a slightly different timing behavior when it comes to updating the `MediaPeriodQueue` and emitting change events with analytics. Using the playlist API ensures testing the future-proof code path. PiperOrigin-RevId: 628413460
This commit is contained in:
parent
4be30bb308
commit
38813dd30e
@ -106,7 +106,6 @@ import androidx.media3.exoplayer.drm.DrmSessionManager;
|
|||||||
import androidx.media3.exoplayer.drm.ExoMediaDrm;
|
import androidx.media3.exoplayer.drm.ExoMediaDrm;
|
||||||
import androidx.media3.exoplayer.drm.MediaDrmCallback;
|
import androidx.media3.exoplayer.drm.MediaDrmCallback;
|
||||||
import androidx.media3.exoplayer.drm.MediaDrmCallbackException;
|
import androidx.media3.exoplayer.drm.MediaDrmCallbackException;
|
||||||
import androidx.media3.exoplayer.source.ConcatenatingMediaSource;
|
|
||||||
import androidx.media3.exoplayer.source.LoadEventInfo;
|
import androidx.media3.exoplayer.source.LoadEventInfo;
|
||||||
import androidx.media3.exoplayer.source.MediaLoadData;
|
import androidx.media3.exoplayer.source.MediaLoadData;
|
||||||
import androidx.media3.exoplayer.source.MediaSource;
|
import androidx.media3.exoplayer.source.MediaSource;
|
||||||
@ -285,22 +284,22 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void automaticPeriodTransition() throws Exception {
|
public void automaticPeriodTransition() throws Exception {
|
||||||
MediaSource mediaSource =
|
MediaSource mediaSource1 =
|
||||||
new ConcatenatingMediaSource(
|
|
||||||
new FakeMediaSource(
|
new FakeMediaSource(
|
||||||
SINGLE_PERIOD_TIMELINE,
|
SINGLE_PERIOD_TIMELINE,
|
||||||
ExoPlayerTestRunner.VIDEO_FORMAT,
|
ExoPlayerTestRunner.VIDEO_FORMAT,
|
||||||
ExoPlayerTestRunner.AUDIO_FORMAT),
|
ExoPlayerTestRunner.AUDIO_FORMAT);
|
||||||
|
MediaSource mediaSource2 =
|
||||||
new FakeMediaSource(
|
new FakeMediaSource(
|
||||||
SINGLE_PERIOD_TIMELINE,
|
SINGLE_PERIOD_TIMELINE,
|
||||||
ExoPlayerTestRunner.VIDEO_FORMAT,
|
ExoPlayerTestRunner.VIDEO_FORMAT,
|
||||||
ExoPlayerTestRunner.AUDIO_FORMAT));
|
ExoPlayerTestRunner.AUDIO_FORMAT);
|
||||||
ExoPlayer player = setupPlayer();
|
ExoPlayer player = setupPlayer();
|
||||||
TestAnalyticsListener listener = new TestAnalyticsListener();
|
TestAnalyticsListener listener = new TestAnalyticsListener();
|
||||||
player.addAnalyticsListener(listener);
|
player.addAnalyticsListener(listener);
|
||||||
|
|
||||||
player.play();
|
player.play();
|
||||||
player.setMediaSource(mediaSource);
|
player.setMediaSources(ImmutableList.of(mediaSource1, mediaSource2));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
runUntilPlaybackState(player, Player.STATE_ENDED);
|
runUntilPlaybackState(player, Player.STATE_ENDED);
|
||||||
|
|
||||||
@ -313,7 +312,7 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
period1 /* ENDED */)
|
period1 /* ENDED */)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_TIMELINE_CHANGED))
|
assertThat(listener.getEvents(EVENT_TIMELINE_CHANGED))
|
||||||
.containsExactly(WINDOW_0 /* PLAYLIST_CHANGED */, period0 /* SOURCE_UPDATE */)
|
.containsExactly(WINDOW_0 /* PLAYLIST_CHANGED */, WINDOW_0 /* SOURCE_UPDATE */)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_POSITION_DISCONTINUITY)).containsExactly(period1);
|
assertThat(listener.getEvents(EVENT_POSITION_DISCONTINUITY)).containsExactly(period1);
|
||||||
assertThat(listener.getEvents(EVENT_IS_LOADING_CHANGED))
|
assertThat(listener.getEvents(EVENT_IS_LOADING_CHANGED))
|
||||||
@ -366,16 +365,16 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void periodTransitionWithRendererChange() throws Exception {
|
public void periodTransitionWithRendererChange() throws Exception {
|
||||||
MediaSource mediaSource =
|
MediaSource mediaSource1 =
|
||||||
new ConcatenatingMediaSource(
|
new FakeMediaSource(SINGLE_PERIOD_TIMELINE, ExoPlayerTestRunner.VIDEO_FORMAT);
|
||||||
new FakeMediaSource(SINGLE_PERIOD_TIMELINE, ExoPlayerTestRunner.VIDEO_FORMAT),
|
MediaSource mediaSource2 =
|
||||||
new FakeMediaSource(SINGLE_PERIOD_TIMELINE, ExoPlayerTestRunner.AUDIO_FORMAT));
|
new FakeMediaSource(SINGLE_PERIOD_TIMELINE, ExoPlayerTestRunner.AUDIO_FORMAT);
|
||||||
ExoPlayer player = setupPlayer();
|
ExoPlayer player = setupPlayer();
|
||||||
TestAnalyticsListener listener = new TestAnalyticsListener();
|
TestAnalyticsListener listener = new TestAnalyticsListener();
|
||||||
player.addAnalyticsListener(listener);
|
player.addAnalyticsListener(listener);
|
||||||
|
|
||||||
player.play();
|
player.play();
|
||||||
player.setMediaSource(mediaSource);
|
player.setMediaSources(ImmutableList.of(mediaSource1, mediaSource2));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
runUntilPlaybackState(player, Player.STATE_ENDED);
|
runUntilPlaybackState(player, Player.STATE_ENDED);
|
||||||
|
|
||||||
@ -388,7 +387,7 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
period1 /* ENDED */)
|
period1 /* ENDED */)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_TIMELINE_CHANGED))
|
assertThat(listener.getEvents(EVENT_TIMELINE_CHANGED))
|
||||||
.containsExactly(WINDOW_0 /* PLAYLIST_CHANGED */, period0 /* SOURCE_UPDATE */)
|
.containsExactly(WINDOW_0 /* PLAYLIST_CHANGED */, WINDOW_0 /* SOURCE_UPDATE */)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_POSITION_DISCONTINUITY)).containsExactly(period1);
|
assertThat(listener.getEvents(EVENT_POSITION_DISCONTINUITY)).containsExactly(period1);
|
||||||
assertThat(listener.getEvents(EVENT_IS_LOADING_CHANGED))
|
assertThat(listener.getEvents(EVENT_IS_LOADING_CHANGED))
|
||||||
@ -435,18 +434,18 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void seekToOtherPeriod() throws Exception {
|
public void seekToOtherPeriod() throws Exception {
|
||||||
MediaSource mediaSource =
|
MediaSource mediaSource1 =
|
||||||
new ConcatenatingMediaSource(
|
|
||||||
new FakeMediaSource(
|
new FakeMediaSource(
|
||||||
SINGLE_PERIOD_TIMELINE,
|
SINGLE_PERIOD_TIMELINE,
|
||||||
ExoPlayerTestRunner.VIDEO_FORMAT,
|
ExoPlayerTestRunner.VIDEO_FORMAT,
|
||||||
ExoPlayerTestRunner.AUDIO_FORMAT),
|
ExoPlayerTestRunner.AUDIO_FORMAT);
|
||||||
new FakeMediaSource(SINGLE_PERIOD_TIMELINE, ExoPlayerTestRunner.AUDIO_FORMAT));
|
MediaSource mediaSource2 =
|
||||||
|
new FakeMediaSource(SINGLE_PERIOD_TIMELINE, ExoPlayerTestRunner.AUDIO_FORMAT);
|
||||||
ExoPlayer player = setupPlayer();
|
ExoPlayer player = setupPlayer();
|
||||||
TestAnalyticsListener listener = new TestAnalyticsListener();
|
TestAnalyticsListener listener = new TestAnalyticsListener();
|
||||||
player.addAnalyticsListener(listener);
|
player.addAnalyticsListener(listener);
|
||||||
|
|
||||||
player.setMediaSource(mediaSource);
|
player.setMediaSources(ImmutableList.of(mediaSource1, mediaSource2));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
// Wait until second period has fully loaded to assert loading events.
|
// Wait until second period has fully loaded to assert loading events.
|
||||||
runUntilIsLoading(player, /* expectedIsLoading= */ true);
|
runUntilIsLoading(player, /* expectedIsLoading= */ true);
|
||||||
@ -466,7 +465,7 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
period1 /* ENDED */)
|
period1 /* ENDED */)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_TIMELINE_CHANGED))
|
assertThat(listener.getEvents(EVENT_TIMELINE_CHANGED))
|
||||||
.containsExactly(WINDOW_0 /* PLAYLIST_CHANGED */, period0 /* SOURCE_UPDATE */)
|
.containsExactly(WINDOW_0 /* PLAYLIST_CHANGED */, WINDOW_0 /* SOURCE_UPDATE */)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_POSITION_DISCONTINUITY)).containsExactly(period1);
|
assertThat(listener.getEvents(EVENT_POSITION_DISCONTINUITY)).containsExactly(period1);
|
||||||
assertThat(listener.getEvents(EVENT_SEEK_STARTED)).containsExactly(period0);
|
assertThat(listener.getEvents(EVENT_SEEK_STARTED)).containsExactly(period0);
|
||||||
@ -519,20 +518,20 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void seekBackAfterReadingAhead() throws Exception {
|
public void seekBackAfterReadingAhead() throws Exception {
|
||||||
MediaSource mediaSource =
|
MediaSource mediaSource1 =
|
||||||
new ConcatenatingMediaSource(
|
new FakeMediaSource(SINGLE_PERIOD_TIMELINE, ExoPlayerTestRunner.VIDEO_FORMAT);
|
||||||
new FakeMediaSource(SINGLE_PERIOD_TIMELINE, ExoPlayerTestRunner.VIDEO_FORMAT),
|
MediaSource mediaSource2 =
|
||||||
new FakeMediaSource(
|
new FakeMediaSource(
|
||||||
SINGLE_PERIOD_TIMELINE,
|
SINGLE_PERIOD_TIMELINE,
|
||||||
ExoPlayerTestRunner.VIDEO_FORMAT,
|
ExoPlayerTestRunner.VIDEO_FORMAT,
|
||||||
ExoPlayerTestRunner.AUDIO_FORMAT));
|
ExoPlayerTestRunner.AUDIO_FORMAT);
|
||||||
long windowDurationMs =
|
long windowDurationMs =
|
||||||
SINGLE_PERIOD_TIMELINE.getWindow(/* windowIndex= */ 0, new Window()).getDurationMs();
|
SINGLE_PERIOD_TIMELINE.getWindow(/* windowIndex= */ 0, new Window()).getDurationMs();
|
||||||
ExoPlayer player = setupPlayer();
|
ExoPlayer player = setupPlayer();
|
||||||
TestAnalyticsListener listener = new TestAnalyticsListener();
|
TestAnalyticsListener listener = new TestAnalyticsListener();
|
||||||
player.addAnalyticsListener(listener);
|
player.addAnalyticsListener(listener);
|
||||||
|
|
||||||
player.setMediaSource(mediaSource);
|
player.setMediaSources(ImmutableList.of(mediaSource1, mediaSource2));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
runUntilPlaybackState(player, Player.STATE_READY);
|
runUntilPlaybackState(player, Player.STATE_READY);
|
||||||
playUntilPosition(player, /* mediaItemIndex= */ 0, windowDurationMs - 100);
|
playUntilPosition(player, /* mediaItemIndex= */ 0, windowDurationMs - 100);
|
||||||
@ -552,7 +551,7 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
period1Seq2 /* ENDED */)
|
period1Seq2 /* ENDED */)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_TIMELINE_CHANGED))
|
assertThat(listener.getEvents(EVENT_TIMELINE_CHANGED))
|
||||||
.containsExactly(WINDOW_0 /* PLAYLIST_CHANGED */, period0 /* SOURCE_UPDATE */)
|
.containsExactly(WINDOW_0 /* PLAYLIST_CHANGED */, WINDOW_0 /* SOURCE_UPDATE */)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_POSITION_DISCONTINUITY))
|
assertThat(listener.getEvents(EVENT_POSITION_DISCONTINUITY))
|
||||||
.containsExactly(period0, period1Seq2)
|
.containsExactly(period0, period1Seq2)
|
||||||
@ -802,21 +801,18 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
public void dynamicTimelineChange() throws Exception {
|
public void dynamicTimelineChange() throws Exception {
|
||||||
MediaSource childMediaSource =
|
MediaSource childMediaSource =
|
||||||
new FakeMediaSource(SINGLE_PERIOD_TIMELINE, ExoPlayerTestRunner.VIDEO_FORMAT);
|
new FakeMediaSource(SINGLE_PERIOD_TIMELINE, ExoPlayerTestRunner.VIDEO_FORMAT);
|
||||||
final ConcatenatingMediaSource concatenatedMediaSource =
|
|
||||||
new ConcatenatingMediaSource(childMediaSource, childMediaSource);
|
|
||||||
long windowDurationMs =
|
long windowDurationMs =
|
||||||
SINGLE_PERIOD_TIMELINE.getWindow(/* windowIndex= */ 0, new Window()).getDurationMs();
|
SINGLE_PERIOD_TIMELINE.getWindow(/* windowIndex= */ 0, new Window()).getDurationMs();
|
||||||
ExoPlayer player = setupPlayer();
|
ExoPlayer player = setupPlayer();
|
||||||
TestAnalyticsListener listener = new TestAnalyticsListener();
|
TestAnalyticsListener listener = new TestAnalyticsListener();
|
||||||
player.addAnalyticsListener(listener);
|
player.addAnalyticsListener(listener);
|
||||||
|
|
||||||
player.setMediaSource(concatenatedMediaSource);
|
player.setMediaSources(ImmutableList.of(childMediaSource, childMediaSource));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
runUntilPlaybackState(player, Player.STATE_READY);
|
runUntilPlaybackState(player, Player.STATE_READY);
|
||||||
// Ensure second period is already being read from.
|
// Ensure second period is already being read from.
|
||||||
playUntilPosition(player, /* mediaItemIndex= */ 0, /* positionMs= */ windowDurationMs - 100);
|
playUntilPosition(player, /* mediaItemIndex= */ 0, /* positionMs= */ windowDurationMs - 100);
|
||||||
concatenatedMediaSource.moveMediaSource(/* currentIndex= */ 0, /* newIndex= */ 1);
|
player.moveMediaItem(/* currentIndex= */ 0, /* newIndex= */ 1);
|
||||||
runUntilTimelineChanged(player);
|
|
||||||
runUntilPlaybackState(player, Player.STATE_READY);
|
runUntilPlaybackState(player, Player.STATE_READY);
|
||||||
player.play();
|
player.play();
|
||||||
runUntilPlaybackState(player, Player.STATE_ENDED);
|
runUntilPlaybackState(player, Player.STATE_ENDED);
|
||||||
@ -834,8 +830,8 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
assertThat(listener.getEvents(EVENT_TIMELINE_CHANGED))
|
assertThat(listener.getEvents(EVENT_TIMELINE_CHANGED))
|
||||||
.containsExactly(
|
.containsExactly(
|
||||||
WINDOW_0 /* PLAYLIST_CHANGED */,
|
WINDOW_0 /* PLAYLIST_CHANGED */,
|
||||||
window0Period1Seq0 /* SOURCE_UPDATE (concatenated timeline replaces placeholder) */,
|
WINDOW_0 /* SOURCE_UPDATE (timeline replaces placeholder) */,
|
||||||
period1Seq0 /* SOURCE_UPDATE (child sources in concatenating source moved) */)
|
period1Seq0 /* PLAYLIST_CHANGED (sources in playlist moved) */)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_IS_LOADING_CHANGED))
|
assertThat(listener.getEvents(EVENT_IS_LOADING_CHANGED))
|
||||||
.containsExactly(window0Period1Seq0, window0Period1Seq0, period1Seq0, period1Seq0);
|
.containsExactly(window0Period1Seq0, window0Period1Seq0, period1Seq0, period1Seq0);
|
||||||
@ -852,7 +848,7 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
.containsExactly(window0Period1Seq0, window1Period0Seq1)
|
.containsExactly(window0Period1Seq0, window1Period0Seq1)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_VIDEO_ENABLED))
|
assertThat(listener.getEvents(EVENT_VIDEO_ENABLED))
|
||||||
.containsExactly(window0Period1Seq0, window0Period1Seq0)
|
.containsExactly(window0Period1Seq0, period1Seq0)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_VIDEO_DECODER_INITIALIZED))
|
assertThat(listener.getEvents(EVENT_VIDEO_DECODER_INITIALIZED))
|
||||||
.containsExactly(window0Period1Seq0, window1Period0Seq1)
|
.containsExactly(window0Period1Seq0, window1Period0Seq1)
|
||||||
@ -860,20 +856,20 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
assertThat(listener.getEvents(EVENT_VIDEO_INPUT_FORMAT_CHANGED))
|
assertThat(listener.getEvents(EVENT_VIDEO_INPUT_FORMAT_CHANGED))
|
||||||
.containsExactly(window0Period1Seq0, window1Period0Seq1)
|
.containsExactly(window0Period1Seq0, window1Period0Seq1)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_VIDEO_DISABLED)).containsExactly(window0Period1Seq0);
|
assertThat(listener.getEvents(EVENT_VIDEO_DISABLED)).containsExactly(period1Seq0);
|
||||||
assertThat(listener.getEvents(EVENT_DROPPED_VIDEO_FRAMES))
|
assertThat(listener.getEvents(EVENT_DROPPED_VIDEO_FRAMES))
|
||||||
.containsExactly(window0Period1Seq0, period1Seq0)
|
.containsExactly(period1Seq0, period1Seq0)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_VIDEO_SIZE_CHANGED))
|
assertThat(listener.getEvents(EVENT_VIDEO_SIZE_CHANGED))
|
||||||
.containsExactly(
|
.containsExactly(
|
||||||
window0Period1Seq0, // First frame rendered
|
window0Period1Seq0, // First frame rendered
|
||||||
window0Period1Seq0) // Renderer disabled after timeline update
|
period1Seq0) // Renderer disabled after timeline update
|
||||||
.inOrder();
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_RENDERED_FIRST_FRAME))
|
assertThat(listener.getEvents(EVENT_RENDERED_FIRST_FRAME))
|
||||||
.containsExactly(window0Period1Seq0, window1Period0Seq1)
|
.containsExactly(window0Period1Seq0, window1Period0Seq1)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
assertThat(listener.getEvents(EVENT_VIDEO_FRAME_PROCESSING_OFFSET))
|
assertThat(listener.getEvents(EVENT_VIDEO_FRAME_PROCESSING_OFFSET))
|
||||||
.containsExactly(window0Period1Seq0, period1Seq0)
|
.containsExactly(period1Seq0, period1Seq0)
|
||||||
.inOrder();
|
.inOrder();
|
||||||
listener.assertNoMoreEvents();
|
listener.assertNoMoreEvents();
|
||||||
}
|
}
|
||||||
@ -1384,18 +1380,16 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
uuid -> new FakeExoMediaDrm.Builder().setEnforceValidKeyResponses(false).build())
|
uuid -> new FakeExoMediaDrm.Builder().setEnforceValidKeyResponses(false).build())
|
||||||
.setMultiSession(true)
|
.setMultiSession(true)
|
||||||
.build(mediaDrmCallback);
|
.build(mediaDrmCallback);
|
||||||
MediaSource mediaSource =
|
MediaSource mediaSource1 =
|
||||||
new ConcatenatingMediaSource(
|
new FakeMediaSource(SINGLE_PERIOD_TIMELINE, blockingDrmSessionManager, VIDEO_FORMAT_DRM_1);
|
||||||
new FakeMediaSource(
|
MediaSource mediaSource2 =
|
||||||
SINGLE_PERIOD_TIMELINE, blockingDrmSessionManager, VIDEO_FORMAT_DRM_1),
|
new FakeMediaSource(SINGLE_PERIOD_TIMELINE, blockingDrmSessionManager, VIDEO_FORMAT_DRM_1);
|
||||||
new FakeMediaSource(
|
|
||||||
SINGLE_PERIOD_TIMELINE, blockingDrmSessionManager, VIDEO_FORMAT_DRM_1));
|
|
||||||
ExoPlayer player = setupPlayer();
|
ExoPlayer player = setupPlayer();
|
||||||
TestAnalyticsListener listener = new TestAnalyticsListener();
|
TestAnalyticsListener listener = new TestAnalyticsListener();
|
||||||
player.addAnalyticsListener(listener);
|
player.addAnalyticsListener(listener);
|
||||||
|
|
||||||
player.play();
|
player.play();
|
||||||
player.setMediaSource(mediaSource);
|
player.setMediaSources(ImmutableList.of(mediaSource1, mediaSource2));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
// Wait for the media to be fully buffered before unblocking the DRM key request. This
|
// Wait for the media to be fully buffered before unblocking the DRM key request. This
|
||||||
// ensures both periods report the same load event (because period1's DRM session is
|
// ensures both periods report the same load event (because period1's DRM session is
|
||||||
@ -1423,19 +1417,19 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void drmEvents_periodWithDifferentDrmData_keysLoadedAgain() throws Exception {
|
public void drmEvents_periodWithDifferentDrmData_keysLoadedAgain() throws Exception {
|
||||||
MediaSource mediaSource =
|
MediaSource mediaSource1 =
|
||||||
new ConcatenatingMediaSource(
|
new FakeMediaSource(SINGLE_PERIOD_TIMELINE, drmSessionManager, VIDEO_FORMAT_DRM_1);
|
||||||
new FakeMediaSource(SINGLE_PERIOD_TIMELINE, drmSessionManager, VIDEO_FORMAT_DRM_1),
|
MediaSource mediaSource2 =
|
||||||
new FakeMediaSource(
|
new FakeMediaSource(
|
||||||
SINGLE_PERIOD_TIMELINE,
|
SINGLE_PERIOD_TIMELINE,
|
||||||
drmSessionManager,
|
drmSessionManager,
|
||||||
VIDEO_FORMAT_DRM_1.buildUpon().setDrmInitData(DRM_DATA_2).build()));
|
VIDEO_FORMAT_DRM_1.buildUpon().setDrmInitData(DRM_DATA_2).build());
|
||||||
ExoPlayer player = setupPlayer();
|
ExoPlayer player = setupPlayer();
|
||||||
TestAnalyticsListener listener = new TestAnalyticsListener();
|
TestAnalyticsListener listener = new TestAnalyticsListener();
|
||||||
player.addAnalyticsListener(listener);
|
player.addAnalyticsListener(listener);
|
||||||
|
|
||||||
player.play();
|
player.play();
|
||||||
player.setMediaSource(mediaSource);
|
player.setMediaSources(ImmutableList.of(mediaSource1, mediaSource2));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
runUntilPlaybackState(player, Player.STATE_ENDED);
|
runUntilPlaybackState(player, Player.STATE_ENDED);
|
||||||
|
|
||||||
@ -1511,7 +1505,7 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
player.addAnalyticsListener(listener);
|
player.addAnalyticsListener(listener);
|
||||||
|
|
||||||
player.play();
|
player.play();
|
||||||
player.setMediaSource(new ConcatenatingMediaSource(source0, source1));
|
player.setMediaSources(ImmutableList.of(source0, source1));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
runUntilError(player);
|
runUntilError(player);
|
||||||
|
|
||||||
@ -1547,7 +1541,7 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
player.addAnalyticsListener(listener);
|
player.addAnalyticsListener(listener);
|
||||||
|
|
||||||
player.play();
|
player.play();
|
||||||
player.setMediaSource(new ConcatenatingMediaSource(source0, source1));
|
player.setMediaSources(ImmutableList.of(source0, source1));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
runUntilError(player);
|
runUntilError(player);
|
||||||
|
|
||||||
@ -1590,7 +1584,7 @@ public final class DefaultAnalyticsCollectorTest {
|
|||||||
player.addAnalyticsListener(listener);
|
player.addAnalyticsListener(listener);
|
||||||
|
|
||||||
player.play();
|
player.play();
|
||||||
player.setMediaSource(new ConcatenatingMediaSource(source, source));
|
player.setMediaSources(ImmutableList.of(source, source));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
runUntilError(player);
|
runUntilError(player);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user