SingleSampleMediaSource.java 源代码
package com.mbridge.msdk.playercommon.exoplayer2.source;
import android.net.Uri;
import android.os.Handler;
import com.mbridge.msdk.playercommon.exoplayer2.ExoPlayer;
import com.mbridge.msdk.playercommon.exoplayer2.Format;
import com.mbridge.msdk.playercommon.exoplayer2.Timeline;
import com.mbridge.msdk.playercommon.exoplayer2.source.MediaSource;
import com.mbridge.msdk.playercommon.exoplayer2.source.MediaSourceEventListener;
import com.mbridge.msdk.playercommon.exoplayer2.upstream.Allocator;
import com.mbridge.msdk.playercommon.exoplayer2.upstream.DataSource;
import com.mbridge.msdk.playercommon.exoplayer2.upstream.DataSpec;
import com.mbridge.msdk.playercommon.exoplayer2.util.Assertions;
import java.io.IOException;
public final class SingleSampleMediaSource extends BaseMediaSource {
public static final int DEFAULT_MIN_LOADABLE_RETRY_COUNT = 3;
private final DataSource.Factory dataSourceFactory;
private final DataSpec dataSpec;
private final long durationUs;
private final Format format;
private final int minLoadableRetryCount;
private final Timeline timeline;
private final boolean treatLoadErrorsAsEndOfStream;
public interface EventListener {
void onLoadError(int i6, IOException iOException);
}
private static final class EventListenerWrapper extends DefaultMediaSourceEventListener {
private final EventListener eventListener;
private final int eventSourceId;
public EventListenerWrapper(EventListener eventListener, int i6) {
this.eventListener = (EventListener) Assertions.checkNotNull(eventListener);
this.eventSourceId = i6;
}
@Override
public final void onLoadError(int i6, MediaSource.MediaPeriodId mediaPeriodId, MediaSourceEventListener.LoadEventInfo loadEventInfo, MediaSourceEventListener.MediaLoadData mediaLoadData, IOException iOException, boolean z6) {
this.eventListener.onLoadError(this.eventSourceId, iOException);
}
}
@Override
public final MediaPeriod createPeriod(MediaSource.MediaPeriodId mediaPeriodId, Allocator allocator) {
boolean z6;
if (mediaPeriodId.periodIndex == 0) {
z6 = true;
} else {
z6 = false;
}
Assertions.checkArgument(z6);
return new SingleSampleMediaPeriod(this.dataSpec, this.dataSourceFactory, this.format, this.durationUs, this.minLoadableRetryCount, createEventDispatcher(mediaPeriodId), this.treatLoadErrorsAsEndOfStream);
}
@Override
public final void maybeThrowSourceInfoRefreshError() throws IOException {
}
@Override
public final void prepareSourceInternal(ExoPlayer exoPlayer, boolean z6) {
refreshSourceInfo(this.timeline, null);
}
@Override
public final void releasePeriod(MediaPeriod mediaPeriod) {
((SingleSampleMediaPeriod) mediaPeriod).release();
}
@Override
public final void releaseSourceInternal() {
}
public static final class Factory {
private final DataSource.Factory dataSourceFactory;
private boolean isCreateCalled;
private int minLoadableRetryCount = 3;
private Object tag;
private boolean treatLoadErrorsAsEndOfStream;
public Factory(DataSource.Factory factory) {
this.dataSourceFactory = (DataSource.Factory) Assertions.checkNotNull(factory);
}
public final SingleSampleMediaSource createMediaSource(Uri uri, Format format, long j6) {
this.isCreateCalled = true;
return new SingleSampleMediaSource(uri, this.dataSourceFactory, format, j6, this.minLoadableRetryCount, this.treatLoadErrorsAsEndOfStream, this.tag);
}
public final Factory setMinLoadableRetryCount(int i6) {
Assertions.checkState(!this.isCreateCalled);
this.minLoadableRetryCount = i6;
return this;
}
public final Factory setTag(Object obj) {
Assertions.checkState(!this.isCreateCalled);
this.tag = obj;
return this;
}
public final Factory setTreatLoadErrorsAsEndOfStream(boolean z6) {
Assertions.checkState(!this.isCreateCalled);
this.treatLoadErrorsAsEndOfStream = z6;
return this;
}
public final SingleSampleMediaSource createMediaSource(Uri uri, Format format, long j6, Handler handler, MediaSourceEventListener mediaSourceEventListener) {
SingleSampleMediaSource createMediaSource = createMediaSource(uri, format, j6);
if (handler != null && mediaSourceEventListener != null) {
createMediaSource.addEventListener(handler, mediaSourceEventListener);
}
return createMediaSource;
}
}
public SingleSampleMediaSource(Uri uri, DataSource.Factory factory, Format format, long j6) {
this(uri, factory, format, j6, 3);
}
public SingleSampleMediaSource(Uri uri, DataSource.Factory factory, Format format, long j6, int i6) {
this(uri, factory, format, j6, i6, false, null);
}
public SingleSampleMediaSource(Uri uri, DataSource.Factory factory, Format format, long j6, int i6, Handler handler, EventListener eventListener, int i7, boolean z6) {
this(uri, factory, format, j6, i6, z6, null);
if (handler == null || eventListener == null) {
return;
}
addEventListener(handler, new EventListenerWrapper(eventListener, i7));
}
private SingleSampleMediaSource(Uri uri, DataSource.Factory factory, Format format, long j6, int i6, boolean z6, Object obj) {
this.dataSourceFactory = factory;
this.format = format;
this.durationUs = j6;
this.minLoadableRetryCount = i6;
this.treatLoadErrorsAsEndOfStream = z6;
this.dataSpec = new DataSpec(uri);
this.timeline = new SinglePeriodTimeline(j6, true, false, obj);
}
}