28 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Kotlin
		
	
	
	
	
	
		
		
			
		
	
	
			28 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Kotlin
		
	
	
	
	
	
|   | package com.brentvatne.exoplayer | ||
|  | 
 | ||
|  | import androidx.media3.common.C | ||
|  | import androidx.media3.datasource.HttpDataSource.HttpDataSourceException | ||
|  | import androidx.media3.exoplayer.upstream.DefaultLoadErrorHandlingPolicy | ||
|  | import androidx.media3.exoplayer.upstream.LoadErrorHandlingPolicy.LoadErrorInfo | ||
|  | import kotlin.math.min | ||
|  | 
 | ||
|  | class ReactExoplayerLoadErrorHandlingPolicy(private val minLoadRetryCount: Int) : DefaultLoadErrorHandlingPolicy(minLoadRetryCount) { | ||
|  |     override fun getRetryDelayMsFor(loadErrorInfo: LoadErrorInfo): Long { | ||
|  |         val errorMessage: String? = loadErrorInfo.exception.message | ||
|  | 
 | ||
|  |         return if (loadErrorInfo.exception is HttpDataSourceException && | ||
|  |             errorMessage != null && | ||
|  |             (errorMessage == "Unable to connect" || errorMessage == "Software caused connection abort") | ||
|  |         ) { | ||
|  |             // Capture the error we get when there is no network connectivity and keep retrying it
 | ||
|  |             1000 // Retry every second
 | ||
|  |         } else if (loadErrorInfo.errorCount < minLoadRetryCount) { | ||
|  |             min(((loadErrorInfo.errorCount - 1) * 1000L), 5000L) // Default timeout handling
 | ||
|  |         } else { | ||
|  |             C.TIME_UNSET // Done retrying and will return the error immediately
 | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     override fun getMinimumLoadableRetryCount(dataType: Int): Int = Int.MAX_VALUE | ||
|  | } |