use of com.google.android.exoplayer2.source.MediaSource.MediaPeriodId in project ExoPlayer by google.
the class DefaultPlaybackSessionManagerTest method positionDiscontinuity_toNewWindow_finishesOnlyPastSessions.
@Test
public void positionDiscontinuity_toNewWindow_finishesOnlyPastSessions() {
Timeline timeline = new FakeTimeline(/* windowCount= */
4);
EventTime eventTime1 = createEventTime(timeline, /* windowIndex= */
0, new MediaPeriodId(timeline.getUidOfPeriod(/* periodIndex= */
0), /* windowSequenceNumber= */
0));
EventTime eventTime2 = createEventTime(timeline, /* windowIndex= */
1, new MediaPeriodId(timeline.getUidOfPeriod(/* periodIndex= */
1), /* windowSequenceNumber= */
1));
EventTime eventTime3 = createEventTime(timeline, /* windowIndex= */
2, new MediaPeriodId(timeline.getUidOfPeriod(/* periodIndex= */
2), /* windowSequenceNumber= */
2));
EventTime eventTime4 = createEventTime(timeline, /* windowIndex= */
3, new MediaPeriodId(timeline.getUidOfPeriod(/* periodIndex= */
3), /* windowSequenceNumber= */
3));
sessionManager.updateSessionsWithTimelineChange(eventTime1);
sessionManager.updateSessions(eventTime1);
sessionManager.updateSessions(eventTime2);
sessionManager.updateSessions(eventTime3);
sessionManager.updateSessions(eventTime4);
String sessionId1 = sessionManager.getSessionForMediaPeriodId(timeline, eventTime1.mediaPeriodId);
String sessionId2 = sessionManager.getSessionForMediaPeriodId(timeline, eventTime2.mediaPeriodId);
sessionManager.updateSessionsWithDiscontinuity(eventTime3, Player.DISCONTINUITY_REASON_SEEK);
verify(mockListener).onSessionCreated(eventTime1, sessionId1);
verify(mockListener).onSessionActive(eventTime1, sessionId1);
verify(mockListener).onSessionCreated(eventTime2, sessionId2);
verify(mockListener).onSessionCreated(eq(eventTime3), anyString());
verify(mockListener).onSessionCreated(eq(eventTime4), anyString());
verify(mockListener).onSessionFinished(eventTime3, sessionId1, /* automaticTransitionToNextPlayback= */
false);
verify(mockListener).onSessionFinished(eventTime3, sessionId2, /* automaticTransitionToNextPlayback= */
false);
verify(mockListener).onSessionActive(eq(eventTime3), anyString());
verifyNoMoreInteractions(mockListener);
}
use of com.google.android.exoplayer2.source.MediaSource.MediaPeriodId in project ExoPlayer by google.
the class DefaultPlaybackSessionManagerTest method positionDiscontinuity_fromAdToContent_finishesAd.
@Test
public void positionDiscontinuity_fromAdToContent_finishesAd() {
Timeline adTimeline = new FakeTimeline(new TimelineWindowDefinition(/* periodCount= */
1, /* id= */
0, /* isSeekable= */
true, /* isDynamic= */
false, /* durationUs= */
10 * C.MICROS_PER_SECOND, new AdPlaybackState(/* adsId= */
new Object(), /* adGroupTimesUs=... */
0, 5 * C.MICROS_PER_SECOND).withAdCount(/* adGroupIndex= */
0, /* adCount= */
1).withAdCount(/* adGroupIndex= */
1, /* adCount= */
1)));
EventTime adEventTime1 = createEventTime(adTimeline, /* windowIndex= */
0, new MediaPeriodId(adTimeline.getUidOfPeriod(/* periodIndex= */
0), /* adGroupIndex= */
0, /* adIndexInAdGroup= */
0, /* windowSequenceNumber= */
0));
EventTime adEventTime2 = createEventTime(adTimeline, /* windowIndex= */
0, new MediaPeriodId(adTimeline.getUidOfPeriod(/* periodIndex= */
0), /* adGroupIndex= */
1, /* adIndexInAdGroup= */
0, /* windowSequenceNumber= */
0));
EventTime contentEventTimeDuringPreroll = createEventTime(adTimeline, /* windowIndex= */
0, /* eventMediaPeriodId= */
new MediaPeriodId(adTimeline.getUidOfPeriod(/* periodIndex= */
0), /* windowSequenceNumber= */
0, /* nextAdGroupIndex= */
0), /* currentMediaPeriodId= */
new MediaPeriodId(adTimeline.getUidOfPeriod(/* periodIndex= */
0), /* adGroupIndex= */
0, /* adIndexInAdGroup= */
0, /* windowSequenceNumber= */
0));
EventTime contentEventTimeBetweenAds = createEventTime(adTimeline, /* windowIndex= */
0, new MediaPeriodId(adTimeline.getUidOfPeriod(/* periodIndex= */
0), /* windowSequenceNumber= */
0, /* nextAdGroupIndex= */
1));
sessionManager.updateSessionsWithTimelineChange(adEventTime1);
sessionManager.updateSessions(adEventTime2);
String adSessionId1 = sessionManager.getSessionForMediaPeriodId(adTimeline, adEventTime1.mediaPeriodId);
String contentSessionId = sessionManager.getSessionForMediaPeriodId(adTimeline, contentEventTimeDuringPreroll.mediaPeriodId);
sessionManager.updateSessionsWithDiscontinuity(contentEventTimeBetweenAds, Player.DISCONTINUITY_REASON_AUTO_TRANSITION);
InOrder inOrder = inOrder(mockListener);
inOrder.verify(mockListener).onSessionCreated(contentEventTimeDuringPreroll, contentSessionId);
inOrder.verify(mockListener).onSessionCreated(adEventTime1, adSessionId1);
inOrder.verify(mockListener).onSessionActive(adEventTime1, adSessionId1);
inOrder.verify(mockListener).onAdPlaybackStarted(adEventTime1, contentSessionId, adSessionId1);
inOrder.verify(mockListener).onSessionCreated(eq(adEventTime2), anyString());
inOrder.verify(mockListener).onSessionFinished(contentEventTimeBetweenAds, adSessionId1, /* automaticTransitionToNextPlayback= */
true);
inOrder.verify(mockListener).onSessionActive(eq(contentEventTimeBetweenAds), anyString());
inOrder.verifyNoMoreInteractions();
}
use of com.google.android.exoplayer2.source.MediaSource.MediaPeriodId in project ExoPlayer by google.
the class DefaultPlaybackSessionManagerTest method belongsToSession_withOtherWindowIndex_returnsFalse.
@Test
public void belongsToSession_withOtherWindowIndex_returnsFalse() {
Timeline timeline = new FakeTimeline(/* windowCount= */
2);
EventTime eventTime = createEventTime(timeline, /* windowIndex= */
0, /* mediaPeriodId= */
null);
EventTime eventTimeOtherWindow = createEventTime(timeline, /* windowIndex= */
1, /* mediaPeriodId= */
null);
MediaPeriodId mediaPeriodId = new MediaPeriodId(timeline.getUidOfPeriod(/* periodIndex= */
1), /* windowSequenceNumber= */
1);
EventTime eventTimeWithOtherMediaPeriodId = createEventTime(timeline, /* windowIndex= */
1, mediaPeriodId);
sessionManager.updateSessions(eventTime);
ArgumentCaptor<String> sessionId = ArgumentCaptor.forClass(String.class);
verify(mockListener).onSessionCreated(eq(eventTime), sessionId.capture());
assertThat(sessionManager.belongsToSession(eventTimeOtherWindow, sessionId.getValue())).isFalse();
assertThat(sessionManager.belongsToSession(eventTimeWithOtherMediaPeriodId, sessionId.getValue())).isFalse();
}
use of com.google.android.exoplayer2.source.MediaSource.MediaPeriodId in project ExoPlayer by google.
the class DefaultPlaybackSessionManagerTest method belongsToSession_withAd_returnsFalse.
@Test
public void belongsToSession_withAd_returnsFalse() {
Timeline timeline = new FakeTimeline(new TimelineWindowDefinition(/* periodCount= */
1, /* id= */
new Object(), /* isSeekable= */
true, /* isDynamic= */
false, /* durationUs= */
10_000_000, FakeTimeline.createAdPlaybackState(/* adsPerAdGroup= */
1, /* adGroupTimesUs... */
0)));
MediaPeriodId contentMediaPeriodId = new MediaPeriodId(timeline.getUidOfPeriod(/* periodIndex= */
0), /* windowSequenceNumber= */
0);
MediaPeriodId adMediaPeriodId = new MediaPeriodId(timeline.getUidOfPeriod(/* periodIndex= */
0), /* adGroupIndex= */
0, /* adIndexInAdGroup= */
0, /* windowSequenceNumber= */
1);
EventTime contentEventTime = createEventTime(timeline, /* windowIndex= */
0, contentMediaPeriodId);
EventTime adEventTime = createEventTime(timeline, /* windowIndex= */
0, adMediaPeriodId);
sessionManager.updateSessions(contentEventTime);
sessionManager.updateSessions(adEventTime);
ArgumentCaptor<String> sessionId1 = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<String> sessionId2 = ArgumentCaptor.forClass(String.class);
verify(mockListener).onSessionCreated(eq(contentEventTime), sessionId1.capture());
verify(mockListener).onSessionCreated(eq(adEventTime), sessionId2.capture());
assertThat(sessionManager.belongsToSession(adEventTime, sessionId1.getValue())).isFalse();
assertThat(sessionManager.belongsToSession(contentEventTime, sessionId2.getValue())).isFalse();
assertThat(sessionManager.belongsToSession(adEventTime, sessionId2.getValue())).isTrue();
}
use of com.google.android.exoplayer2.source.MediaSource.MediaPeriodId in project ExoPlayer by google.
the class DefaultPlaybackSessionManagerTest method timelineUpdate_toNewMediaWithWindowIndexOnly_finishesOtherSessions.
@Test
public void timelineUpdate_toNewMediaWithWindowIndexOnly_finishesOtherSessions() {
Timeline firstTimeline = new FakeTimeline(new TimelineWindowDefinition(/* periodCount= */
1, /* id= */
1000), new TimelineWindowDefinition(/* periodCount= */
1, /* id= */
2000), new TimelineWindowDefinition(/* periodCount= */
1, /* id= */
3000));
EventTime eventTimeFirstTimelineWithPeriodId = createEventTime(firstTimeline, /* windowIndex= */
0, new MediaPeriodId(firstTimeline.getUidOfPeriod(/* periodIndex= */
0), /* windowSequenceNumber= */
0));
EventTime eventTimeFirstTimelineWindowOnly1 = createEventTime(firstTimeline, /* windowIndex= */
1, /* mediaPeriodId= */
null);
EventTime eventTimeFirstTimelineWindowOnly2 = createEventTime(firstTimeline, /* windowIndex= */
2, /* mediaPeriodId= */
null);
Timeline secondTimeline = new FakeTimeline(new TimelineWindowDefinition(/* periodCount= */
1, /* id= */
2000), new TimelineWindowDefinition(/* periodCount= */
1, /* id= */
4000));
EventTime eventTimeSecondTimeline = createEventTime(secondTimeline, /* windowIndex= */
0, /* mediaPeriodId= */
null);
sessionManager.updateSessionsWithTimelineChange(eventTimeFirstTimelineWithPeriodId);
sessionManager.updateSessions(eventTimeFirstTimelineWindowOnly1);
sessionManager.updateSessions(eventTimeFirstTimelineWindowOnly2);
sessionManager.updateSessionsWithTimelineChange(eventTimeSecondTimeline);
InOrder inOrder = inOrder(mockListener);
ArgumentCaptor<String> firstId = ArgumentCaptor.forClass(String.class);
inOrder.verify(mockListener).onSessionCreated(eq(eventTimeFirstTimelineWithPeriodId), firstId.capture());
inOrder.verify(mockListener).onSessionActive(eventTimeFirstTimelineWithPeriodId, firstId.getValue());
ArgumentCaptor<String> secondId = ArgumentCaptor.forClass(String.class);
inOrder.verify(mockListener).onSessionCreated(eq(eventTimeFirstTimelineWindowOnly1), secondId.capture());
ArgumentCaptor<String> thirdId = ArgumentCaptor.forClass(String.class);
inOrder.verify(mockListener).onSessionCreated(eq(eventTimeFirstTimelineWindowOnly2), thirdId.capture());
// The sessions may finish at the same time, so the order of these two callbacks is undefined.
ArgumentCaptor<String> finishedSessions = ArgumentCaptor.forClass(String.class);
inOrder.verify(mockListener, times(2)).onSessionFinished(eq(eventTimeSecondTimeline), finishedSessions.capture(), /* automaticTransitionToNextPlayback= */
eq(false));
assertThat(finishedSessions.getAllValues()).containsExactly(firstId.getValue(), thirdId.getValue());
inOrder.verify(mockListener).onSessionActive(eventTimeSecondTimeline, secondId.getValue());
inOrder.verifyNoMoreInteractions();
}
Aggregations