 		}
 		
 		func onDestroy() {
-			timer?.invalidate()
-		}
-		
-		private func reset() {
+			reset()
+		}
+		
+		private func recover() {
 			guard hasError else { return }
-			
-			hasError = false
-			currentRetryIndex = 0
-			player._disabled = false
 			
 			if !player.media.isLive && currentPosition > 0 {
 				player.seek(currentPosition)
 				currentPosition = 0
 			}
 			
-			player.destroyScreen(&player._errorScreen) {
-				self.player.updateFullscreen(nil, false)
-			}
+			reset()
 		}
 		
 		@objc private func retryHandler() {

			
		}
		
		func onLoad() {
			reset()
		}
		
		func onStart() {
			reset()
		}
		
		func onResume() {
			reset()
		}
		
		func onProgress() {

	private func reset(_ restart: Bool = true) {
		_hasStarted = !restart
		stopTimer()
		_errorManager?.reset()
		_player?.reset()
		
		for delegate in _delegates { delegate.onReset?() }
