diff --git a/src/helperFuncs.js b/src/helperFuncs.js index df9915d..343d02c 100644 --- a/src/helperFuncs.js +++ b/src/helperFuncs.js @@ -56,6 +56,7 @@ function createLineup(obj, channel, fillers, isFirst) { // When within 30 seconds of start time, just make the time 0 to smooth things out // Helps prevents loosing first few seconds of an episode upon lineup change let activeProgram = obj.program + let beginningOffset = 0; let lineup = [] @@ -67,7 +68,8 @@ function createLineup(obj, channel, fillers, isFirst) { err: activeProgram.err, streamDuration: remaining, duration: remaining, - start: 0 + start: 0, + beginningOffset: beginningOffset, }) return lineup; } @@ -120,6 +122,7 @@ function createLineup(obj, channel, fillers, isFirst) { streamDuration: Math.max(1, Math.min(filler.duration - fillerstart, remaining) ), duration: filler.duration, fillerId: filler.fillerId, + beginningOffset: beginningOffset, serverKey: filler.serverKey }); return lineup; @@ -133,14 +136,17 @@ function createLineup(obj, channel, fillers, isFirst) { type: 'offline', title: 'Channel Offline', streamDuration: remaining, + beginningOffset: beginningOffset, duration: remaining, start: 0 }) return lineup; } + let originalTimeElapsed = timeElapsed; if (timeElapsed < 30000) { timeElapsed = 0 } + beginningOffset = Math.max(0, originalTimeElapsed - timeElapsed); return [ { type: 'program', @@ -151,6 +157,7 @@ function createLineup(obj, channel, fillers, isFirst) { ratingKey: activeProgram.ratingKey, start: timeElapsed, streamDuration: activeProgram.duration - timeElapsed, + beginningOffset: beginningOffset, duration: activeProgram.duration, serverKey: activeProgram.serverKey } ]; diff --git a/src/video.js b/src/video.js index 6cf31f6..c2d7897 100644 --- a/src/video.js +++ b/src/video.js @@ -254,15 +254,19 @@ function video( channelDB , fillerDB, db) { } let fillers = await fillerDB.getFillersFromChannel(brandChannel); let lineup = helperFuncs.createLineup(prog, brandChannel, fillers, isFirst) - lineupItem = lineup.shift() + lineupItem = lineup.shift(); } if ( !isLoading && (lineupItem != null) ) { let upperBound = 1000000000; + let beginningOffset = 0; + if (typeof(lineupItem.beginningOffset) !== 'undefined') { + beginningOffset = lineupItem.beginningOffset; + } //adjust upper bounds and record playbacks for (let i = redirectChannels.length-1; i >= 0; i--) { lineupItem = JSON.parse( JSON.stringify(lineupItem )); - let u = upperBounds[i]; + let u = upperBounds[i] + beginningOffset; if (typeof(u) !== 'undefined') { let u2 = upperBound; if ( typeof(lineupItem.streamDuration) !== 'undefined') {