private MediaPeriodInfo getMediaPeriodInfoForAd( Object periodUid, int adGroupIndex, int adIndexInAdGroup, long contentPositionUs, long windowSequenceNumber) { MediaPeriodId id = new MediaPeriodId(periodUid, adGroupIndex, adIndexInAdGroup, windowSequenceNumber); boolean isLastInPeriod = isLastInPeriod(id); boolean isLastInTimeline = isLastInTimeline(id, isLastInPeriod); long durationUs = timeline .getPeriodByUid(id.periodUid, period) .getAdDurationUs(id.adGroupIndex, id.adIndexInAdGroup); long startPositionUs = adIndexInAdGroup == period.getFirstAdIndexToPlay(adGroupIndex) ? period.getAdResumePositionUs() : 0; return new MediaPeriodInfo( id, startPositionUs, contentPositionUs, durationUs, isLastInPeriod, isLastInTimeline); }
/** * Returns new media period info based on specified {@code mediaPeriodInfo} but taking into * account the current timeline. This method must only be called if the period is still part of * the current timeline. * * @param info Media period info for a media period based on an old timeline. * @return The updated media period info for the current timeline. */ public MediaPeriodInfo getUpdatedMediaPeriodInfo(MediaPeriodInfo info) { boolean isLastInPeriod = isLastInPeriod(info.id); boolean isLastInTimeline = isLastInTimeline(info.id, isLastInPeriod); timeline.getPeriodByUid(info.id.periodUid, period); long durationUs = info.id.isAd() ? period.getAdDurationUs(info.id.adGroupIndex, info.id.adIndexInAdGroup) : (info.id.endPositionUs == C.TIME_END_OF_SOURCE ? period.getDurationUs() : info.id.endPositionUs); return new MediaPeriodInfo( info.id, info.startPositionUs, info.contentPositionUs, durationUs, isLastInPeriod, isLastInTimeline); }
@Override public long getDuration() { if (timeline.isEmpty()) { return C.INDEX_UNSET; } if (isPlayingAd()) { long adDurationUs = timeline.getPeriod(0, period).getAdDurationUs(adGroupIndex, adIndexInAdGroup); return C.usToMs(adDurationUs); } else { return timeline.getWindow(getCurrentWindowIndex(), window).getDurationMs(); } }
@Override public long getDuration() { if (isPlayingAd()) { MediaPeriodId periodId = playbackInfo.periodId; playbackInfo.timeline.getPeriodByUid(periodId.periodUid, period); long adDurationUs = period.getAdDurationUs(periodId.adGroupIndex, periodId.adIndexInAdGroup); return C.usToMs(adDurationUs); } return getContentDuration(); }