From b901b69ac93e96b918dfc310e8a167c7cd4b93c9 Mon Sep 17 00:00:00 2001 From: Mark Houldridge Date: Fri, 26 Jun 2026 13:38:05 +0100 Subject: [PATCH 1/2] initial commit --- src/mediasources.ts | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/src/mediasources.ts b/src/mediasources.ts index 6c1b6404..b4922e7f 100644 --- a/src/mediasources.ts +++ b/src/mediasources.ts @@ -47,6 +47,10 @@ function MediaSources() { let subtitlesRequestTimeout = 5000 let failoverResetTimeMs = 120000 + // Array of CDN names that failed for the playback session + // and we added back in after 120 seconds (failoverResetTimeMs) + const failBackCdns: string[] = [] + function init(media: MediaDescriptor, setAudioDescribedOn?: boolean): Promise { return new Promise((resolve, reject) => { if (!media.urls?.length) { @@ -81,6 +85,7 @@ function MediaSources() { } function failover(failoverParams: FailoverParams): Promise { + console.log('*** Failover! ***'); return new Promise((resolve, reject) => { if (!isFailoverInfoValid(failoverParams)) { return reject(new TypeError("Invalid failover params")) @@ -278,15 +283,24 @@ function MediaSources() { sources[currentSources] = failoverSort(sources[currentSources]) } - const failoverResetToken = setTimeout(() => { - if (mediaSource == null || sources[currentSources].length === 0) return - - DebugTool.info(`${mediaSource.cdn} has been added back in to available CDNs`) - sources[currentSources].push(mediaSource) - updateDebugOutput() - }, failoverResetTimeMs) - - failoverResetTokens.push(failoverResetToken as unknown as number) + const hasFailedBack = failBackCdns.includes(mediaSource.cdn); + + // If CDN does not exist in failBackCdns, add + // back in to the available mediasource CDNs + if (!hasFailedBack) { + const failoverResetToken = setTimeout(() => { + console.log('*** Adding CDN back! ***') + if (mediaSource == null || sources[currentSources].length === 0) return + + DebugTool.info(`${mediaSource.cdn} has been added back in to available CDNs`) + sources[currentSources].push(mediaSource) + + updateDebugOutput() + }, failoverResetTimeMs) + + failoverResetTokens.push(failoverResetToken as unknown as number) + failBackCdns.push(mediaSource.cdn); + } } function updateCdns(serviceLocation: string | undefined): void { From db488b27b2a9cc548ee8eb4416bb1232a14a22c2 Mon Sep 17 00:00:00 2001 From: Mark Houldridge Date: Tue, 30 Jun 2026 10:42:37 +0100 Subject: [PATCH 2/2] output to debug tool --- src/mediasources.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/mediasources.ts b/src/mediasources.ts index b4922e7f..133fb3ad 100644 --- a/src/mediasources.ts +++ b/src/mediasources.ts @@ -45,7 +45,7 @@ function MediaSources() { // Can be overridden with media.subtitlesRequestTimeout let subtitlesRequestTimeout = 5000 - let failoverResetTimeMs = 120000 + let failoverResetTimeMs = 5000 // Array of CDN names that failed for the playback session // and we added back in after 120 seconds (failoverResetTimeMs) @@ -85,7 +85,7 @@ function MediaSources() { } function failover(failoverParams: FailoverParams): Promise { - console.log('*** Failover! ***'); + DebugTool.info("*** Failover! ***") return new Promise((resolve, reject) => { if (!isFailoverInfoValid(failoverParams)) { return reject(new TypeError("Invalid failover params")) @@ -283,23 +283,23 @@ function MediaSources() { sources[currentSources] = failoverSort(sources[currentSources]) } - const hasFailedBack = failBackCdns.includes(mediaSource.cdn); + const hasFailedBack = failBackCdns.includes(mediaSource.cdn) // If CDN does not exist in failBackCdns, add // back in to the available mediasource CDNs if (!hasFailedBack) { const failoverResetToken = setTimeout(() => { - console.log('*** Adding CDN back! ***') + DebugTool.info("*** Adding CDN back! ***") if (mediaSource == null || sources[currentSources].length === 0) return - + DebugTool.info(`${mediaSource.cdn} has been added back in to available CDNs`) sources[currentSources].push(mediaSource) - + updateDebugOutput() }, failoverResetTimeMs) - + failoverResetTokens.push(failoverResetToken as unknown as number) - failBackCdns.push(mediaSource.cdn); + failBackCdns.push(mediaSource.cdn) } }