From e4fdc71cfd6257185a39e2229725f2931ca57f33 Mon Sep 17 00:00:00 2001 From: Sebastian Piquerez <89274285+sebastianpiq@users.noreply.github.com> Date: Thu, 9 Oct 2025 11:50:59 -0300 Subject: [PATCH] Revert "Feature MPD update on validity expiration (#68)" This reverts commit bf31094d9312f43ee18d0a5d35dfd5542ac8f416. --- samples/mpd-event/mpd-update-event.html | 270 ------------------ samples/samples.json | 17 -- src/core/events/CoreEvents.js | 1 - src/dash/DashAdapter.js | 8 +- src/streaming/ManifestLoader.js | 76 +---- src/streaming/ManifestUpdater.js | 12 +- src/streaming/MediaPlayer.js | 13 +- src/streaming/constants/Constants.js | 6 - src/streaming/controllers/EventController.js | 121 ++------ test/unit/test/dash/dash.DashAdapter.js | 14 - .../streaming/streaming.ManifestLoader.js | 162 ----------- .../streaming.controllers.EventController.js | 57 ---- 12 files changed, 33 insertions(+), 724 deletions(-) delete mode 100644 samples/mpd-event/mpd-update-event.html delete mode 100644 test/unit/test/streaming/streaming.ManifestLoader.js diff --git a/samples/mpd-event/mpd-update-event.html b/samples/mpd-event/mpd-update-event.html deleted file mode 100644 index 87416f8f15..0000000000 --- a/samples/mpd-event/mpd-update-event.html +++ /dev/null @@ -1,270 +0,0 @@ - - - - - - MPD update events - - - - - - - - -
- -
-
- -
-
-
-
-

MPD Update Event

-

This sample shows how DASH MPD Update Event signals a DASH client to perform a manifest update when an inband event is received with value 3.

-
-
-
- -
-
- Manifest URL - - -
-
- -
-
- -
- -
- -
-
Manifest will appear here...
-
-
-
-
-
-
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/samples/samples.json b/samples/samples.json index a39fe06256..b883f2f47b 100644 --- a/samples/samples.json +++ b/samples/samples.json @@ -197,23 +197,6 @@ } ] }, - { - "section": "MPD Update Event (value 3)", - "samples": [ - { - "title": "MPD Update Event implementation", - "description": "A sample showing MPD Update Event (value 3) implementation", - "href": "mpd-event/mpd-update-event.html", - "image": "lib/img/bbb-1.jpg", - "labels": [ - "VoD", - "Video", - "Audio", - "Callback events" - ] - } - ] - }, { "section": "ABR", "samples": [ diff --git a/src/core/events/CoreEvents.js b/src/core/events/CoreEvents.js index 1ec59913a9..8bffb0aa56 100644 --- a/src/core/events/CoreEvents.js +++ b/src/core/events/CoreEvents.js @@ -60,7 +60,6 @@ class CoreEvents extends EventsBase { this.LOADING_DATA_PROGRESS = 'loadingDataProgress'; this.LOADING_ABANDONED = 'loadingAborted'; this.MANIFEST_UPDATED = 'manifestUpdated'; - this.MPD_EXPIRE_UPDATE = 'mpdExpireUpdate'; this.MEDIA_FRAGMENT_LOADED = 'mediaFragmentLoaded'; this.MEDIA_FRAGMENT_NEEDED = 'mediaFragmentNeeded'; this.MEDIAINFO_UPDATED = 'mediaInfoUpdated'; diff --git a/src/dash/DashAdapter.js b/src/dash/DashAdapter.js index fba82c9bb1..16796cf4bc 100644 --- a/src/dash/DashAdapter.js +++ b/src/dash/DashAdapter.js @@ -40,7 +40,6 @@ import PatchManifestModel from './models/PatchManifestModel.js'; import Representation from './vo/Representation.js'; import {bcp47Normalize} from 'bcp-47-normalize'; import {getId3Frames} from '@svta/common-media-library/id3/getId3Frames.js'; -import {utf8ArrayToStr} from '@svta/common-media-library/utils/utf8ArrayToStr' import Constants from '../streaming/constants/Constants.js'; /** @@ -505,11 +504,8 @@ function DashAdapter() { event.calculatedPresentationTime = calculatedPresentationTime; event.messageData = messageData; event.presentationTimeDelta = presentationTimeDelta; - if (schemeIdUri === Constants.ID3_SCHEME_ID_URI) { - event.parsedMessageData = getId3Frames(messageData); - } else { - event.parsedMessageData = (messageData instanceof Uint8Array) ? utf8ArrayToStr(messageData) : null; - } + event.parsedMessageData = (schemeIdUri === Constants.ID3_SCHEME_ID_URI) ? getId3Frames(messageData) : null; + return event; } catch (e) { return null; diff --git a/src/streaming/ManifestLoader.js b/src/streaming/ManifestLoader.js index da8a04cea5..94b69b6876 100644 --- a/src/streaming/ManifestLoader.js +++ b/src/streaming/ManifestLoader.js @@ -43,6 +43,7 @@ import FactoryMaker from '../core/FactoryMaker.js'; import DashParser from '../dash/parser/DashParser.js'; function ManifestLoader(config) { + config = config || {}; const context = this.context; const debug = config.debug; @@ -58,12 +59,10 @@ function ManifestLoader(config) { let mssHandler = config.mssHandler; let errHandler = config.errHandler; - let manifestModel = config.manifestModel; function setup() { logger = debug.getLogger(instance); eventBus.on(Events.XLINK_READY, onXlinkReady, instance); - eventBus.on(Events.MPD_EXPIRE_UPDATE, _updateManifest, instance); urlLoader = URLLoader(context).create({ errHandler: config.errHandler, @@ -250,79 +249,6 @@ function ManifestLoader(config) { }); } - function _updateManifest(e) { - // Manage situations in which success is called after calling reset - if (!xlinkController) { - return; - } - const strManifest = e.xmlString - let currentManifest = manifestModel.getValue(); - let manifest; - - // Create parser according to manifest type - parser = createParser(strManifest); - - if (parser === null) { - eventBus.trigger(Events.INTERNAL_MANIFEST_LOADED, { - manifest: null, - error: new DashJSError( - Errors.MANIFEST_LOADER_PARSING_FAILURE_ERROR_CODE, - ) - }); - return; - } - // init xlinkcontroller with created parser - xlinkController.setParser(parser); - - try { - manifest = parser.parse(strManifest); - } catch (e) { - eventBus.trigger(Events.INTERNAL_MANIFEST_LOADED, { - manifest: null, - error: new DashJSError( - Errors.MANIFEST_LOADER_PARSING_FAILURE_ERROR_CODE, - ) - }); - return; - } - - if (manifest) { - manifest.url = currentManifest.url; - - // URL from which the MPD was originally retrieved (MPD updates will not change this value) - if (!manifest.originalUrl) { - manifest.originalUrl = manifest.url; - } - - // If there is a mismatch between the manifest's specified duration and the total duration of all periods, - // and the specified duration is greater than the total duration of all periods, - // overwrite the manifest's duration attribute. This is a patch for if a manifest is generated incorrectly. - if (settings && - settings.get().streaming.enableManifestDurationMismatchFix && - manifest.mediaPresentationDuration && - manifest.Period.length > 1) { - const sumPeriodDurations = manifest.Period.reduce((totalDuration, period) => totalDuration + period.duration, 0); - if (!isNaN(sumPeriodDurations) && manifest.mediaPresentationDuration > sumPeriodDurations) { - logger.warn('Media presentation duration greater than duration of all periods. Setting duration to total period duration'); - manifest.mediaPresentationDuration = sumPeriodDurations; - } - } - - // manifest.baseUri = baseUri; - manifest.loadedTime = new Date(); - xlinkController.resolveManifestOnLoad(manifest); - - eventBus.trigger(Events.ORIGINAL_MANIFEST_LOADED, { originalManifest: e.xmlString }); - } else { - eventBus.trigger(Events.INTERNAL_MANIFEST_LOADED, { - manifest: null, - error: new DashJSError( - Errors.MANIFEST_LOADER_PARSING_FAILURE_ERROR_CODE, - ) - }); - } - } - function reset() { eventBus.off(Events.XLINK_READY, onXlinkReady, instance); diff --git a/src/streaming/ManifestUpdater.js b/src/streaming/ManifestUpdater.js index 573f020503..27a161d7fc 100644 --- a/src/streaming/ManifestUpdater.js +++ b/src/streaming/ManifestUpdater.js @@ -60,7 +60,6 @@ function ManifestUpdater() { manifestLoader, manifestModel, refreshDelay, - refreshDisabled, refreshTimer, settings; @@ -109,7 +108,6 @@ function ManifestUpdater() { eventBus.on(MediaPlayerEvents.PLAYBACK_STARTED, _onPlaybackStarted, this); eventBus.on(MediaPlayerEvents.PLAYBACK_PAUSED, _onPlaybackPaused, this); eventBus.on(Events.INTERNAL_MANIFEST_LOADED, _onManifestLoaded, this); - eventBus.on(MediaPlayerEvents.MANIFEST_VALIDITY_CHANGED, onManifestValidityChanged, this) } function setManifest(manifest) { @@ -152,7 +150,7 @@ function ManifestUpdater() { delay = refreshDelay * 1000; } - if (!isNaN(delay) && !refreshDisabled) { + if (!isNaN(delay)) { logger.debug('Refresh manifest in ' + delay + ' milliseconds.'); refreshTimer = setTimeout(_onRefreshTimer, delay); } @@ -328,14 +326,6 @@ function ManifestUpdater() { period.AdaptationSet.push(externalSubtitle.serializeToMpdParserFormat()); } - function onManifestValidityChanged(e) { - const { minimumUpdatePeriod } = manifestModel.getValue(); - if (minimumUpdatePeriod === 0 && e.inbandEvent) { - _stopManifestRefreshTimer(); - refreshDisabled = true; - } - } - function _onPlaybackStarted(/*e*/) { isPaused = false; startManifestRefreshTimer(); diff --git a/src/streaming/MediaPlayer.js b/src/streaming/MediaPlayer.js index c357391c9e..b47a1144e3 100644 --- a/src/streaming/MediaPlayer.js +++ b/src/streaming/MediaPlayer.js @@ -2574,13 +2574,12 @@ function MediaPlayer() { function _createManifestLoader() { return ManifestLoader(context).create({ - debug, - errHandler, - dashMetrics, - mediaPlayerModel, - mssHandler, - manifestModel, - settings + debug: debug, + errHandler: errHandler, + dashMetrics: dashMetrics, + mediaPlayerModel: mediaPlayerModel, + mssHandler: mssHandler, + settings: settings }); } diff --git a/src/streaming/constants/Constants.js b/src/streaming/constants/Constants.js index abb900f4de..ce4443665b 100644 --- a/src/streaming/constants/Constants.js +++ b/src/streaming/constants/Constants.js @@ -340,12 +340,6 @@ export default { ID3_SCHEME_ID_URI: 'https://aomedia.org/emsg/ID3', COMMON_ACCESS_TOKEN_HEADER: 'common-access-token', DASH_ROLE_SCHEME_ID : 'urn:mpeg:dash:role:2011', - MPD_VALIDITY_EXPIRATION: { - SCHEME: 'urn:mpeg:dash:event:2012', - RELOAD_VALUE: 1, - PATCH_VALUE: 2, - UPDATE_VALUE: 3, - }, CODEC_FAMILIES: { MP3: 'mp3', AAC: 'aac', diff --git a/src/streaming/controllers/EventController.js b/src/streaming/controllers/EventController.js index 9ad97d64c7..d5c39e5075 100644 --- a/src/streaming/controllers/EventController.js +++ b/src/streaming/controllers/EventController.js @@ -31,22 +31,17 @@ import FactoryMaker from '../../core/FactoryMaker.js'; import Debug from '../../core/Debug.js'; -import Events from '../../core/events/Events.js'; import EventBus from '../../core/EventBus.js'; import MediaPlayerEvents from '../../streaming/MediaPlayerEvents.js'; import XHRLoader from '../net/XHRLoader.js'; -import Constants from '../constants/Constants.js'; import Utils from '../../core/Utils.js'; import CommonMediaRequest from '../vo/CommonMediaRequest.js'; import CommonMediaResponse from '../vo/CommonMediaResponse.js'; function EventController() { - const MPD_VALIDITY_EXPIRATION_VALUES = [ - Constants.MPD_VALIDITY_EXPIRATION.RELOAD_VALUE, - Constants.MPD_VALIDITY_EXPIRATION.PATCH_VALUE, - Constants.MPD_VALIDITY_EXPIRATION.UPDATE_VALUE - ]; + const MPD_RELOAD_SCHEME = 'urn:mpeg:dash:event:2012'; + const MPD_RELOAD_VALUE = 1; const MPD_CALLBACK_SCHEME = 'urn:mpeg:dash:event:callback:2015'; const MPD_CALLBACK_VALUE = 1; @@ -270,8 +265,8 @@ function EventController() { let result = _addOrUpdateEvent(event, inbandEvents[periodId], false); if (result === EVENT_HANDLED_STATES.ADDED) { - if (event.eventStream.schemeIdUri === Constants.MPD_VALIDITY_EXPIRATION.SCHEME) { - _handleManifestReload(event); + if (event.eventStream.schemeIdUri === MPD_RELOAD_SCHEME) { + _handleManifestReloadEvent(event); } logger.debug(`Added inband event with id ${event.id} from period ${periodId}`); _startEvent(event, MediaPlayerEvents.EVENT_MODE_ON_RECEIVE); @@ -329,58 +324,27 @@ function EventController() { } /** - * Refreshes, patches, or updates the manifest based on the InbandEventStream value attribute. + * Triggers an MPD reload * @param {object} event * @private */ - function _handleManifestValidityExpirationEvent(event, currentVideoTime) { - switch (parseInt(event.eventStream.value)) { - case Constants.MPD_VALIDITY_EXPIRATION.RELOAD_VALUE: - logger.debug(`Starting manifest refresh event ${event.id} at ${currentVideoTime}`); - _refreshManifest(); - break; - case Constants.MPD_VALIDITY_EXPIRATION.PATCH_VALUE: - logger.debug(`Starting manifest patch event ${event.id} at ${currentVideoTime}`); - _patchManifest(event.parsedMessageData); - break; - case Constants.MPD_VALIDITY_EXPIRATION.UPDATE_VALUE: - logger.debug(`Starting manifest update ${event.id} at ${currentVideoTime}`); - _updateManifest(event.parsedMessageData); - break; - } - } - /** - * Triggers an MPD reload. - * @param {object} event - * @private - */ - function _handleManifestReload(event) { + function _handleManifestReloadEvent(event) { try { - const eventValue = parseInt(event.eventStream.value); - if (MPD_VALIDITY_EXPIRATION_VALUES.includes(eventValue)) { - let validityData = { - id: event.id, - newManifestValidAfter: NaN, //event.message_data - this is an arraybuffer with a timestring in it, but not used yet - inbandEvent: true, - } - - if (eventValue === Constants.MPD_VALIDITY_EXPIRATION.RELOAD_VALUE) { - const validUntil = event.calculatedPresentationTime; - let newDuration; - if (validUntil == 0xFFFFFFFF) {//0xFF... means remaining duration unknown - newDuration = NaN; - } else { - newDuration = validUntil + event.duration; - } - validityData = { - ...validityData, - validUntil: validUntil, - newDuration: newDuration, - } - logger.info('Manifest validity changed: Valid until: ' + validUntil + '; remaining duration: ' + newDuration); + if (event.eventStream.value == MPD_RELOAD_VALUE) { + const validUntil = event.calculatedPresentationTime; + let newDuration; + if (event.calculatedPresentationTime == 0xFFFFFFFF) {//0xFF... means remaining duration unknown + newDuration = NaN; + } else { + newDuration = event.calculatedPresentationTime + event.duration; } - - eventBus.trigger(MediaPlayerEvents.MANIFEST_VALIDITY_CHANGED, validityData, { + //logger.info('Manifest validity changed: Valid until: ' + validUntil + '; remaining duration: ' + newDuration); + eventBus.trigger(MediaPlayerEvents.MANIFEST_VALIDITY_CHANGED, { + id: event.id, + validUntil: validUntil, + newDuration: newDuration, + newManifestValidAfter: NaN //event.message_data - this is an arraybuffer with a timestring in it, but not used yet + }, { mode: MediaPlayerEvents.EVENT_MODE_ON_START }); } @@ -518,10 +482,11 @@ function EventController() { } if (!event.triggeredStartEvent) { - if (event.eventStream.schemeIdUri === Constants.MPD_VALIDITY_EXPIRATION.SCHEME) { + if (event.eventStream.schemeIdUri === MPD_RELOAD_SCHEME && event.eventStream.value == MPD_RELOAD_VALUE) { //If both are set to zero, it indicates the media is over at this point. Don't reload the manifest. if (event.duration !== 0 || event.presentationTimeDelta !== 0) { - _handleManifestValidityExpirationEvent(event, currentVideoTime) + logger.debug(`Starting manifest refresh event ${eventId} at ${currentVideoTime}`); + _refreshManifest(); } } else if (event.eventStream.schemeIdUri === MPD_CALLBACK_SCHEME && event.eventStream.value == MPD_CALLBACK_VALUE) { logger.debug(`Starting callback event ${eventId} at ${currentVideoTime}`); @@ -582,46 +547,6 @@ function EventController() { } } - /** - * Patch the manifest - * @private - */ - function _patchManifest(parsedMessageData) { - try { - checkConfig(); - const match = parsedMessageData.match(/^([\d-T:Z]+)(<.*)/); - const publishTime = match[1]; - const patchXMLString = match[2] - logger.info(`Patch manifest not supported yet: Publish time: ${publishTime}, MPD patch: ${patchXMLString}..`); - } catch (e) { - logger.error(e); - } - } - - /** - * Update the manifest - * @private - */ - function _updateManifest(parsedMessageData) { - try { - checkConfig(); - const regex = /^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z)(<\?xml[\s\S]*<\/MPD>)/; - const match = parsedMessageData.match(regex); - let publishTime - let xmlString - if (match) { - publishTime = match[1]; - xmlString = match[2]; - } else { - throw new Error('No MPD found in the message data.') - } - logger.info(`Updating current manifest. Publish time: ${publishTime}, MPD: ${xmlString}.`); - eventBus.trigger(Events.MPD_EXPIRE_UPDATE, { xmlString }); - } catch (e) { - logger.error(e); - } - } - /** * Send a callback request * @param {String} url diff --git a/test/unit/test/dash/dash.DashAdapter.js b/test/unit/test/dash/dash.DashAdapter.js index 5baf2c7360..f400637fcf 100644 --- a/test/unit/test/dash/dash.DashAdapter.js +++ b/test/unit/test/dash/dash.DashAdapter.js @@ -356,20 +356,6 @@ describe('DashAdapter', function () { expect(event).to.be.an('object'); }); - it('should return an event with a valid parsedMessageData', function () { - const representation = { presentationTimeOffset: 0, adaptation: { period: { start: 0 } } }; - const messageData = new Uint8Array([10, 20, 30]); - const eventBox = { - scheme_id_uri: 'id', - value: 'value', - message_data: messageData, - } - - const event = dashAdapter.getEvent( eventBox, { 'id/value': {} }, 0, representation); - expect(event.parsedMessageData).to.be.a('string').and.not.empty; - expect(event.parsedMessageData).to.not.be.undefined; - }); - it('should calculate correct start time for a version 0 event without PTO', function () { const representation = { adaptation: { period: { start: 10 } } }; const eventBox = { scheme_id_uri: 'id', value: 'value', presentation_time_delta: 12, version: 0 }; diff --git a/test/unit/test/streaming/streaming.ManifestLoader.js b/test/unit/test/streaming/streaming.ManifestLoader.js deleted file mode 100644 index 4c72b3952c..0000000000 --- a/test/unit/test/streaming/streaming.ManifestLoader.js +++ /dev/null @@ -1,162 +0,0 @@ -import ManifestLoader from '../../../../src/streaming/ManifestLoader.js'; -import Events from '../../../../src/core/events/Events.js'; -import EventBus from '../../../../src/core/EventBus.js'; -import Errors from '../../../../src/core/errors/Errors.js'; -import Settings from '../../../../src/core/Settings.js'; -import ErrorHandlerMock from '../../mocks/ErrorHandlerMock.js'; -import ManifestModelMock from '../../mocks/ManifestModelMock.js'; -import DashMetricsMock from '../../mocks/DashMetricsMock.js'; -import MediaPlayerModelMock from '../../mocks/MediaPlayerModelMock.js'; -import DebugMock from '../../mocks/DebugMock.js'; - -import {expect} from 'chai'; -import sinon from 'sinon'; - -describe('ManifestLoader', function () { - const context = {}; - const eventBus = EventBus(context).getInstance(); - let manifestLoader; - let errorHandlerMock; - let manifestModelMock; - let dashMetricsMock; - let mediaPlayerModelMock; - let debugMock; - let settings; - - beforeEach(function () { - errorHandlerMock = new ErrorHandlerMock(); - manifestModelMock = new ManifestModelMock(); - dashMetricsMock = new DashMetricsMock(); - mediaPlayerModelMock = new MediaPlayerModelMock(); - debugMock = new DebugMock(); - settings = Settings(context).getInstance(); - - manifestModelMock.setValue({ - url: 'http://example.com/manifest.mpd', - originalUrl: 'http://example.com/manifest.mpd' - }); - - manifestLoader = ManifestLoader(context).create({ - errHandler: errorHandlerMock, - manifestModel: manifestModelMock, - dashMetrics: dashMetricsMock, - mediaPlayerModel: mediaPlayerModelMock, - debug: debugMock, - settings: settings - }); - }); - - afterEach(function () { - manifestLoader.reset(); - eventBus.reset(); - settings.reset(); - }); - - describe('when MPD_EXPIRE_UPDATE event is triggered', function () { - - it('should trigger INTERNAL_MANIFEST_LOADED with MANIFEST_LOADER_PARSING_FAILURE_ERROR_CODE when parser.parse() throws an exception', function (done) { - const errorHandler = function (event) { - try { - expect(event.manifest).to.be.null; - expect(event.error).to.exist; - expect(event.error.code).to.equal(Errors.MANIFEST_LOADER_PARSING_FAILURE_ERROR_CODE); - - eventBus.off(Events.INTERNAL_MANIFEST_LOADED, errorHandler); - done(); - } catch (error) { - done(error); - } - }; - - eventBus.on(Events.INTERNAL_MANIFEST_LOADED, errorHandler, this); - - const malformedXml = ''; - - eventBus.trigger(Events.MPD_EXPIRE_UPDATE, { - xmlString: malformedXml - }); - }); - - it('should trigger INTERNAL_MANIFEST_LOADED with MANIFEST_LOADER_PARSING_FAILURE_ERROR_CODE when createParser returns null', function (done) { - const errorHandler = function (event) { - try { - expect(event.manifest).to.be.null; - expect(event.error).to.exist; - expect(event.error.code).to.equal(Errors.MANIFEST_LOADER_PARSING_FAILURE_ERROR_CODE); - - eventBus.off(Events.INTERNAL_MANIFEST_LOADED, errorHandler); - done(); - } catch (error) { - done(error); - } - }; - - eventBus.on(Events.INTERNAL_MANIFEST_LOADED, errorHandler, this); - - const unrecognizedFormat = 'This is not a valid manifest format'; - - eventBus.trigger(Events.MPD_EXPIRE_UPDATE, { - xmlString: unrecognizedFormat - }); - }); - - it('should not trigger INTERNAL_MANIFEST_LOADED when _updateManifest is called but xlinkController is null', function () { - // Reset manifest loader to simulate xlinkController being null - manifestLoader.reset(); - - const spy = sinon.spy(); - eventBus.on(Events.INTERNAL_MANIFEST_LOADED, spy); - - eventBus.trigger(Events.MPD_EXPIRE_UPDATE, { - xmlString: '' - }); - - // Assert: No event should be triggered - sinon.assert.notCalled(spy); - - eventBus.off(Events.INTERNAL_MANIFEST_LOADED, spy); - }); - - it('should successfully process valid DASH manifest and trigger INTERNAL_MANIFEST_LOADED without error', function (done) { - const successHandler = function (event) { - try { - expect(event.manifest).to.exist; - expect(event.error).to.be.undefined; - - eventBus.off(Events.INTERNAL_MANIFEST_LOADED, successHandler); - done(); - } catch (error) { - done(error); - } - }; - - eventBus.on(Events.INTERNAL_MANIFEST_LOADED, successHandler, this); - - const validDashManifest = ` - - - - - - - - - - - - - `; - - eventBus.trigger(Events.MPD_EXPIRE_UPDATE, { - xmlString: validDashManifest - }); - }); - }); -}); \ No newline at end of file diff --git a/test/unit/test/streaming/streaming.controllers.EventController.js b/test/unit/test/streaming/streaming.controllers.EventController.js index 70e6967c5a..1d94d27306 100644 --- a/test/unit/test/streaming/streaming.controllers.EventController.js +++ b/test/unit/test/streaming/streaming.controllers.EventController.js @@ -1,13 +1,11 @@ import EventController from '../../../../src/streaming/controllers/EventController.js'; import EventBus from '../../../../src/core/EventBus.js'; -import Events from '../../../../src/core/events/Events.js'; import MediaPlayerEvents from '../../../../src/streaming/MediaPlayerEvents.js'; import PlaybackControllerMock from '../../mocks/PlaybackControllerMock.js'; import ManifestUpdaterMock from '../../mocks/ManifestUpdaterMock.js'; import Settings from '../../../../src/core/Settings.js'; import {expect} from 'chai'; -import sinon from 'sinon'; const context = {}; const eventBus = EventBus(context).getInstance(); @@ -577,60 +575,5 @@ describe('EventController', function () { eventBus.off(MediaPlayerEvents.MANIFEST_VALIDITY_CHANGED, manifestValidityExpiredHandler, this); }); - - it('should fire MPD_EXPIRE_UPDATE events for value 3', async () => { - let newManifestExpiredEventStub = {...manifestExpiredEventStub}; - newManifestExpiredEventStub.eventStream.value = '3'; - newManifestExpiredEventStub.duration = 1; - newManifestExpiredEventStub.calculatedPresentationTime = 0; - newManifestExpiredEventStub.parsedMessageData = `2024-03-24T15:30:45Z - - `; - - const spy = sinon.spy(eventBus, 'trigger'); - const mpdExpireUpdatePromise = new Promise((resolve) => { - eventBus.on(Events.MPD_EXPIRE_UPDATE, () => { - resolve(); - }); - }); - - const timeoutPromise = new Promise((_, reject) => - setTimeout(() => reject(new Error('Timeout: MPD_EXPIRE_UPDATE event was not triggered')), 4000) - ); - - eventController.addInbandEvents([newManifestExpiredEventStub], 'periodId'); - - await Promise.race([mpdExpireUpdatePromise, timeoutPromise]); - sinon.assert.calledWith(spy, Events.MPD_EXPIRE_UPDATE, sinon.match.any); - sinon.restore() - }); - - it('should fire MANIFEST_VALIDITY_CHANGED events for value 3', async () => { - let newManifestExpiredEventStub = {...manifestExpiredEventStub}; - newManifestExpiredEventStub.eventStream.value = '3'; - newManifestExpiredEventStub.duration = 1; - newManifestExpiredEventStub.calculatedPresentationTime = 0; - newManifestExpiredEventStub.parsedMessageData = `2024-03-24T15:30:45Z - - `; - - const spy = sinon.spy(eventBus, 'trigger'); - const manifestValidityChanged = new Promise((resolve) => { - eventBus.on(MediaPlayerEvents.MANIFEST_VALIDITY_CHANGED, () => { - resolve(); - }); - }); - - const timeoutPromise = new Promise((_, reject) => - setTimeout(() => reject(new Error('Timeout: MANIFEST_VALIDITY_CHANGED event was not triggered')), 4000) - ); - - eventController.addInbandEvents([newManifestExpiredEventStub], 'periodId'); - - await Promise.race([manifestValidityChanged, timeoutPromise]); - sinon.assert.calledWith(spy, MediaPlayerEvents.MANIFEST_VALIDITY_CHANGED, sinon.match.any); - sinon.restore() - }); - }); });