From 4ff8fab9f9630f669c6b07997d07c38d05f4d27c Mon Sep 17 00:00:00 2001 From: Bertrand Berthelot Date: Tue, 3 Nov 2020 09:22:37 +0100 Subject: [PATCH] Rename event DYNAMIC_STREAM_COMPLETED to DYNAMIC_TO_STATIC and move it into MediaPlayerEvents --- index.d.ts | 5 +++++ samples/getting-started/listening-to-events.html | 1 + src/core/events/CoreEvents.js | 1 - src/dash/DashHandler.js | 6 +++--- src/streaming/ManifestUpdater.js | 2 +- src/streaming/MediaPlayerEvents.js | 6 ++++++ test/unit/dash.DashHandler.js | 3 +++ 7 files changed, 19 insertions(+), 5 deletions(-) diff --git a/index.d.ts b/index.d.ts index 34157965d3..a487d4c76d 100644 --- a/index.d.ts +++ b/index.d.ts @@ -217,6 +217,7 @@ declare namespace dashjs { on(type: BufferEvent['type'], listener: (e: BufferEvent) => void, scope?: object): void; on(type: CaptionRenderedEvent['type'], listener: (e: CaptionRenderedEvent) => void, scope?: object): void; on(type: CaptionContainerResizeEvent['type'], listener: (e: CaptionContainerResizeEvent) => void, scope?: object): void; + on(type: DynamicToStaticEvent['type'], listener: (e: DynamicToStaticEvent) => void, scope?: object): void; on(type: ErrorEvent['type'], listener: (e: ErrorEvent) => void, scope?: object): void; on(type: FragmentLoadingCompletedEvent['type'], listener: (e: FragmentLoadingCompletedEvent) => void, scope?: object): void; on(type: FragmentLoadingAbandonedEvent['type'], listener: (e: FragmentLoadingAbandonedEvent) => void, scope?: object): void; @@ -418,6 +419,7 @@ declare namespace dashjs { CAN_PLAY: 'canPlay'; CAPTION_RENDERED: 'captionRendered'; CAPTION_CONTAINER_RESIZE: 'captionContainerResize'; + DYNAMIC_TO_STATIC: 'dynamicToStatic'; ERROR: 'error'; FRAGMENT_LOADING_ABANDONED: 'fragmentLoadingAbandoned'; FRAGMENT_LOADING_COMPLETED: 'fragmentLoadingCompleted'; @@ -606,6 +608,9 @@ declare namespace dashjs { type: MediaPlayerEvents['CAPTION_CONTAINER_RESIZE']; } + export interface DynamicToStaticEvent extends Event { + type: MediaPlayerEvents['DYNAMIC_TO_STATIC']; + } export interface FragmentLoadingCompletedEvent extends Event { type: MediaPlayerEvents['FRAGMENT_LOADING_COMPLETED']; request: FragmentRequest; diff --git a/samples/getting-started/listening-to-events.html b/samples/getting-started/listening-to-events.html index a2ec77e861..dd9ce1b21c 100644 --- a/samples/getting-started/listening-to-events.html +++ b/samples/getting-started/listening-to-events.html @@ -107,6 +107,7 @@ + diff --git a/src/core/events/CoreEvents.js b/src/core/events/CoreEvents.js index fc581abc7d..b9962960fc 100644 --- a/src/core/events/CoreEvents.js +++ b/src/core/events/CoreEvents.js @@ -83,7 +83,6 @@ class CoreEvents extends EventsBase { this.SEGMENTBASE_INIT_REQUEST_NEEDED = 'segmentBaseInitRequestNeeded'; this.SEGMENTBASE_SEGMENTSLIST_REQUEST_NEEDED = 'segmentBaseSegmentsListRequestNeeded'; this.SEEK_TARGET = 'seekTarget'; - this.DYNAMIC_STREAM_COMPLETED = 'dynamicStreamCompleted'; } } diff --git a/src/dash/DashHandler.js b/src/dash/DashHandler.js index bd74f19fe6..f660cdabe1 100644 --- a/src/dash/DashHandler.js +++ b/src/dash/DashHandler.js @@ -76,7 +76,7 @@ function DashHandler(config) { eventBus.on(events.INITIALIZATION_LOADED, onInitializationLoaded, instance); eventBus.on(events.SEGMENTS_LOADED, onSegmentsLoaded, instance); eventBus.on(events.REPRESENTATION_UPDATE_STARTED, onRepresentationUpdateStarted, instance); - eventBus.on(events.DYNAMIC_STREAM_COMPLETED, onDynamicStreamCompleted, instance); + eventBus.on(events.DYNAMIC_TO_STATIC, onDynamicToStatic, instance); } function initialize(isDynamic) { @@ -119,7 +119,7 @@ function DashHandler(config) { eventBus.off(events.INITIALIZATION_LOADED, onInitializationLoaded, instance); eventBus.off(events.SEGMENTS_LOADED, onSegmentsLoaded, instance); eventBus.off(events.REPRESENTATION_UPDATE_STARTED, onRepresentationUpdateStarted, instance); - eventBus.off(events.DYNAMIC_STREAM_COMPLETED, onDynamicStreamCompleted, instance); + eventBus.off(events.DYNAMIC_TO_STATIC, onDynamicToStatic, instance); } function setRequestUrl(request, destination, representation) { @@ -420,7 +420,7 @@ function DashHandler(config) { eventBus.trigger(events.REPRESENTATION_UPDATE_COMPLETED, {sender: this, representation: representation}); } - function onDynamicStreamCompleted() { + function onDynamicToStatic() { logger.debug('Dynamic stream complete'); dynamicStreamCompleted = true; } diff --git a/src/streaming/ManifestUpdater.js b/src/streaming/ManifestUpdater.js index 3cb23e4b6a..3ee04c51e8 100644 --- a/src/streaming/ManifestUpdater.js +++ b/src/streaming/ManifestUpdater.js @@ -148,7 +148,7 @@ function ManifestUpdater() { // See DASH-IF IOP v4.3 section 4.6.4 "Transition Phase between Live and On-Demand" // Stop manifest update, ignore static manifest and signal end of dynamic stream to detect end of stream if (manifestModel.getValue() && manifestModel.getValue().type === DashConstants.DYNAMIC && manifest.type === DashConstants.STATIC) { - eventBus.trigger(Events.DYNAMIC_STREAM_COMPLETED); + eventBus.trigger(Events.DYNAMIC_TO_STATIC); isUpdating = false; isStopped = true; return; diff --git a/src/streaming/MediaPlayerEvents.js b/src/streaming/MediaPlayerEvents.js index 8e553a2a5c..ac8d58f558 100644 --- a/src/streaming/MediaPlayerEvents.js +++ b/src/streaming/MediaPlayerEvents.js @@ -69,6 +69,12 @@ class MediaPlayerEvents extends EventsBase { */ this.BUFFER_LEVEL_STATE_CHANGED = 'bufferStateChanged'; + /** + * Triggered when a dynamic stream changed to static (transition phase between Live and On-Demand). + * @event MediaPlayerEvents#DYNAMIC_TO_STATIC + */ + this.DYNAMIC_TO_STATIC = 'dynamicToStatic'; + /** * Triggered when there is an error from the element or MSE source buffer. * @event MediaPlayerEvents#ERROR diff --git a/test/unit/dash.DashHandler.js b/test/unit/dash.DashHandler.js index 1e2126048b..e9d26316ad 100644 --- a/test/unit/dash.DashHandler.js +++ b/test/unit/dash.DashHandler.js @@ -6,6 +6,7 @@ import Events from '../../src/core/events/Events'; import EventBus from '../../src/core/EventBus'; import Debug from '../../src/core/Debug'; import URLUtils from '../../src/streaming/utils/URLUtils'; +import MediaPlayerEvents from '../../src/streaming/MediaPlayerEvents'; import ObjectsHelper from './helpers/ObjectsHelper'; import VoHelper from './helpers/VOHelper'; @@ -25,6 +26,8 @@ describe('DashHandler', function () { const eventBus = EventBus(context).getInstance(); const debug = Debug(context).getInstance(); + Events.extend(MediaPlayerEvents); + const timelineConverter = objectsHelper.getDummyTimelineConverter(); const streamProcessor = objectsHelper.getDummyStreamProcessor(testType); const baseURLController = objectsHelper.getDummyBaseURLController();