hls.js: outlast CDN segment stalls (TTFT 5s->15s, 8 retries)

The upstream CDN intermittently serves 0 bytes on segments for 10s+
(fragLoadTimeOut errors 17:58-18:14 and 19:16-19:18 today). hls.js's
default 5s time-to-first-byte abort dropped the XHR before the proxy's
12s upstream attempt + 300ms retry could answer with its 502, so the
proxy-side retry never got a chance and stalls went straight to fatal.
fragLoadPolicy: maxTimeToFirstByteMs 15000 (> proxy's 12s timeout),
maxNumRetry 8 — slow-but-alive segments now finish, and stall tolerance
rises to several minutes.
This commit is contained in:
jozamudi committed 2026-08-30 19:25:49 +00:00
1 parent e361f0ba0e
commit 8f519b0251
1 file changed
+6 -1
+6 -1
View File
@@ -696,7 +696,12 @@ async function play(ep_id, ep_no) {
document.getElementById("player").replaceChildren(v); document.getElementById("player").replaceChildren(v);
playerOverlay("Loading\u2026"); playerOverlay("Loading\u2026");
if (!window.Hls || !Hls.isSupported()) throw new Error("HLS not supported in this browser"); if (!window.Hls || !Hls.isSupported()) throw new Error("HLS not supported in this browser");
hls = new Hls(); // the upstream CDN occasionally stalls on segment bytes (0 bytes for
// 10s+). hls.js's default 5s time-to-first-byte abort would drop the XHR
// before our proxy's 12s upstream attempt (+300ms retry) can answer with
// its 502 — keep TTFT past the proxy timeout so slow-but-alive segments
// finish, and the proxy's retry path gets a chance
hls = new Hls({ fragLoadPolicy: { default: { maxTimeToFirstByteMs: 15000, maxNumRetry: 8 } } });
hls.on(Hls.Events.ERROR, (_, data) => { hls.on(Hls.Events.ERROR, (_, data) => {
if (data.fatal) { if (data.fatal) {
stopHls(); stopHls();