Do not fail the export in case of ExoPlayer release time out

PiperOrigin-RevId: 725996730
This commit is contained in:
kimvde 2025-02-12 04:11:53 -08:00 committed by Copybara-Service
parent 813973bb58
commit 6e332e9b91

View File

@ -17,7 +17,6 @@
package androidx.media3.transformer; package androidx.media3.transformer;
import static androidx.media3.common.util.Assertions.checkNotNull; import static androidx.media3.common.util.Assertions.checkNotNull;
import static androidx.media3.common.util.Util.isRunningOnEmulator;
import static androidx.media3.exoplayer.DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS; import static androidx.media3.exoplayer.DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS;
import static androidx.media3.exoplayer.DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_MS; import static androidx.media3.exoplayer.DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_MS;
import static androidx.media3.exoplayer.DefaultLoadControl.DEFAULT_MAX_BUFFER_MS; import static androidx.media3.exoplayer.DefaultLoadControl.DEFAULT_MAX_BUFFER_MS;
@ -45,6 +44,7 @@ import androidx.media3.common.util.Log;
import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.UnstableApi;
import androidx.media3.exoplayer.DefaultLoadControl; import androidx.media3.exoplayer.DefaultLoadControl;
import androidx.media3.exoplayer.ExoPlayer; import androidx.media3.exoplayer.ExoPlayer;
import androidx.media3.exoplayer.ExoTimeoutException;
import androidx.media3.exoplayer.Renderer; import androidx.media3.exoplayer.Renderer;
import androidx.media3.exoplayer.RenderersFactory; import androidx.media3.exoplayer.RenderersFactory;
import androidx.media3.exoplayer.audio.AudioRendererEventListener; import androidx.media3.exoplayer.audio.AudioRendererEventListener;
@ -182,12 +182,6 @@ public final class ExoPlayerAssetLoader implements AssetLoader {
private static final String TAG = "ExoPlayerAssetLoader"; private static final String TAG = "ExoPlayerAssetLoader";
/**
* The timeout value, in milliseconds, to set on the internal {@link ExoPlayer} instance when
* running on an emulator.
*/
private static final long EMULATOR_RELEASE_TIMEOUT_MS = 5_000;
private final Context context; private final Context context;
private final EditedMediaItem editedMediaItem; private final EditedMediaItem editedMediaItem;
private final CapturingDecoderFactory decoderFactory; private final CapturingDecoderFactory decoderFactory;
@ -234,8 +228,7 @@ public final class ExoPlayerAssetLoader implements AssetLoader {
.setTrackSelector(trackSelector) .setTrackSelector(trackSelector)
.setLoadControl(loadControl) .setLoadControl(loadControl)
.setLooper(looper) .setLooper(looper)
.setUsePlatformDiagnostics(false) .setUsePlatformDiagnostics(false);
.setReleaseTimeoutMs(getReleaseTimeoutMs());
if (decoderFactory instanceof DefaultDecoderFactory) { if (decoderFactory instanceof DefaultDecoderFactory) {
playerBuilder.experimentalSetDynamicSchedulingEnabled( playerBuilder.experimentalSetDynamicSchedulingEnabled(
((DefaultDecoderFactory) decoderFactory).isDynamicSchedulingEnabled()); ((DefaultDecoderFactory) decoderFactory).isDynamicSchedulingEnabled());
@ -403,6 +396,14 @@ public final class ExoPlayerAssetLoader implements AssetLoader {
@Override @Override
public void onPlayerError(PlaybackException error) { public void onPlayerError(PlaybackException error) {
Throwable cause = error.getCause();
if ((cause instanceof ExoTimeoutException)
&& ((ExoTimeoutException) cause).timeoutOperation
== ExoTimeoutException.TIMEOUT_OPERATION_RELEASE) {
// Don't throw if releasing the player timed out to prevent the export to fail.
Log.e(TAG, "Releasing the player timed out.", error);
return;
}
@ExportException.ErrorCode @ExportException.ErrorCode
int errorCode = int errorCode =
checkNotNull( checkNotNull(
@ -421,11 +422,4 @@ public final class ExoPlayerAssetLoader implements AssetLoader {
Log.w(TAG, "Unsupported track type: " + trackType); Log.w(TAG, "Unsupported track type: " + trackType);
} }
} }
private static long getReleaseTimeoutMs() {
// b/297916906 - Emulators need a larger timeout for releasing.
return isRunningOnEmulator()
? EMULATOR_RELEASE_TIMEOUT_MS
: ExoPlayer.DEFAULT_RELEASE_TIMEOUT_MS;
}
} }