From 9fbe812899ab5884395a8dea5debf3cc0b144a2c Mon Sep 17 00:00:00 2001 From: Emilien <4016501+unixfox@users.noreply.github.com> Date: Sun, 28 Jun 2026 16:18:00 +0200 Subject: [PATCH] fix: cap SABR reloads at 3 to prevent infinite backoff loop on throttled videos --- assets/js/sabr_player.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/assets/js/sabr_player.js b/assets/js/sabr_player.js index 76eff37e6..59876c52a 100644 --- a/assets/js/sabr_player.js +++ b/assets/js/sabr_player.js @@ -42,6 +42,8 @@ var SABRPlayer = (function () { var sabrStream = null; // handle returned by setupSabrScheme var sabrManifest = null; // captured from player.getManifest() on 'loaded' var currentLoadOptions = null; // for onReloadOnce -> re-run loadVideo + var reloadCount = 0; // cap reloads to prevent infinite loop on blocked/throttled videos + var MAX_RELOADS = 3; function getSavedVolume() { try { @@ -446,13 +448,27 @@ var SABRPlayer = (function () { } }); sabrStream.onReloadOnce(function () { - console.warn('[SABRPlayer] SABR reload requested by server; re-loading video'); + reloadCount++; + if (reloadCount >= MAX_RELOADS) { + console.error('[SABRPlayer] SABR reload limit reached; giving up on video', currentVideoId); + if (shakaContainer) { + var errDiv = document.createElement('div'); + errDiv.className = 'sabr-error-display'; + errDiv.innerHTML = '
This video is currently unavailable via SABR.
' + + 'YouTube is throttling this request.
' + + ''; + shakaContainer.appendChild(errDiv); + } + return; + } + console.warn('[SABRPlayer] SABR reload requested by server; re-loading video (attempt ' + reloadCount + '/' + MAX_RELOADS + ')'); if (currentVideoId && loadFn) loadFn(currentVideoId, shakaContainer, currentLoadOptions || {}); }); } async function loadVideo(videoId, containerElement, options) { options = options || {}; + if (videoId !== currentVideoId) reloadCount = 0; currentVideoId = videoId; currentLoadOptions = options; playbackWebPoToken = null;