Add support for customizing back buffer duration and handle network errors gracefully to prevent releasing the player when network is lost.
33 lines
1.3 KiB
Java
33 lines
1.3 KiB
Java
package com.brentvatne.exoplayer;
|
|
|
|
import java.io.IOException;
|
|
import com.google.android.exoplayer2.upstream.DefaultLoadErrorHandlingPolicy;
|
|
import com.google.android.exoplayer2.upstream.HttpDataSource.HttpDataSourceException;
|
|
import com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy.LoadErrorInfo;
|
|
import com.google.android.exoplayer2.C;
|
|
|
|
public final class ReactExoplayerLoadErrorHandlingPolicy extends DefaultLoadErrorHandlingPolicy {
|
|
private int minLoadRetryCount = Integer.MAX_VALUE;
|
|
|
|
public ReactExoplayerLoadErrorHandlingPolicy(int minLoadRetryCount) {
|
|
super(minLoadRetryCount);
|
|
this.minLoadRetryCount = minLoadRetryCount;
|
|
}
|
|
|
|
@Override
|
|
public long getRetryDelayMsFor(LoadErrorInfo loadErrorInfo) {
|
|
if (loadErrorInfo.exception instanceof HttpDataSourceException) {
|
|
// Capture the error we get when there is no network connectivity and keep retrying it
|
|
return 1000; // Retry every second
|
|
} else if(loadErrorInfo.errorCount < this.minLoadRetryCount) {
|
|
return Math.min((loadErrorInfo.errorCount - 1) * 1000, 5000); // Default timeout handling
|
|
} else {
|
|
return C.TIME_UNSET; // Done retrying and will return the error immediately
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public int getMinimumLoadableRetryCount(int dataType) {
|
|
return Integer.MAX_VALUE;
|
|
}
|
|
} |