mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Add DownloadExecutor to SingleSampleMediaSource
This commit is contained in:
parent
45317394da
commit
2d05744333
@ -40,6 +40,7 @@ import androidx.media3.exoplayer.upstream.LoadErrorHandlingPolicy.LoadErrorInfo;
|
|||||||
import androidx.media3.exoplayer.upstream.Loader;
|
import androidx.media3.exoplayer.upstream.Loader;
|
||||||
import androidx.media3.exoplayer.upstream.Loader.LoadErrorAction;
|
import androidx.media3.exoplayer.upstream.Loader.LoadErrorAction;
|
||||||
import androidx.media3.exoplayer.upstream.Loader.Loadable;
|
import androidx.media3.exoplayer.upstream.Loader.Loadable;
|
||||||
|
import androidx.media3.exoplayer.util.ReleasableExecutor;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@ -80,7 +81,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
long durationUs,
|
long durationUs,
|
||||||
LoadErrorHandlingPolicy loadErrorHandlingPolicy,
|
LoadErrorHandlingPolicy loadErrorHandlingPolicy,
|
||||||
EventDispatcher eventDispatcher,
|
EventDispatcher eventDispatcher,
|
||||||
boolean treatLoadErrorsAsEndOfStream) {
|
boolean treatLoadErrorsAsEndOfStream,
|
||||||
|
@Nullable ReleasableExecutor downloadExecutor) {
|
||||||
this.dataSpec = dataSpec;
|
this.dataSpec = dataSpec;
|
||||||
this.dataSourceFactory = dataSourceFactory;
|
this.dataSourceFactory = dataSourceFactory;
|
||||||
this.transferListener = transferListener;
|
this.transferListener = transferListener;
|
||||||
@ -91,7 +93,10 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
this.treatLoadErrorsAsEndOfStream = treatLoadErrorsAsEndOfStream;
|
this.treatLoadErrorsAsEndOfStream = treatLoadErrorsAsEndOfStream;
|
||||||
tracks = new TrackGroupArray(new TrackGroup(format));
|
tracks = new TrackGroupArray(new TrackGroup(format));
|
||||||
sampleStreams = new ArrayList<>();
|
sampleStreams = new ArrayList<>();
|
||||||
loader = new Loader("SingleSampleMediaPeriod");
|
loader =
|
||||||
|
downloadExecutor != null
|
||||||
|
? new Loader(downloadExecutor)
|
||||||
|
: new Loader("SingleSampleMediaPeriod");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void release() {
|
public void release() {
|
||||||
|
@ -24,6 +24,7 @@ import androidx.media3.common.Format;
|
|||||||
import androidx.media3.common.MediaItem;
|
import androidx.media3.common.MediaItem;
|
||||||
import androidx.media3.common.MimeTypes;
|
import androidx.media3.common.MimeTypes;
|
||||||
import androidx.media3.common.Timeline;
|
import androidx.media3.common.Timeline;
|
||||||
|
import androidx.media3.common.util.Consumer;
|
||||||
import androidx.media3.common.util.UnstableApi;
|
import androidx.media3.common.util.UnstableApi;
|
||||||
import androidx.media3.datasource.DataSource;
|
import androidx.media3.datasource.DataSource;
|
||||||
import androidx.media3.datasource.DataSpec;
|
import androidx.media3.datasource.DataSpec;
|
||||||
@ -33,8 +34,11 @@ import androidx.media3.exoplayer.text.TextRenderer;
|
|||||||
import androidx.media3.exoplayer.upstream.Allocator;
|
import androidx.media3.exoplayer.upstream.Allocator;
|
||||||
import androidx.media3.exoplayer.upstream.DefaultLoadErrorHandlingPolicy;
|
import androidx.media3.exoplayer.upstream.DefaultLoadErrorHandlingPolicy;
|
||||||
import androidx.media3.exoplayer.upstream.LoadErrorHandlingPolicy;
|
import androidx.media3.exoplayer.upstream.LoadErrorHandlingPolicy;
|
||||||
|
import androidx.media3.exoplayer.util.ReleasableExecutor;
|
||||||
|
import com.google.common.base.Supplier;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated The only use for this class is subtitle playback, but it is only compatible with
|
* @deprecated The only use for this class is subtitle playback, but it is only compatible with
|
||||||
@ -56,6 +60,7 @@ public final class SingleSampleMediaSource extends BaseMediaSource {
|
|||||||
private boolean treatLoadErrorsAsEndOfStream;
|
private boolean treatLoadErrorsAsEndOfStream;
|
||||||
@Nullable private Object tag;
|
@Nullable private Object tag;
|
||||||
@Nullable private String trackId;
|
@Nullable private String trackId;
|
||||||
|
@Nullable private Supplier<ReleasableExecutor> downloadExecutorSupplier;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a factory for {@link SingleSampleMediaSource}s.
|
* Creates a factory for {@link SingleSampleMediaSource}s.
|
||||||
@ -127,6 +132,23 @@ public final class SingleSampleMediaSource extends BaseMediaSource {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a supplier for an {@link Executor} that is used for loading the media.
|
||||||
|
*
|
||||||
|
* @param downloadExecutor A {@link Supplier} that provides an externally managed {@link
|
||||||
|
* Executor} for downloading and extraction.
|
||||||
|
* @param downloadExecutorReleaser A callback triggered once a load task is finished and a
|
||||||
|
* supplied executor is no longer required.
|
||||||
|
* @return This factory, for convenience.
|
||||||
|
*/
|
||||||
|
@CanIgnoreReturnValue
|
||||||
|
public <T extends Executor> Factory setDownloadExecutor(
|
||||||
|
Supplier<T> downloadExecutor, Consumer<T> downloadExecutorReleaser) {
|
||||||
|
this.downloadExecutorSupplier =
|
||||||
|
() -> ReleasableExecutor.from(downloadExecutor.get(), downloadExecutorReleaser);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a new {@link SingleSampleMediaSource} using the current parameters.
|
* Returns a new {@link SingleSampleMediaSource} using the current parameters.
|
||||||
*
|
*
|
||||||
@ -143,7 +165,8 @@ public final class SingleSampleMediaSource extends BaseMediaSource {
|
|||||||
durationUs,
|
durationUs,
|
||||||
loadErrorHandlingPolicy,
|
loadErrorHandlingPolicy,
|
||||||
treatLoadErrorsAsEndOfStream,
|
treatLoadErrorsAsEndOfStream,
|
||||||
tag);
|
tag,
|
||||||
|
downloadExecutorSupplier);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,6 +178,7 @@ public final class SingleSampleMediaSource extends BaseMediaSource {
|
|||||||
private final boolean treatLoadErrorsAsEndOfStream;
|
private final boolean treatLoadErrorsAsEndOfStream;
|
||||||
private final Timeline timeline;
|
private final Timeline timeline;
|
||||||
private final MediaItem mediaItem;
|
private final MediaItem mediaItem;
|
||||||
|
@Nullable private final Supplier<ReleasableExecutor> downloadExecutorSupplier;
|
||||||
|
|
||||||
@Nullable private TransferListener transferListener;
|
@Nullable private TransferListener transferListener;
|
||||||
|
|
||||||
@ -165,7 +189,8 @@ public final class SingleSampleMediaSource extends BaseMediaSource {
|
|||||||
long durationUs,
|
long durationUs,
|
||||||
LoadErrorHandlingPolicy loadErrorHandlingPolicy,
|
LoadErrorHandlingPolicy loadErrorHandlingPolicy,
|
||||||
boolean treatLoadErrorsAsEndOfStream,
|
boolean treatLoadErrorsAsEndOfStream,
|
||||||
@Nullable Object tag) {
|
@Nullable Object tag,
|
||||||
|
@Nullable Supplier<ReleasableExecutor> downloadExecutorSupplier) {
|
||||||
this.dataSourceFactory = dataSourceFactory;
|
this.dataSourceFactory = dataSourceFactory;
|
||||||
this.durationUs = durationUs;
|
this.durationUs = durationUs;
|
||||||
this.loadErrorHandlingPolicy = loadErrorHandlingPolicy;
|
this.loadErrorHandlingPolicy = loadErrorHandlingPolicy;
|
||||||
@ -199,6 +224,7 @@ public final class SingleSampleMediaSource extends BaseMediaSource {
|
|||||||
/* useLiveConfiguration= */ false,
|
/* useLiveConfiguration= */ false,
|
||||||
/* manifest= */ null,
|
/* manifest= */ null,
|
||||||
mediaItem);
|
mediaItem);
|
||||||
|
this.downloadExecutorSupplier = downloadExecutorSupplier;
|
||||||
}
|
}
|
||||||
|
|
||||||
// MediaSource implementation.
|
// MediaSource implementation.
|
||||||
@ -229,7 +255,8 @@ public final class SingleSampleMediaSource extends BaseMediaSource {
|
|||||||
durationUs,
|
durationUs,
|
||||||
loadErrorHandlingPolicy,
|
loadErrorHandlingPolicy,
|
||||||
createEventDispatcher(id),
|
createEventDispatcher(id),
|
||||||
treatLoadErrorsAsEndOfStream);
|
treatLoadErrorsAsEndOfStream,
|
||||||
|
downloadExecutorSupplier != null ? downloadExecutorSupplier.get() : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user