Remove dependency on muxer from ExoPlayerAssetLoader
PiperOrigin-RevId: 487487259
This commit is contained in:
parent
40c6c43197
commit
07f0589ce7
@ -49,7 +49,6 @@ import androidx.media3.exoplayer.source.MediaSource;
|
|||||||
import androidx.media3.exoplayer.text.TextOutput;
|
import androidx.media3.exoplayer.text.TextOutput;
|
||||||
import androidx.media3.exoplayer.trackselection.DefaultTrackSelector;
|
import androidx.media3.exoplayer.trackselection.DefaultTrackSelector;
|
||||||
import androidx.media3.exoplayer.video.VideoRendererEventListener;
|
import androidx.media3.exoplayer.video.VideoRendererEventListener;
|
||||||
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|
||||||
|
|
||||||
/* package */ final class ExoPlayerAssetLoader {
|
/* package */ final class ExoPlayerAssetLoader {
|
||||||
|
|
||||||
@ -57,6 +56,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
|
|
||||||
void onTrackRegistered();
|
void onTrackRegistered();
|
||||||
|
|
||||||
|
void onAllTracksRegistered();
|
||||||
|
|
||||||
SamplePipeline onTrackAdded(Format format, long streamStartPositionUs, long streamOffsetUs)
|
SamplePipeline onTrackAdded(Format format, long streamStartPositionUs, long streamOffsetUs)
|
||||||
throws TransformationException;
|
throws TransformationException;
|
||||||
|
|
||||||
@ -72,7 +73,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
private final Looper looper;
|
private final Looper looper;
|
||||||
private final Clock clock;
|
private final Clock clock;
|
||||||
|
|
||||||
private @MonotonicNonNull MuxerWrapper muxerWrapper;
|
|
||||||
@Nullable private ExoPlayer player;
|
@Nullable private ExoPlayer player;
|
||||||
private @Transformer.ProgressState int progressState;
|
private @Transformer.ProgressState int progressState;
|
||||||
|
|
||||||
@ -93,19 +93,14 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void start(
|
public void start(
|
||||||
MediaItem mediaItem,
|
MediaItem mediaItem, Listener listener, Transformer.AsyncErrorListener asyncErrorListener) {
|
||||||
MuxerWrapper muxerWrapper,
|
|
||||||
Listener listener,
|
|
||||||
Transformer.AsyncErrorListener asyncErrorListener) {
|
|
||||||
this.muxerWrapper = muxerWrapper;
|
|
||||||
|
|
||||||
DefaultTrackSelector trackSelector = new DefaultTrackSelector(context);
|
DefaultTrackSelector trackSelector = new DefaultTrackSelector(context);
|
||||||
trackSelector.setParameters(
|
trackSelector.setParameters(
|
||||||
new DefaultTrackSelector.Parameters.Builder(context)
|
new DefaultTrackSelector.Parameters.Builder(context)
|
||||||
.setForceHighestSupportedBitrate(true)
|
.setForceHighestSupportedBitrate(true)
|
||||||
.build());
|
.build());
|
||||||
// Arbitrarily decrease buffers for playback so that samples start being sent earlier to the
|
// Arbitrarily decrease buffers for playback so that samples start being sent earlier to the
|
||||||
// muxer (rebuffers are less problematic for the transformation use case).
|
// pipelines (rebuffers are less problematic for the transformation use case).
|
||||||
DefaultLoadControl loadControl =
|
DefaultLoadControl loadControl =
|
||||||
new DefaultLoadControl.Builder()
|
new DefaultLoadControl.Builder()
|
||||||
.setBufferDurationsMs(
|
.setBufferDurationsMs(
|
||||||
@ -238,9 +233,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onTracksChanged(Tracks tracks) {
|
public void onTracksChanged(Tracks tracks) {
|
||||||
if (checkNotNull(muxerWrapper).getTrackCount() == 0) {
|
listener.onAllTracksRegistered();
|
||||||
listener.onError(new IllegalStateException("The output does not contain any tracks."));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -235,11 +235,6 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns the number of {@link #registerTrack() registered} tracks. */
|
|
||||||
public int getTrackCount() {
|
|
||||||
return trackCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the average bitrate of data written to the track of the provided {@code trackType}, or
|
* Returns the average bitrate of data written to the track of the provided {@code trackType}, or
|
||||||
* {@link C#RATE_UNSET_INT} if there is no track data.
|
* {@link C#RATE_UNSET_INT} if there is no track data.
|
||||||
|
@ -85,7 +85,7 @@ import com.google.common.collect.ImmutableList;
|
|||||||
ComponentListener componentListener =
|
ComponentListener componentListener =
|
||||||
new ComponentListener(
|
new ComponentListener(
|
||||||
mediaItem, muxerWrapper, listener, fallbackListener, asyncErrorListener);
|
mediaItem, muxerWrapper, listener, fallbackListener, asyncErrorListener);
|
||||||
exoPlayerAssetLoader.start(mediaItem, muxerWrapper, componentListener, asyncErrorListener);
|
exoPlayerAssetLoader.start(mediaItem, componentListener, asyncErrorListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Transformer.ProgressState int getProgress(ProgressHolder progressHolder) {
|
public @Transformer.ProgressState int getProgress(ProgressHolder progressHolder) {
|
||||||
@ -104,6 +104,8 @@ import com.google.common.collect.ImmutableList;
|
|||||||
private final FallbackListener fallbackListener;
|
private final FallbackListener fallbackListener;
|
||||||
private final Transformer.AsyncErrorListener asyncErrorListener;
|
private final Transformer.AsyncErrorListener asyncErrorListener;
|
||||||
|
|
||||||
|
private volatile boolean trackRegistered;
|
||||||
|
|
||||||
public ComponentListener(
|
public ComponentListener(
|
||||||
MediaItem mediaItem,
|
MediaItem mediaItem,
|
||||||
MuxerWrapper muxerWrapper,
|
MuxerWrapper muxerWrapper,
|
||||||
@ -119,10 +121,18 @@ import com.google.common.collect.ImmutableList;
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onTrackRegistered() {
|
public void onTrackRegistered() {
|
||||||
|
trackRegistered = true;
|
||||||
muxerWrapper.registerTrack();
|
muxerWrapper.registerTrack();
|
||||||
fallbackListener.registerTrack();
|
fallbackListener.registerTrack();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAllTracksRegistered() {
|
||||||
|
if (!trackRegistered) {
|
||||||
|
onError(new IllegalStateException("The output does not contain any tracks."));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SamplePipeline onTrackAdded(
|
public SamplePipeline onTrackAdded(
|
||||||
Format format, long streamStartPositionUs, long streamOffsetUs)
|
Format format, long streamStartPositionUs, long streamOffsetUs)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user