@npo/player 1.27.8 → 1.28.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -7
- package/lib/js/markers/updateLiveMarkers.d.ts +7 -2
- package/lib/js/markers/updateLiveMarkers.js +11 -4
- package/lib/js/markers/updateLiveMarkers.test.js +13 -3
- package/lib/js/playeractions/handlers/handleoffsets.test.js +1 -1
- package/lib/js/playeractions/handlers/mediasessionactions.d.ts +7 -2
- package/lib/js/playeractions/handlers/mediasessionactions.js +7 -7
- package/lib/js/playeractions/handlers/processplayerconfig.d.ts +1 -1
- package/lib/js/playeractions/handlers/processplayerconfig.js +1 -1
- package/lib/js/playeractions/handlers/processplayerconfig.test.js +1 -1
- package/lib/js/playeractions/handlers/processsourceconfig.d.ts +11 -2
- package/lib/js/playeractions/handlers/processsourceconfig.js +35 -18
- package/lib/js/playeractions/handlers/removereplayclass.d.ts +1 -1
- package/lib/js/playeractions/handlers/removereplayclass.js +1 -1
- package/lib/js/playeractions/handlers/removereplayclass.test.js +1 -1
- package/lib/js/settings/localization.d.ts +1 -0
- package/lib/js/utilities/utilities.jwt.d.ts +2 -0
- package/lib/js/utilities/utilities.jwt.js +22 -0
- package/lib/js/utilities/utilities.stream.js +11 -2
- package/lib/js/utilities/utilities.url.js +2 -2
- package/lib/js/utilities/utilities.version.js +1 -1
- package/lib/js/utilities/utilities.version.test.js +1 -1
- package/lib/lang/nl.json +2 -1
- package/lib/npoplayer.d.ts +6 -5
- package/lib/npoplayer.js +66 -23
- package/lib/package.json +7 -9
- package/lib/services/a11y/setup.test.js +2 -4
- package/lib/services/advertHandlers/handlePreRolls.js +3 -4
- package/lib/services/advertHandlers/handlePrerolls.test.js +2 -3
- package/lib/services/chapterHandlers/chapterHandler.d.ts +35 -0
- package/lib/services/chapterHandlers/chapterHandler.js +230 -0
- package/lib/services/errors/errorBackground.test.js +1 -1
- package/lib/services/errors/errorHandler.d.ts +4 -2
- package/lib/services/errors/errorHandler.js +27 -14
- package/lib/services/errors/errorHandler.test.js +148 -0
- package/lib/services/errors/errorRetryHandler.d.ts +2 -0
- package/lib/services/errors/errorRetryHandler.js +14 -0
- package/lib/services/errors/errorRetryHandler.test.d.ts +1 -0
- package/lib/services/errors/errorRetryHandler.test.js +62 -0
- package/lib/services/errors/errorText.js +8 -5
- package/lib/services/errors/errorText.test.js +3 -3
- package/lib/services/infoPanel/infoPanel.d.ts +3 -0
- package/lib/services/infoPanel/infoPanel.js +35 -0
- package/lib/services/infoPanel/infoPanel.test.d.ts +1 -0
- package/lib/services/infoPanel/infoPanel.test.js +70 -0
- package/lib/services/keyboardHandlers/resolvekeypress.js +11 -1
- package/lib/services/keyboardHandlers/resolvekeypress.test.js +6 -2
- package/lib/services/nicamHandlers/nicamhandler.d.ts +1 -0
- package/lib/services/nicamHandlers/nicamhandler.js +2 -1
- package/lib/services/nicamHandlers/nicamhandler.test.js +2 -2
- package/lib/services/npoPlayerAPI/npoPlayerAPI.d.ts +8 -2
- package/lib/services/npoPlayerAPI/npoPlayerAPI.js +25 -12
- package/lib/services/npoPlayerAPI/playerModules.d.ts +1 -0
- package/lib/services/npoPlayerAPI/playerModules.js +46 -0
- package/lib/services/preferences/handlePreferences.js +9 -4
- package/lib/services/preferences/handlePreferences.test.js +53 -17
- package/lib/services/segmentHandlers/addSegmentEventListeners.test.js +1 -1
- package/lib/services/segmentHandlers/isSegmentInBounds.d.ts +2 -0
- package/lib/services/segmentHandlers/isSegmentInBounds.js +5 -0
- package/lib/services/segmentHandlers/isSegmentInBounds.test.d.ts +1 -0
- package/lib/services/segmentHandlers/isSegmentInBounds.test.js +27 -0
- package/lib/services/services.d.ts +5 -2
- package/lib/services/services.js +15 -2
- package/lib/services/streamFetchHandler/fetchStream.js +5 -4
- package/lib/services/streamFetchHandler/fetchstream.test.js +25 -3
- package/lib/services/streamoptionsHandlers/streamOptionsHandler.js +11 -9
- package/lib/services/streamoptionsHandlers/streamOptionsHandler.test.js +14 -2
- package/lib/services/trackingHandlers/eventBinding.js +48 -33
- package/lib/services/trackingHandlers/eventBinding.test.js +57 -1
- package/lib/services/trackingHandlers/playerTrackerStart.js +1 -1
- package/lib/services/uiHandlers/uiVisiblityHandler.js +6 -0
- package/lib/services/verticalVideoHandlers/handleVerticalVideoSettings.test.js +0 -9
- package/lib/src/js/markers/updateLiveMarkers.d.ts +7 -2
- package/lib/src/js/playeractions/handlers/mediasessionactions.d.ts +7 -2
- package/lib/src/js/playeractions/handlers/processplayerconfig.d.ts +1 -1
- package/lib/src/js/playeractions/handlers/processsourceconfig.d.ts +11 -2
- package/lib/src/js/playeractions/handlers/removereplayclass.d.ts +1 -1
- package/lib/src/js/settings/localization.d.ts +1 -0
- package/lib/src/js/utilities/utilities.jwt.d.ts +2 -0
- package/lib/src/npoplayer.d.ts +6 -5
- package/lib/src/services/chapterHandlers/chapterHandler.d.ts +35 -0
- package/lib/src/services/errors/errorHandler.d.ts +4 -2
- package/lib/src/services/errors/errorRetryHandler.d.ts +2 -0
- package/lib/src/services/errors/errorRetryHandler.test.d.ts +1 -0
- package/lib/src/services/infoPanel/infoPanel.d.ts +3 -0
- package/lib/src/services/infoPanel/infoPanel.test.d.ts +1 -0
- package/lib/src/services/nicamHandlers/nicamhandler.d.ts +1 -0
- package/lib/src/services/npoPlayerAPI/npoPlayerAPI.d.ts +8 -2
- package/lib/src/services/npoPlayerAPI/playerModules.d.ts +1 -0
- package/lib/src/services/segmentHandlers/isSegmentInBounds.d.ts +2 -0
- package/lib/src/services/segmentHandlers/isSegmentInBounds.test.d.ts +1 -0
- package/lib/src/services/services.d.ts +5 -2
- package/lib/src/types/events.d.ts +1 -1
- package/lib/src/types/interfaces.d.ts +39 -43
- package/lib/src/ui/components/adbutton.d.ts +3 -6
- package/lib/src/ui/components/adlabel.d.ts +3 -6
- package/lib/src/ui/components/audio/controlbar.d.ts +2 -2
- package/lib/src/ui/components/buttons.d.ts +18 -11
- package/lib/src/ui/components/ctabar.d.ts +4 -10
- package/lib/src/ui/components/infopanel/infopanel.d.ts +3 -0
- package/lib/src/ui/components/infopanel/togglebutton.d.ts +3 -0
- package/lib/src/ui/components/playnext.d.ts +3 -9
- package/lib/src/ui/components/seekbar.d.ts +2 -3
- package/lib/src/ui/components/settingspanel.d.ts +2 -3
- package/lib/src/ui/components/titlebar.d.ts +2 -2
- package/lib/src/ui/handlers/domhandlers.d.ts +2 -2
- package/lib/src/ui/handlers/listboxhandlers.d.ts +18 -4
- package/lib/src/ui/handlers/playnextscreen.d.ts +6 -2
- package/lib/src/ui/uicontainer.d.ts +1 -2
- package/lib/tests/jest.setup-files-after-env.d.ts +0 -0
- package/lib/tests/jest.setup-files-after-env.js +6 -0
- package/lib/tests/jest.setup-tests.d.ts +1 -0
- package/lib/tests/jest.setup-tests.js +2 -0
- package/lib/tests/mocks/mockNpoplayer.js +27 -44
- package/lib/tests/mocks/mockPlayerAPI.d.ts +1 -1
- package/lib/tests/mocks/mockPlayerAPI.js +15 -1
- package/lib/tests/mocks/mockPlayerUi.d.ts +64 -0
- package/lib/tests/mocks/mockPlayerUi.js +251 -0
- package/lib/tests/mocks/playerContextMock.d.ts +3 -66
- package/lib/tests/mocks/playerContextMock.js +34 -7
- package/lib/types/events.d.ts +1 -1
- package/lib/types/events.js +1 -1
- package/lib/types/interfaces.d.ts +39 -43
- package/lib/types/interfaces.js +0 -27
- package/lib/ui/components/adbutton.d.ts +3 -6
- package/lib/ui/components/adbutton.js +2 -1
- package/lib/ui/components/adlabel.d.ts +3 -6
- package/lib/ui/components/adlabel.js +2 -1
- package/lib/ui/components/audio/controlbar.d.ts +2 -2
- package/lib/ui/components/audio/controlbar.js +6 -6
- package/lib/ui/components/buttons.d.ts +18 -11
- package/lib/ui/components/buttons.js +44 -26
- package/lib/ui/components/controlbar.js +13 -9
- package/lib/ui/components/ctabar.d.ts +4 -10
- package/lib/ui/components/ctabar.js +8 -7
- package/lib/ui/components/infopanel/infopanel.d.ts +3 -0
- package/lib/ui/components/infopanel/infopanel.js +42 -0
- package/lib/ui/components/infopanel/togglebutton.d.ts +3 -0
- package/lib/ui/components/infopanel/togglebutton.js +18 -0
- package/lib/ui/components/playnext.d.ts +3 -9
- package/lib/ui/components/playnext.js +3 -3
- package/lib/ui/components/seekbar.d.ts +2 -3
- package/lib/ui/components/seekbar.js +7 -3
- package/lib/ui/components/settingspanel.d.ts +2 -3
- package/lib/ui/components/settingspanel.js +79 -53
- package/lib/ui/components/titlebar.d.ts +2 -2
- package/lib/ui/components/titlebar.js +2 -1
- package/lib/ui/components/topbar.js +8 -5
- package/lib/ui/components/verticalvideo/controlbar.js +5 -2
- package/lib/ui/components/verticalvideo/settingspanel.js +9 -5
- package/lib/ui/handlers/accessibilityhandler.js +11 -22
- package/lib/ui/handlers/accessibilityhandler.test.js +25 -34
- package/lib/ui/handlers/domhandlers.d.ts +2 -2
- package/lib/ui/handlers/listboxhandlers.d.ts +18 -4
- package/lib/ui/handlers/listboxhandlers.js +5 -3
- package/lib/ui/handlers/playnextscreen.d.ts +6 -2
- package/lib/ui/handlers/playnextscreen.js +4 -4
- package/lib/ui/handlers/playnextscreen.test.js +15 -3
- package/lib/ui/uicontainer.d.ts +1 -2
- package/lib/ui/uicontainer.js +24 -8
- package/lib/ui/uicontainer.test.js +6 -5
- package/package.json +7 -9
- package/src/style/components/_advert.scss +0 -4
- package/src/style/components/_buffering.scss +18 -22
- package/src/style/components/_controlbars.scss +0 -4
- package/src/style/components/_icons.scss +18 -4
- package/src/style/components/_infopanel.scss +105 -0
- package/src/style/components/_nicam.scss +8 -4
- package/src/style/components/_seekbarthumbnail.scss +5 -0
- package/src/style/components/_settingspanel.scss +2 -2
- package/src/style/components/_subtitles.scss +0 -1
- package/src/style/components/_textbuttons.scss +30 -1
- package/src/style/components/_volumeslider.scss +0 -1
- package/src/style/components/audio/_bottombar.scss +6 -0
- package/src/style/components/audio/_metadata.scss +25 -9
- package/src/style/components/audio/_topbar.scss +6 -1
- package/src/style/npoplayer.css +170 -85
- package/src/style/npoplayer.scss +10 -2
- package/src/style/variants/_player-audio-only.scss +32 -0
- package/src/style/variants/_player-base.scss +5 -1
- package/src/style/variants/_player-large.scss +11 -3
- package/src/style/variants/_player-medium.scss +5 -1
- package/src/style/variants/_player-small.scss +6 -1
- package/src/style/vars/_colors.scss +1 -1
- package/src/style/vars/_icons.scss +5 -4
- package/src/style/vars/_z-index.scss +1 -1
- package/lib/npoplayer-bridge.test.js +0 -24
- package/lib/src/ui/components/nativemobile/buttons.d.ts +0 -30
- package/lib/src/ui/components/nativemobile/controlbar.d.ts +0 -3
- package/lib/src/ui/components/nativemobile/ctabar.d.ts +0 -11
- package/lib/src/ui/components/nativemobile/titlebar.d.ts +0 -2
- package/lib/src/ui/components/nativemobile/topbar.d.ts +0 -3
- package/lib/src/ui/nativemobileuicontainer.d.ts +0 -5
- package/lib/src/ui/nativemobileuifactory.d.ts +0 -3
- package/lib/src/ui/nativemobileuifactory.test.d.ts +0 -1
- package/lib/ui/components/nativemobile/buttons.d.ts +0 -30
- package/lib/ui/components/nativemobile/buttons.js +0 -233
- package/lib/ui/components/nativemobile/controlbar.d.ts +0 -3
- package/lib/ui/components/nativemobile/controlbar.js +0 -43
- package/lib/ui/components/nativemobile/ctabar.d.ts +0 -11
- package/lib/ui/components/nativemobile/ctabar.js +0 -10
- package/lib/ui/components/nativemobile/titlebar.d.ts +0 -2
- package/lib/ui/components/nativemobile/titlebar.js +0 -7
- package/lib/ui/components/nativemobile/topbar.d.ts +0 -3
- package/lib/ui/components/nativemobile/topbar.js +0 -23
- package/lib/ui/nativemobileuicontainer.d.ts +0 -5
- package/lib/ui/nativemobileuicontainer.js +0 -42
- package/lib/ui/nativemobileuifactory.d.ts +0 -3
- package/lib/ui/nativemobileuifactory.js +0 -112
- package/lib/ui/nativemobileuifactory.test.d.ts +0 -1
- package/lib/ui/nativemobileuifactory.test.js +0 -64
- package/src/style/variants/_player-native-mobile.scss +0 -13
- /package/lib/{npoplayer-bridge.test.d.ts → services/errors/errorHandler.test.d.ts} +0 -0
- /package/lib/src/{npoplayer-bridge.test.d.ts → services/errors/errorHandler.test.d.ts} +0 -0
|
@@ -1,22 +1,20 @@
|
|
|
1
|
-
import { PlayerEvent, ViewMode } from 'bitmovin-player';
|
|
1
|
+
import { PlayerEvent, ViewMode } from 'bitmovin-player/modules/bitmovinplayer-core';
|
|
2
2
|
import { logEvent } from './eventLogging';
|
|
3
3
|
const logEventHandlers = new Map();
|
|
4
4
|
export function bindPlayerEvents(playerContext) {
|
|
5
|
-
const {
|
|
6
|
-
const {
|
|
5
|
+
const { player, streamObject, adBreakActive } = playerContext.npoPlayer;
|
|
6
|
+
const { isLiveStream } = streamObject.stream;
|
|
7
7
|
if (player == undefined)
|
|
8
8
|
return;
|
|
9
|
-
const isLiveStream = streamObject.stream.isLiveStream;
|
|
10
9
|
let isNewSource = true;
|
|
11
10
|
let data = {};
|
|
12
11
|
const timeDifference = (time) => {
|
|
13
12
|
if (time === undefined || time === null)
|
|
14
13
|
return;
|
|
15
14
|
const currentUnixTime = Date.now() / 1000;
|
|
16
|
-
const timeOffset =
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
data = { stream_position: currentTime };
|
|
15
|
+
const timeOffset = time > 0 ? time - currentUnixTime : time;
|
|
16
|
+
const currentTime = isLiveStream ? timeOffset : time;
|
|
17
|
+
data = { stream_position: +currentTime.toFixed(3) };
|
|
20
18
|
};
|
|
21
19
|
const logEventHandler = (event) => {
|
|
22
20
|
return (e) => {
|
|
@@ -24,21 +22,21 @@ export function bindPlayerEvents(playerContext) {
|
|
|
24
22
|
logEvent({ playerContext, event, data });
|
|
25
23
|
};
|
|
26
24
|
};
|
|
25
|
+
const timeShiftHandler = (e) => {
|
|
26
|
+
const from = data.stream_position ?? 0;
|
|
27
|
+
const currentTime = playerContext.player.getCurrentTime();
|
|
28
|
+
const to = e.target - currentTime + from;
|
|
29
|
+
data = {
|
|
30
|
+
seek_from: +from.toFixed(3),
|
|
31
|
+
stream_position: +to.toFixed(3)
|
|
32
|
+
};
|
|
33
|
+
logEvent({ playerContext, event: 'seek', data });
|
|
34
|
+
};
|
|
27
35
|
const seekHandler = (e) => {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
seek_from: Number.parseFloat(timeDifferencePosition.toFixed(3)),
|
|
33
|
-
stream_position: Number.parseFloat(timeDifferenceTarget.toFixed(3))
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
else if (e.type === 'seek') {
|
|
37
|
-
data = {
|
|
38
|
-
seek_from: e.position,
|
|
39
|
-
stream_position: e.seekTarget
|
|
40
|
-
};
|
|
41
|
-
}
|
|
36
|
+
data = {
|
|
37
|
+
seek_from: e.position,
|
|
38
|
+
stream_position: e.seekTarget
|
|
39
|
+
};
|
|
42
40
|
logEvent({ playerContext, event: 'seek', data });
|
|
43
41
|
};
|
|
44
42
|
const handleSourceLoaded = (e) => {
|
|
@@ -48,6 +46,19 @@ export function bindPlayerEvents(playerContext) {
|
|
|
48
46
|
logEvent({ playerContext, event: 'stop', data });
|
|
49
47
|
}
|
|
50
48
|
};
|
|
49
|
+
const handlePlaybackFinished = (e) => {
|
|
50
|
+
timeDifference(e.time);
|
|
51
|
+
logEvent({ playerContext, event: 'complete', data });
|
|
52
|
+
logEvent({ playerContext, event: 'stop', data });
|
|
53
|
+
isNewSource = true;
|
|
54
|
+
};
|
|
55
|
+
const readyHandler = (e) => {
|
|
56
|
+
timeDifference(e.time);
|
|
57
|
+
if (isLiveStream) {
|
|
58
|
+
data = { stream_position: 0 };
|
|
59
|
+
}
|
|
60
|
+
logEvent({ playerContext, event: 'load_complete', data });
|
|
61
|
+
};
|
|
51
62
|
const handlePlay = (e) => {
|
|
52
63
|
timeDifference(e.time);
|
|
53
64
|
if (!isNewSource && e.issuer !== 'ui-seek') {
|
|
@@ -62,7 +73,7 @@ export function bindPlayerEvents(playerContext) {
|
|
|
62
73
|
};
|
|
63
74
|
const handleTime = (e) => {
|
|
64
75
|
timeDifference(e.time);
|
|
65
|
-
if (isNewSource && !
|
|
76
|
+
if (isNewSource && !adBreakActive) {
|
|
66
77
|
logEvent({ playerContext, event: 'start', data });
|
|
67
78
|
isNewSource = false;
|
|
68
79
|
}
|
|
@@ -84,27 +95,31 @@ export function bindPlayerEvents(playerContext) {
|
|
|
84
95
|
timeDifference(e.time);
|
|
85
96
|
logEvent({ playerContext, event: 'stop', data });
|
|
86
97
|
};
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
98
|
+
const clearAllEvents = () => {
|
|
99
|
+
for (const [key, value] of logEventHandlers) {
|
|
100
|
+
player.off(key, value);
|
|
101
|
+
}
|
|
102
|
+
window.removeEventListener('beforeunload', logEventHandlers.get('stopBeforeUnload'));
|
|
103
|
+
logEventHandlers.clear();
|
|
104
|
+
};
|
|
105
|
+
clearAllEvents();
|
|
92
106
|
const playerEvents = [
|
|
93
|
-
{ event: PlayerEvent.Ready,
|
|
107
|
+
{ event: PlayerEvent.Ready, handler: readyHandler },
|
|
94
108
|
{ event: PlayerEvent.Paused, handler: pausedHandler },
|
|
95
109
|
{ event: PlayerEvent.Play, handler: handlePlay },
|
|
96
110
|
{ event: PlayerEvent.SourceLoaded, handler: handleSourceLoaded },
|
|
97
111
|
{ event: PlayerEvent.StallStarted, name: 'buffering' },
|
|
98
112
|
{ event: PlayerEvent.StallEnded, name: 'buffering_complete' },
|
|
99
|
-
{ event: PlayerEvent.PlaybackFinished,
|
|
113
|
+
{ event: PlayerEvent.PlaybackFinished, handler: handlePlaybackFinished },
|
|
100
114
|
{ event: PlayerEvent.SourceUnloaded, name: 'stop' },
|
|
101
115
|
{ event: PlayerEvent.Seek, handler: seekHandler },
|
|
102
|
-
{ event: PlayerEvent.TimeShift, handler:
|
|
116
|
+
{ event: PlayerEvent.TimeShift, handler: timeShiftHandler },
|
|
103
117
|
{ event: PlayerEvent.TimeChanged, handler: handleTime },
|
|
104
|
-
{ event: PlayerEvent.ViewModeChanged, handler: handleViewModeChange }
|
|
118
|
+
{ event: PlayerEvent.ViewModeChanged, handler: handleViewModeChange },
|
|
119
|
+
{ event: PlayerEvent.Destroy, handler: clearAllEvents }
|
|
105
120
|
];
|
|
106
121
|
for (const { event, name, handler } of playerEvents) {
|
|
107
|
-
const effectiveName = name
|
|
122
|
+
const effectiveName = name ?? 'unnamed_event';
|
|
108
123
|
const eventHandler = handler || logEventHandler(effectiveName);
|
|
109
124
|
logEventHandlers.set(event, eventHandler);
|
|
110
125
|
player.on(event, eventHandler);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PlayerEvent, ViewMode } from 'bitmovin-player';
|
|
1
|
+
import { PlayerEvent, ViewMode } from 'bitmovin-player/modules/bitmovinplayer-core';
|
|
2
2
|
import { bindPlayerEvents } from './eventBinding';
|
|
3
3
|
import { logEvent } from './eventLogging';
|
|
4
4
|
import { createPlayerContextMock } from '../../../tests/mocks/playerContextMock';
|
|
@@ -86,4 +86,60 @@ describe('bindPlayerEvents', () => {
|
|
|
86
86
|
});
|
|
87
87
|
}
|
|
88
88
|
});
|
|
89
|
+
it('should handle playback finished correctly', () => {
|
|
90
|
+
bindPlayerEvents(playerContextMock);
|
|
91
|
+
const playbackFinishedHandler = mockPlayer.on.mock.calls.find(([event]) => event === PlayerEvent.PlaybackFinished)?.[1];
|
|
92
|
+
if (playbackFinishedHandler && typeof playbackFinishedHandler === 'function') {
|
|
93
|
+
playbackFinishedHandler({ time: 789 });
|
|
94
|
+
expect(logEvent).toHaveBeenCalledWith({
|
|
95
|
+
playerContext: playerContextMock,
|
|
96
|
+
event: 'complete',
|
|
97
|
+
data: expect.objectContaining({ stream_position: expect.any(Number) })
|
|
98
|
+
});
|
|
99
|
+
expect(logEvent).toHaveBeenCalledWith({
|
|
100
|
+
playerContext: playerContextMock,
|
|
101
|
+
event: 'stop',
|
|
102
|
+
data: expect.objectContaining({ stream_position: expect.any(Number) })
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
it('should handle TimeShift events correctly', () => {
|
|
107
|
+
mockPlayer.getCurrentTime = jest.fn().mockReturnValue(1000);
|
|
108
|
+
bindPlayerEvents(playerContextMock);
|
|
109
|
+
const timeShiftHandler = mockPlayer.on.mock.calls.find(([event]) => event === PlayerEvent.TimeShift)?.[1];
|
|
110
|
+
if (timeShiftHandler && typeof timeShiftHandler === 'function') {
|
|
111
|
+
timeShiftHandler({
|
|
112
|
+
target: -10
|
|
113
|
+
});
|
|
114
|
+
expect(logEvent).toHaveBeenCalledWith({
|
|
115
|
+
playerContext: playerContextMock,
|
|
116
|
+
event: 'seek',
|
|
117
|
+
data: {
|
|
118
|
+
seek_from: 0,
|
|
119
|
+
stream_position: -10
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
it('should clean up event listeners on destroy', () => {
|
|
125
|
+
bindPlayerEvents(playerContextMock);
|
|
126
|
+
const destroyHandler = mockPlayer.on.mock.calls.find(([event]) => event === PlayerEvent.Destroy)?.[1];
|
|
127
|
+
if (destroyHandler && typeof destroyHandler === 'function') {
|
|
128
|
+
destroyHandler({});
|
|
129
|
+
expect(mockPlayer.off).toHaveBeenCalled();
|
|
130
|
+
expect(mockPlayer.off).toHaveBeenCalledWith(PlayerEvent.Ready, expect.any(Function));
|
|
131
|
+
expect(mockPlayer.off).toHaveBeenCalledWith(PlayerEvent.Paused, expect.any(Function));
|
|
132
|
+
expect(mockPlayer.off).toHaveBeenCalledWith(PlayerEvent.Play, expect.any(Function));
|
|
133
|
+
expect(mockPlayer.off).toHaveBeenCalledWith(PlayerEvent.SourceLoaded, expect.any(Function));
|
|
134
|
+
expect(mockPlayer.off).toHaveBeenCalledWith(PlayerEvent.StallStarted, expect.any(Function));
|
|
135
|
+
expect(mockPlayer.off).toHaveBeenCalledWith(PlayerEvent.StallEnded, expect.any(Function));
|
|
136
|
+
expect(mockPlayer.off).toHaveBeenCalledWith(PlayerEvent.PlaybackFinished, expect.any(Function));
|
|
137
|
+
expect(mockPlayer.off).toHaveBeenCalledWith(PlayerEvent.SourceUnloaded, expect.any(Function));
|
|
138
|
+
expect(mockPlayer.off).toHaveBeenCalledWith(PlayerEvent.Seek, expect.any(Function));
|
|
139
|
+
expect(mockPlayer.off).toHaveBeenCalledWith(PlayerEvent.TimeShift, expect.any(Function));
|
|
140
|
+
expect(mockPlayer.off).toHaveBeenCalledWith(PlayerEvent.TimeChanged, expect.any(Function));
|
|
141
|
+
expect(mockPlayer.off).toHaveBeenCalledWith(PlayerEvent.ViewModeChanged, expect.any(Function));
|
|
142
|
+
expect(mockPlayer.off).toHaveBeenCalledWith(PlayerEvent.Destroy, expect.any(Function));
|
|
143
|
+
}
|
|
144
|
+
});
|
|
89
145
|
});
|
|
@@ -6,7 +6,7 @@ import { logEvent } from './eventLogging';
|
|
|
6
6
|
export const startPlayerTracker = function ({ playerContext, source, duration }) {
|
|
7
7
|
const { npoPlayer } = playerContext;
|
|
8
8
|
const { player, sourceConfig, streamObject } = npoPlayer;
|
|
9
|
-
const playerDuration = duration
|
|
9
|
+
const playerDuration = duration ?? player?.getDuration() ?? undefined;
|
|
10
10
|
if (!source) {
|
|
11
11
|
throw new Error('Could not initialize streamTracker, no source specified.');
|
|
12
12
|
}
|
|
@@ -6,9 +6,15 @@ export function addUivisiblityHandlers(playerContext) {
|
|
|
6
6
|
if (variant === NpoPlayerUIVariants.DEFAULT) {
|
|
7
7
|
uiManager.activeUi.onControlsHide.subscribe(() => {
|
|
8
8
|
playerContext.npoPlayer.logEmitter.emit('logControlsVisibilityChange', false);
|
|
9
|
+
if (playerContext.npoPlayer.chapterHandler) {
|
|
10
|
+
playerContext.npoPlayer.chapterHandler.setControlsVisibility(false);
|
|
11
|
+
}
|
|
9
12
|
});
|
|
10
13
|
uiManager.activeUi.onControlsShow.subscribe(() => {
|
|
11
14
|
playerContext.npoPlayer.logEmitter.emit('logControlsVisibilityChange', true);
|
|
15
|
+
if (playerContext.npoPlayer.chapterHandler) {
|
|
16
|
+
playerContext.npoPlayer.chapterHandler.setControlsVisibility(true);
|
|
17
|
+
}
|
|
12
18
|
});
|
|
13
19
|
uiManager.activeUi.getUI().showUi();
|
|
14
20
|
}
|
|
@@ -1,15 +1,6 @@
|
|
|
1
1
|
import { handleVerticalVideoSettings } from './handleVerticalVideoSettings';
|
|
2
2
|
import { NpoPlayerEvent } from '../../types/events';
|
|
3
3
|
import { createMockNpoPlayer, createPlayerContextMock } from '../../../tests/mocks/playerContextMock';
|
|
4
|
-
jest.mock('bitmovin-player', () => ({
|
|
5
|
-
PlayerEvent: {
|
|
6
|
-
Ready: 'ready',
|
|
7
|
-
SourceLoaded: 'sourceLoaded',
|
|
8
|
-
SourceUnloaded: 'sourceUnloaded',
|
|
9
|
-
SubtitleDisable: 'subtitleDisable',
|
|
10
|
-
SubtitleEnable: 'subtitleEnable'
|
|
11
|
-
}
|
|
12
|
-
}));
|
|
13
4
|
describe('handleVerticalVideoSettings', () => {
|
|
14
5
|
let playerContextMock;
|
|
15
6
|
let mockAddEventListener;
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import { PlayerAPI } from 'bitmovin-player';
|
|
1
|
+
import { PlayerAPI } from 'bitmovin-player/modules/bitmovinplayer-core';
|
|
2
2
|
import { UIManager } from 'bitmovin-player-ui';
|
|
3
3
|
import { TimeLineMarker } from 'types/interfaces';
|
|
4
|
-
export declare function updateLiveMarkers(timeLineMarkers
|
|
4
|
+
export declare function updateLiveMarkers({ timeLineMarkers, player, uiManager, autoFillTimeLineMarkerDuration }: {
|
|
5
|
+
timeLineMarkers: TimeLineMarker[];
|
|
6
|
+
player: PlayerAPI;
|
|
7
|
+
uiManager: UIManager;
|
|
8
|
+
autoFillTimeLineMarkerDuration: boolean;
|
|
9
|
+
}): void;
|
|
@@ -1,2 +1,7 @@
|
|
|
1
|
-
import { PlayerAPI, SourceConfig } from 'bitmovin-player';
|
|
2
|
-
|
|
1
|
+
import { PlayerAPI, SourceConfig } from 'bitmovin-player/modules/bitmovinplayer-core';
|
|
2
|
+
import { StreamObject } from 'types/interfaces';
|
|
3
|
+
export declare function setupMediaSessionActionHandlers({ player, sourceConfig, streamObject }: {
|
|
4
|
+
player: PlayerAPI;
|
|
5
|
+
sourceConfig: SourceConfig;
|
|
6
|
+
streamObject: StreamObject;
|
|
7
|
+
}): void;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { type PlayerConfig } from 'bitmovin-player';
|
|
1
|
+
import { type PlayerConfig } from 'bitmovin-player/modules/bitmovinplayer-core';
|
|
2
2
|
import NpoPlayer from 'npoplayer';
|
|
3
3
|
export declare function processPlayerConfig(npoPlayer: NpoPlayer, playerConfig: PlayerConfig): PlayerConfig;
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import { StreamObject, StreamOptions } from 'types/interfaces';
|
|
2
|
-
import { SourceConfig } from 'bitmovin-player';
|
|
2
|
+
import { SourceConfig } from 'bitmovin-player/modules/bitmovinplayer-core';
|
|
3
3
|
import { NpoPlayerServices } from '../../../services/services';
|
|
4
4
|
import { NPOTag } from '@npotag/tag';
|
|
5
5
|
export declare const getSubtitleLabels: (data: any) => string;
|
|
6
|
-
export declare function processSourceConfig(npoPlayerServices
|
|
6
|
+
export declare function processSourceConfig({ npoPlayerServices, source, _sourceConfig, _streamObject, drm, streamOptions, version, npoTagInstance }: {
|
|
7
|
+
npoPlayerServices: NpoPlayerServices;
|
|
8
|
+
source: string;
|
|
9
|
+
_sourceConfig: SourceConfig;
|
|
10
|
+
_streamObject: StreamObject;
|
|
11
|
+
drm: string | undefined;
|
|
12
|
+
streamOptions: StreamOptions;
|
|
13
|
+
version: string;
|
|
14
|
+
npoTagInstance: NPOTag | undefined;
|
|
15
|
+
}): Promise<SourceConfig>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { PlayerAPI } from 'bitmovin-player';
|
|
1
|
+
import { PlayerAPI } from 'bitmovin-player/modules/bitmovinplayer-core';
|
|
2
2
|
export declare function removeReplayClass(player: PlayerAPI | undefined): void;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export declare const convertBase64ToObject: (value: string) => Record<string, any>;
|
|
2
2
|
export declare const convertJwtToBase64: (jwt: string) => string;
|
|
3
3
|
export declare function isJWTToken(token: string): boolean;
|
|
4
|
+
export declare function getJwtIat(jwt: string): number;
|
|
5
|
+
export declare function isJwtFresh(jwt: string, maxAgeSeconds?: number): boolean;
|
package/lib/src/npoplayer.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { NpoPlayerServices } from './services/services';
|
|
2
2
|
import { type StreamTracker, type NPOTag, type PageTracker } from '@npotag/tag';
|
|
3
3
|
import { type InitialisationProps } from '@npotag/tag/dist/types/src/npoTag';
|
|
4
|
-
import { type PlayerAPI, type PlayerConfig, type SourceConfig } from 'bitmovin-player';
|
|
4
|
+
import { type PlayerAPI, type PlayerConfig, type SourceConfig } from 'bitmovin-player/modules/bitmovinplayer-core';
|
|
5
5
|
import { UIManager } from 'bitmovin-player-ui';
|
|
6
6
|
import { LogEmitter } from './types/classes';
|
|
7
7
|
import { type DRMProfile, type ApiPayload, type NPOTagObject, type StreamObject, type StreamOptions, type UIComponents, type TimeLineMarker, type PlayerContext, type EventListeners, NpoPlayerUIVariants } from './types/interfaces';
|
|
8
|
+
import { ChapterHandler } from './services/chapterHandlers/chapterHandler';
|
|
8
9
|
export { type PlayerConfig, type InitialisationProps, type NPOTagObject, type StreamOptions, NpoPlayerUIVariants };
|
|
9
10
|
export default class NpoPlayer {
|
|
10
11
|
playerConfig: PlayerConfig | undefined;
|
|
@@ -32,14 +33,14 @@ export default class NpoPlayer {
|
|
|
32
33
|
playerContext: PlayerContext | undefined;
|
|
33
34
|
npoPlayerServices: NpoPlayerServices;
|
|
34
35
|
eventListeners: EventListeners | undefined;
|
|
35
|
-
|
|
36
|
+
chapterHandler: ChapterHandler | undefined;
|
|
36
37
|
constructor(container: HTMLElement | {
|
|
37
38
|
container: HTMLElement;
|
|
38
39
|
playerConfig: PlayerConfig;
|
|
39
|
-
npoTag?: InitialisationProps
|
|
40
|
-
npoTagInstance?: NPOTag
|
|
40
|
+
npoTag?: InitialisationProps;
|
|
41
|
+
npoTagInstance?: NPOTag;
|
|
41
42
|
variant?: NpoPlayerUIVariants;
|
|
42
|
-
npoTagPageTracker?: PageTracker
|
|
43
|
+
npoTagPageTracker?: PageTracker;
|
|
43
44
|
}, playerConfig?: PlayerConfig | undefined, npoTag?: InitialisationProps | undefined, npoTagInstance?: NPOTag | undefined, variant?: NpoPlayerUIVariants, npoTagPageTracker?: PageTracker | undefined);
|
|
44
45
|
keydownHandler: (e: KeyboardEvent) => void;
|
|
45
46
|
initPlayer(_container: HTMLElement, playerConfig: PlayerConfig): void;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Chapter, PlayerContext } from '../../types/interfaces';
|
|
2
|
+
export declare const defaultSkippableChapterTypes: string[];
|
|
3
|
+
export interface ChapterHandlerOptions {
|
|
4
|
+
chapters: Chapter[];
|
|
5
|
+
showSkipButtons?: boolean;
|
|
6
|
+
skippableTypes?: string[];
|
|
7
|
+
}
|
|
8
|
+
export declare class ChapterHandler {
|
|
9
|
+
private readonly playerContext;
|
|
10
|
+
private readonly defaultSkippableTypes;
|
|
11
|
+
private readonly options;
|
|
12
|
+
private lastShownFrom?;
|
|
13
|
+
private hideTimeout?;
|
|
14
|
+
private controlsVisible;
|
|
15
|
+
private currentChapter?;
|
|
16
|
+
private isForceShowing;
|
|
17
|
+
private isPaused;
|
|
18
|
+
private pausedTimeRemaining?;
|
|
19
|
+
constructor(playerContext: PlayerContext, options: ChapterHandlerOptions);
|
|
20
|
+
getCurrentChapter(currentTimeMs: number): Chapter | undefined;
|
|
21
|
+
isChapterSkippable(chapter: Chapter): boolean;
|
|
22
|
+
handleTimeChange(): void;
|
|
23
|
+
reset(): void;
|
|
24
|
+
handlePause(): void;
|
|
25
|
+
handlePlay(): void;
|
|
26
|
+
setControlsVisibility(visible: boolean): void;
|
|
27
|
+
private setupSkipButtonHandler;
|
|
28
|
+
private skipCurrentChapter;
|
|
29
|
+
private updateSkipButtonVisibility;
|
|
30
|
+
private startFadeOut;
|
|
31
|
+
private forceShowButton;
|
|
32
|
+
private getCurrentControlsVisibility;
|
|
33
|
+
private startHideTimeout;
|
|
34
|
+
private clearHideTimeout;
|
|
35
|
+
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
import { PlayerContext } from '../../types/interfaces';
|
|
2
|
-
export declare function handlePlayerError(playerContext
|
|
1
|
+
import { LogErrorParams, PlayerContext } from '../../types/interfaces';
|
|
2
|
+
export declare function handlePlayerError({ playerContext, status, context }: LogErrorParams): Promise<void>;
|
|
3
|
+
export declare function generateErrorMessage(status: number, shouldRetry: boolean): string;
|
|
4
|
+
export declare function setupRetryHandler(playerContext: PlayerContext, errorContainerClass: string): void;
|
|
3
5
|
export declare function setErrorBackground(playerContext: PlayerContext): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PlayerContext } from '../../types/interfaces';
|
|
2
|
+
export declare const SHOW_NICAM_AFTER_UI_HIDE_DURATION = 5000;
|
|
2
3
|
export declare function processNicam(playerContext: PlayerContext, nicamElement: HTMLElement | undefined): void;
|
|
3
4
|
export declare function addNicamIcon(character: string, nicamElement: Element): void;
|
|
4
5
|
export declare function showNicamAfterUiDelay(playerContext: PlayerContext): void;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PlayerAPI, PlayerConfig, SourceConfig, TimeMode, VideoQuality, ViewMode } from 'bitmovin-player/modules/bitmovinplayer-core';
|
|
2
|
+
import { AdBreak, AdConfig } from 'bitmovin-player/modules/bitmovinplayer-advertising-core';
|
|
3
|
+
import { SubtitleTrack } from 'bitmovin-player/modules/bitmovinplayer-subtitles';
|
|
2
4
|
import { UIManager } from 'bitmovin-player-ui';
|
|
3
5
|
import { NpoPlayerUIVariants, PlayerContext, Technology } from 'types/interfaces';
|
|
4
6
|
import { NpoPlayerEventCallback, NpoPlayerEvent } from '../../types/events';
|
|
@@ -40,8 +42,12 @@ export declare class NpoPlayerAPI {
|
|
|
40
42
|
getDuration(): number;
|
|
41
43
|
getTimeShift(): number;
|
|
42
44
|
scheduleAds(adConfig: AdConfig): Promise<AdBreak[]>;
|
|
43
|
-
handleErrorRetry(playerContext: PlayerContext): void
|
|
45
|
+
handleErrorRetry(playerContext: PlayerContext): Promise<void>;
|
|
44
46
|
getActiveAdBreak(): AdBreak | null;
|
|
45
47
|
getConfig(mergedConfig?: boolean): PlayerConfig;
|
|
46
48
|
createUIManager(playerContext: PlayerContext, variant: NpoPlayerUIVariants): void | UIManager;
|
|
49
|
+
getAvailableVideoQualities(): VideoQuality[];
|
|
50
|
+
listSubtitles(): SubtitleTrack[];
|
|
51
|
+
setPlaybackSpeed(speed: number): void;
|
|
52
|
+
setVideoQuality(VideoQualityId: string): void;
|
|
47
53
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const playerModules: any[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ApiPayload, Fragment, PlayerContext, Profile, Segment, TimeLineMarker, LocalStorageData, LocalStorageValues, StreamObject, PlayerTrackerParams, LogEventParams } from '../types/interfaces';
|
|
1
|
+
import { ApiPayload, Fragment, PlayerContext, Profile, Segment, TimeLineMarker, LocalStorageData, LocalStorageValues, StreamObject, PlayerTrackerParams, LogEventParams, LogErrorParams } from '../types/interfaces';
|
|
2
2
|
import { AVType } from '@npotag/tag/dist/types/src/streamTracker';
|
|
3
3
|
export declare class NpoPlayerServices {
|
|
4
4
|
getAVType(avType: string): AVType;
|
|
@@ -21,10 +21,13 @@ export declare class NpoPlayerServices {
|
|
|
21
21
|
addUivisiblityHandlers(playerContext: PlayerContext): void;
|
|
22
22
|
removeUivisiblityHandlers(playerContext: PlayerContext): void;
|
|
23
23
|
handleStreamOptions(playerContext: PlayerContext): void;
|
|
24
|
-
handleError(playerContext:
|
|
24
|
+
handleError({ playerContext, status: input, context: context }: LogErrorParams): Promise<void>;
|
|
25
25
|
fetchStream(playerContext: PlayerContext, payload: ApiPayload): Promise<StreamObject>;
|
|
26
26
|
startPlayerTracker({ playerContext, source, duration }: PlayerTrackerParams): void;
|
|
27
27
|
initPlayerTracker(playerContext: PlayerContext): void;
|
|
28
28
|
logEvent({ playerContext, event, data }: LogEventParams): void;
|
|
29
29
|
removeEventListeners(playerContext: PlayerContext): void;
|
|
30
|
+
isSegmentInBounds(playerContext: PlayerContext): boolean;
|
|
31
|
+
addDataInInfoPanel(playerContext: PlayerContext): void;
|
|
32
|
+
clearInfoPanel(playerContext: PlayerContext): void;
|
|
30
33
|
}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import { type ErrorMessageOverlay, type Label, ControlBar, SettingsPanelItem, Button, SeekBar, CastToggleButton, SettingsPanel, SettingsToggleButton } from 'bitmovin-player-ui';
|
|
1
|
+
import { type ErrorMessageOverlay, type Label, ControlBar, SettingsPanelItem, Button, SeekBar, CastToggleButton, SettingsPanel, SettingsToggleButton, Container, ContainerConfig, ToggleButton, ToggleButtonConfig } from 'bitmovin-player-ui';
|
|
2
2
|
import { type NPOTag, type PageTracker } from '@npotag/tag';
|
|
3
3
|
import { ButtonConfig } from 'bitmovin-player-ui/dist/js/framework/components/button';
|
|
4
4
|
import NpoPlayer from '../npoplayer';
|
|
5
5
|
import { NpoPlayerAPI } from '../services/npoPlayerAPI/npoPlayerAPI';
|
|
6
6
|
import { NpoPlayerEventCallback } from './events';
|
|
7
|
-
import {
|
|
8
|
-
|
|
7
|
+
import { ProgressiveSourceConfig, SourceConfigOptions, SourceLabelingStreamTypeConfig, ThumbnailTrack } from 'bitmovin-player/modules/bitmovinplayer-core';
|
|
8
|
+
import type { AnalyticsConfig } from 'bitmovin-player/types/analytics/ConfigAPI';
|
|
9
|
+
import type { GoogleCastRemoteControlConfig } from 'bitmovin-player/types/remotecontrol/ConfigAPI';
|
|
10
|
+
import DRMConfig from 'bitmovin-player/modules/bitmovinplayer-drm';
|
|
11
|
+
import { SubtitleTrack } from 'bitmovin-player/modules/bitmovinplayer-subtitles';
|
|
12
|
+
export { Technology } from 'bitmovin-player/modules/bitmovinplayer-core';
|
|
9
13
|
export interface Profile {
|
|
10
14
|
profileName: string;
|
|
11
15
|
drm: string | undefined;
|
|
@@ -82,6 +86,7 @@ interface StreamObject_Assets {
|
|
|
82
86
|
preroll?: string;
|
|
83
87
|
}
|
|
84
88
|
export interface StreamObject_Metadata {
|
|
89
|
+
chapters?: Chapter[];
|
|
85
90
|
broadcaster?: string;
|
|
86
91
|
description: string;
|
|
87
92
|
duration?: string;
|
|
@@ -108,11 +113,10 @@ export interface SourceConfig {
|
|
|
108
113
|
smooth?: string;
|
|
109
114
|
whep?: string;
|
|
110
115
|
poster?: string;
|
|
111
|
-
drm?: DRMConfig;
|
|
116
|
+
drm?: typeof DRMConfig;
|
|
112
117
|
options?: SourceConfigOptions;
|
|
113
118
|
subtitleTracks?: SubtitleTrack[];
|
|
114
119
|
thumbnailTrack?: ThumbnailTrack;
|
|
115
|
-
vr?: VRConfig;
|
|
116
120
|
title?: string;
|
|
117
121
|
description?: string;
|
|
118
122
|
labeling?: SourceLabelingStreamTypeConfig;
|
|
@@ -138,8 +142,10 @@ export interface StreamOptions {
|
|
|
138
142
|
customFallbackPoster?: string;
|
|
139
143
|
autoFillTimeLineMarkerDuration?: boolean;
|
|
140
144
|
autoplay?: boolean;
|
|
145
|
+
skippableChapters?: string[];
|
|
141
146
|
npoTagPageTracker?: PageTracker;
|
|
142
147
|
retryCallback?: () => void;
|
|
148
|
+
infoPanelHTML?: string;
|
|
143
149
|
}
|
|
144
150
|
export interface UIComponents {
|
|
145
151
|
errorMessageOverlay?: ErrorMessageOverlay;
|
|
@@ -150,6 +156,7 @@ export interface UIComponents {
|
|
|
150
156
|
subtitlesButton?: SettingsPanelItem | undefined;
|
|
151
157
|
qualityButton?: SettingsPanelItem | undefined;
|
|
152
158
|
watchFromStartButton?: Button<ButtonConfig> | undefined;
|
|
159
|
+
skipChapterButton?: Button<ButtonConfig> | undefined;
|
|
153
160
|
controlBar?: ControlBar | undefined;
|
|
154
161
|
adbutton?: Button<ButtonConfig> | undefined;
|
|
155
162
|
adlabel?: Label<{
|
|
@@ -161,44 +168,8 @@ export interface UIComponents {
|
|
|
161
168
|
settingsPanels?: SettingsPanel[] | undefined;
|
|
162
169
|
settingsPanel?: SettingsPanel | undefined;
|
|
163
170
|
settingsToggleButton?: SettingsToggleButton | undefined;
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
defaultActionRequired?: boolean;
|
|
167
|
-
isChecked?: boolean;
|
|
168
|
-
playNext?: {
|
|
169
|
-
remainingCountDownDuration: number;
|
|
170
|
-
};
|
|
171
|
-
error?: ErrorEvent;
|
|
172
|
-
errorMessage?: {
|
|
173
|
-
input: string;
|
|
174
|
-
status: number;
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
export declare enum CustomMessages {
|
|
178
|
-
CLICK_CAST = "castButtonClick",
|
|
179
|
-
CLICK_GO_BACK_TO_LIVE = "clickGoBackToLive",
|
|
180
|
-
CLICK_WATCH_FROM_START = "clickWatchFromStart",
|
|
181
|
-
DO_ERROR = "doError",
|
|
182
|
-
ERROR_TRIGGERED = "errorTriggerd",
|
|
183
|
-
JAVASCRIPT_READY = "javascriptReady",
|
|
184
|
-
PLAY_NEXT_CANCEL_CLICK = "playNextCancelClick",
|
|
185
|
-
PLAY_NEXT_COUNTDOWN_CANCELED = "playNextCountdownCanceled",
|
|
186
|
-
PLAY_NEXT_COUNTDOWN_FINISHED = "playNextCountdownFinished",
|
|
187
|
-
PLAY_NEXT_COUNTDOWN_PROGRESS = "playNextCountdownProgress",
|
|
188
|
-
PLAY_NEXT_OVERLAY_HIDDEN = "playNextOverlayHidden",
|
|
189
|
-
PLAY_NEXT_OVERLAY_HIDE = "playNextOverlayHide",
|
|
190
|
-
PLAY_NEXT_OVERLAY_SHOW = "playNextOverlayShow",
|
|
191
|
-
PLAY_NEXT_OVERLAY_SHOWN = "playNextOverlayShown",
|
|
192
|
-
PLAY_NEXT_PROCEED_CLICK = "playNextProceedClick",
|
|
193
|
-
SET_STREAM_LINK = "setStreamLink",
|
|
194
|
-
SET_WEB_DATA = "setWebData",
|
|
195
|
-
TOGGLE_AIRPLAY = "toggleAirplay",
|
|
196
|
-
TOGGLE_FULLSCREEN = "toggleFullScreen",
|
|
197
|
-
TOGGLE_FULLSCREEN_UI = "toggleFullscreenUI",
|
|
198
|
-
TOGGLE_MUTE = "toggleMute",
|
|
199
|
-
TOGGLE_PIP = "togglePiP",
|
|
200
|
-
TOGGLE_PLAY_PAUSE = "togglePlayPause",
|
|
201
|
-
TOGGLE_SETTINGS_PANEL = "toggleSettingsPanel"
|
|
171
|
+
infoPanel?: Container<ContainerConfig>;
|
|
172
|
+
infoPanelToggleButtons?: ToggleButton<ToggleButtonConfig>[];
|
|
202
173
|
}
|
|
203
174
|
export declare enum NpoPlayerUIVariants {
|
|
204
175
|
DEFAULT = "default",
|
|
@@ -242,3 +213,28 @@ export interface LogEventParams {
|
|
|
242
213
|
event: string;
|
|
243
214
|
data?: any;
|
|
244
215
|
}
|
|
216
|
+
export interface LogErrorContext {
|
|
217
|
+
programAvailableFrom?: string;
|
|
218
|
+
programAvailableUntil?: string;
|
|
219
|
+
}
|
|
220
|
+
export interface LogErrorParams {
|
|
221
|
+
playerContext: PlayerContext;
|
|
222
|
+
status: number;
|
|
223
|
+
body?: string;
|
|
224
|
+
context?: LogErrorContext;
|
|
225
|
+
}
|
|
226
|
+
export interface CreateButtonConfig {
|
|
227
|
+
text: string;
|
|
228
|
+
onClick: () => void;
|
|
229
|
+
ariaLabel?: string;
|
|
230
|
+
cssClass?: string;
|
|
231
|
+
hidden?: boolean;
|
|
232
|
+
acceptsTouchWithUiHidden?: boolean;
|
|
233
|
+
}
|
|
234
|
+
export interface Chapter {
|
|
235
|
+
description: string;
|
|
236
|
+
from: number;
|
|
237
|
+
until: number;
|
|
238
|
+
title: string;
|
|
239
|
+
type: string;
|
|
240
|
+
}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
import { Button } from 'bitmovin-player-ui';
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
text: string;
|
|
6
|
-
hidden: true;
|
|
7
|
-
}>;
|
|
2
|
+
import { ButtonConfig } from 'bitmovin-player-ui/dist/js/framework/components/button';
|
|
3
|
+
import { PlayerContext } from '../../types/interfaces';
|
|
4
|
+
export declare function createAdButton(playerContext: PlayerContext): Button<ButtonConfig>;
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
import { Label } from 'bitmovin-player-ui';
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
cssClass: string;
|
|
6
|
-
hidden: true;
|
|
7
|
-
}>;
|
|
2
|
+
import { LabelConfig } from 'bitmovin-player-ui/dist/js/framework/components/label';
|
|
3
|
+
import { PlayerContext } from '../../types/interfaces';
|
|
4
|
+
export declare function createAdLabel(playerContext: PlayerContext): Label<LabelConfig>;
|