From b06acf33463e9bea3a21d53cb3903f69b35732ad Mon Sep 17 00:00:00 2001 From: dsilhavy Date: Tue, 5 May 2020 16:46:30 +0200 Subject: [PATCH] Delete invalid events which are not in the presentation time of the parent period (#3243) --- src/streaming/controllers/EventController.js | 21 +++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/streaming/controllers/EventController.js b/src/streaming/controllers/EventController.js index 97b64b0fe8..6f9a3d6a58 100644 --- a/src/streaming/controllers/EventController.js +++ b/src/streaming/controllers/EventController.js @@ -249,7 +249,8 @@ function EventController() { if (calculatedPresentationTimeInSeconds <= currentVideoTime && calculatedPresentationTimeInSeconds + presentationTimeThreshold >= currentVideoTime) { _startEvent(eventId, event, events); - } else if (currentVideoTime - presentationTimeThreshold > calculatedPresentationTimeInSeconds) { + } else if (_eventHasExpired(currentVideoTime, presentationTimeThreshold, calculatedPresentationTimeInSeconds) || _eventIsInvalid(event)) { + logger.debug(`Deleting event ${eventId} as it is expired or invalid`); delete events[eventId]; } } @@ -259,6 +260,24 @@ function EventController() { } } + function _eventHasExpired(currentVideoTime, presentationTimeThreshold, calculatedPresentationTimeInSeconds) { + try { + return currentVideoTime - presentationTimeThreshold > calculatedPresentationTimeInSeconds; + } catch (e) { + return false; + } + } + + function _eventIsInvalid(event) { + try { + const periodEndTime = event.eventStream.period.start + event.eventStream.period.duration; + + return event.calculatedPresentationTime / 1000 > periodEndTime; + } catch (e) { + return false; + } + } + function _triggerRemainingEvents(events) { try { const eventIds = Object.keys(events);