Remove dependency on muxer from ExoPlayerAssetLoader

PiperOrigin-RevId: 487487259
This commit is contained in:
kimvde 2022-11-10 11:10:01 +00:00 committed by microkatz
parent 40c6c43197
commit 07f0589ce7
3 changed files with 16 additions and 18 deletions

View File

@ -49,7 +49,6 @@ import androidx.media3.exoplayer.source.MediaSource;
import androidx.media3.exoplayer.text.TextOutput;
import androidx.media3.exoplayer.trackselection.DefaultTrackSelector;
import androidx.media3.exoplayer.video.VideoRendererEventListener;
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
/* package */ final class ExoPlayerAssetLoader {
@ -57,6 +56,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
void onTrackRegistered();
void onAllTracksRegistered();
SamplePipeline onTrackAdded(Format format, long streamStartPositionUs, long streamOffsetUs)
throws TransformationException;
@ -72,7 +73,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
private final Looper looper;
private final Clock clock;
private @MonotonicNonNull MuxerWrapper muxerWrapper;
@Nullable private ExoPlayer player;
private @Transformer.ProgressState int progressState;
@ -93,19 +93,14 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
}
public void start(
MediaItem mediaItem,
MuxerWrapper muxerWrapper,
Listener listener,
Transformer.AsyncErrorListener asyncErrorListener) {
this.muxerWrapper = muxerWrapper;
MediaItem mediaItem, Listener listener, Transformer.AsyncErrorListener asyncErrorListener) {
DefaultTrackSelector trackSelector = new DefaultTrackSelector(context);
trackSelector.setParameters(
new DefaultTrackSelector.Parameters.Builder(context)
.setForceHighestSupportedBitrate(true)
.build());
// 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 =
new DefaultLoadControl.Builder()
.setBufferDurationsMs(
@ -238,9 +233,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
@Override
public void onTracksChanged(Tracks tracks) {
if (checkNotNull(muxerWrapper).getTrackCount() == 0) {
listener.onError(new IllegalStateException("The output does not contain any tracks."));
}
listener.onAllTracksRegistered();
}
@Override

View File

@ -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
* {@link C#RATE_UNSET_INT} if there is no track data.

View File

@ -85,7 +85,7 @@ import com.google.common.collect.ImmutableList;
ComponentListener componentListener =
new ComponentListener(
mediaItem, muxerWrapper, listener, fallbackListener, asyncErrorListener);
exoPlayerAssetLoader.start(mediaItem, muxerWrapper, componentListener, asyncErrorListener);
exoPlayerAssetLoader.start(mediaItem, componentListener, asyncErrorListener);
}
public @Transformer.ProgressState int getProgress(ProgressHolder progressHolder) {
@ -104,6 +104,8 @@ import com.google.common.collect.ImmutableList;
private final FallbackListener fallbackListener;
private final Transformer.AsyncErrorListener asyncErrorListener;
private volatile boolean trackRegistered;
public ComponentListener(
MediaItem mediaItem,
MuxerWrapper muxerWrapper,
@ -119,10 +121,18 @@ import com.google.common.collect.ImmutableList;
@Override
public void onTrackRegistered() {
trackRegistered = true;
muxerWrapper.registerTrack();
fallbackListener.registerTrack();
}
@Override
public void onAllTracksRegistered() {
if (!trackRegistered) {
onError(new IllegalStateException("The output does not contain any tracks."));
}
}
@Override
public SamplePipeline onTrackAdded(
Format format, long streamStartPositionUs, long streamOffsetUs)