Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 22 additions & 8 deletions src/mediasources.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,11 @@ 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)
const failBackCdns: string[] = []

function init(media: MediaDescriptor, setAudioDescribedOn?: boolean): Promise<void> {
return new Promise((resolve, reject) => {
Expand Down Expand Up @@ -81,6 +85,7 @@ function MediaSources() {
}

function failover(failoverParams: FailoverParams): Promise<void> {
DebugTool.info("*** Failover! ***")
return new Promise((resolve, reject) => {
if (!isFailoverInfoValid(failoverParams)) {
return reject(new TypeError("Invalid failover params"))
Expand Down Expand Up @@ -278,15 +283,24 @@ function MediaSources() {
sources[currentSources] = failoverSort(sources[currentSources])
}

const failoverResetToken = setTimeout(() => {
if (mediaSource == null || sources[currentSources].length === 0) return
const hasFailedBack = failBackCdns.includes(mediaSource.cdn)

DebugTool.info(`${mediaSource.cdn} has been added back in to available CDNs`)
sources[currentSources].push(mediaSource)
updateDebugOutput()
}, failoverResetTimeMs)
// If CDN does not exist in failBackCdns, add
// back in to the available mediasource CDNs
if (!hasFailedBack) {
const failoverResetToken = setTimeout(() => {
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)

failoverResetTokens.push(failoverResetToken as unknown as number)
updateDebugOutput()
}, failoverResetTimeMs)

failoverResetTokens.push(failoverResetToken as unknown as number)
failBackCdns.push(mediaSource.cdn)
}
}

function updateCdns(serviceLocation: string | undefined): void {
Expand Down
Loading