mirror of
https://github.com/samsonjs/media.git
synced 2026-03-26 09:35:47 +00:00
Make sure errors thrown in the PlayerListener are not swallowed
PiperOrigin-RevId: 515037497
This commit is contained in:
parent
0477d0d338
commit
bf60302cf2
1 changed files with 41 additions and 31 deletions
|
|
@ -302,44 +302,54 @@ public final class ExoPlayerAssetLoader implements AssetLoader {
|
|||
|
||||
@Override
|
||||
public void onTimelineChanged(Timeline timeline, int reason) {
|
||||
if (progressState != PROGRESS_STATE_WAITING_FOR_AVAILABILITY) {
|
||||
return;
|
||||
}
|
||||
Timeline.Window window = new Timeline.Window();
|
||||
timeline.getWindow(/* windowIndex= */ 0, window);
|
||||
if (!window.isPlaceholder) {
|
||||
long durationUs = window.durationUs;
|
||||
// Make progress permanently unavailable if the duration is unknown, so that it doesn't jump
|
||||
// to a high value at the end of the export if the duration is set once the media is
|
||||
// entirely loaded.
|
||||
progressState =
|
||||
durationUs <= 0 || durationUs == C.TIME_UNSET
|
||||
? PROGRESS_STATE_UNAVAILABLE
|
||||
: PROGRESS_STATE_AVAILABLE;
|
||||
assetLoaderListener.onDurationUs(window.durationUs);
|
||||
try {
|
||||
if (progressState != PROGRESS_STATE_WAITING_FOR_AVAILABILITY) {
|
||||
return;
|
||||
}
|
||||
Timeline.Window window = new Timeline.Window();
|
||||
timeline.getWindow(/* windowIndex= */ 0, window);
|
||||
if (!window.isPlaceholder) {
|
||||
long durationUs = window.durationUs;
|
||||
// Make progress permanently unavailable if the duration is unknown, so that it doesn't
|
||||
// jump to a high value at the end of the export if the duration is set once the media is
|
||||
// entirely loaded.
|
||||
progressState =
|
||||
durationUs <= 0 || durationUs == C.TIME_UNSET
|
||||
? PROGRESS_STATE_UNAVAILABLE
|
||||
: PROGRESS_STATE_AVAILABLE;
|
||||
assetLoaderListener.onDurationUs(window.durationUs);
|
||||
}
|
||||
} catch (RuntimeException e) {
|
||||
assetLoaderListener.onError(
|
||||
ExportException.createForAssetLoader(e, ERROR_CODE_UNSPECIFIED));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTracksChanged(Tracks tracks) {
|
||||
int trackCount = 0;
|
||||
if (tracks.isTypeSelected(C.TRACK_TYPE_AUDIO)) {
|
||||
trackCount++;
|
||||
}
|
||||
if (tracks.isTypeSelected(C.TRACK_TYPE_VIDEO)) {
|
||||
trackCount++;
|
||||
}
|
||||
try {
|
||||
int trackCount = 0;
|
||||
if (tracks.isTypeSelected(C.TRACK_TYPE_AUDIO)) {
|
||||
trackCount++;
|
||||
}
|
||||
if (tracks.isTypeSelected(C.TRACK_TYPE_VIDEO)) {
|
||||
trackCount++;
|
||||
}
|
||||
|
||||
if (trackCount > 0) {
|
||||
assetLoaderListener.onTrackCount(trackCount);
|
||||
// Start the renderers after having registered all the tracks to make sure the AssetLoader
|
||||
// listener callbacks are called in the right order.
|
||||
player.play();
|
||||
} else {
|
||||
if (trackCount > 0) {
|
||||
assetLoaderListener.onTrackCount(trackCount);
|
||||
// Start the renderers after having registered all the tracks to make sure the AssetLoader
|
||||
// listener callbacks are called in the right order.
|
||||
player.play();
|
||||
} else {
|
||||
assetLoaderListener.onError(
|
||||
ExportException.createForAssetLoader(
|
||||
new IllegalStateException("The asset loader has no track to output."),
|
||||
ERROR_CODE_FAILED_RUNTIME_CHECK));
|
||||
}
|
||||
} catch (RuntimeException e) {
|
||||
assetLoaderListener.onError(
|
||||
ExportException.createForAssetLoader(
|
||||
new IllegalStateException("The asset loader has no track to output."),
|
||||
ERROR_CODE_FAILED_RUNTIME_CHECK));
|
||||
ExportException.createForAssetLoader(e, ERROR_CODE_UNSPECIFIED));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue