@npo/player 1.9.0
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/CHANGELOG.md +3 -0
- package/LICENSE +15 -0
- package/README.md +281 -0
- package/lib/js/ads/ster.d.ts +4 -0
- package/lib/js/ads/ster.js +159 -0
- package/lib/js/ads/ster.js.map +1 -0
- package/lib/js/ads/ster.test.d.ts +1 -0
- package/lib/js/ads/ster.test.js +91 -0
- package/lib/js/ads/ster.test.js.map +1 -0
- package/lib/js/api/getstreamobject.d.ts +3 -0
- package/lib/js/api/getstreamobject.js +19 -0
- package/lib/js/api/getstreamobject.js.map +1 -0
- package/lib/js/cdnproviders.d.ts +1 -0
- package/lib/js/cdnproviders.js +13 -0
- package/lib/js/cdnproviders.js.map +1 -0
- package/lib/js/checks/safari.d.ts +1 -0
- package/lib/js/checks/safari.js +10 -0
- package/lib/js/checks/safari.js.map +1 -0
- package/lib/js/checks/safari.test.d.ts +1 -0
- package/lib/js/checks/safari.test.js +21 -0
- package/lib/js/checks/safari.test.js.map +1 -0
- package/lib/js/drm/verifydrm.d.ts +4 -0
- package/lib/js/drm/verifydrm.js +38 -0
- package/lib/js/drm/verifydrm.js.map +1 -0
- package/lib/js/drm/verifydrm.test.d.ts +1 -0
- package/lib/js/drm/verifydrm.test.js +18 -0
- package/lib/js/drm/verifydrm.test.js.map +1 -0
- package/lib/js/fragments/setfragments.d.ts +3 -0
- package/lib/js/fragments/setfragments.js +68 -0
- package/lib/js/fragments/setfragments.js.map +1 -0
- package/lib/js/playeractions/customerrors.test.d.ts +1 -0
- package/lib/js/playeractions/customerrors.test.js +52 -0
- package/lib/js/playeractions/customerrors.test.js.map +1 -0
- package/lib/js/playeractions/handlers/customerrors.d.ts +50 -0
- package/lib/js/playeractions/handlers/customerrors.js +154 -0
- package/lib/js/playeractions/handlers/customerrors.js.map +1 -0
- package/lib/js/playeractions/handlers/error.d.ts +3 -0
- package/lib/js/playeractions/handlers/error.js +23 -0
- package/lib/js/playeractions/handlers/error.js.map +1 -0
- package/lib/js/playeractions/handlers/error.test.d.ts +1 -0
- package/lib/js/playeractions/handlers/error.test.js +45 -0
- package/lib/js/playeractions/handlers/error.test.js.map +1 -0
- package/lib/js/playeractions/handlers/handleoffsets.d.ts +6 -0
- package/lib/js/playeractions/handlers/handleoffsets.js +71 -0
- package/lib/js/playeractions/handlers/handleoffsets.js.map +1 -0
- package/lib/js/playeractions/handlers/handleoffsets.test.d.ts +1 -0
- package/lib/js/playeractions/handlers/handleoffsets.test.js +50 -0
- package/lib/js/playeractions/handlers/handleoffsets.test.js.map +1 -0
- package/lib/js/playeractions/handlers/resolvekeypress.d.ts +3 -0
- package/lib/js/playeractions/handlers/resolvekeypress.js +55 -0
- package/lib/js/playeractions/handlers/resolvekeypress.js.map +1 -0
- package/lib/js/playeractions/playeractions.d.ts +3 -0
- package/lib/js/playeractions/playeractions.js +4 -0
- package/lib/js/playeractions/playeractions.js.map +1 -0
- package/lib/js/tracking/handlers/eventbinding.d.ts +10 -0
- package/lib/js/tracking/handlers/eventbinding.js +86 -0
- package/lib/js/tracking/handlers/eventbinding.js.map +1 -0
- package/lib/js/tracking/handlers/eventlogging.d.ts +11 -0
- package/lib/js/tracking/handlers/eventlogging.js +42 -0
- package/lib/js/tracking/handlers/eventlogging.js.map +1 -0
- package/lib/js/tracking/handlers/playertrackerinit.d.ts +13 -0
- package/lib/js/tracking/handlers/playertrackerinit.js +29 -0
- package/lib/js/tracking/handlers/playertrackerinit.js.map +1 -0
- package/lib/js/tracking/handlers/playertrackerstart.d.ts +8 -0
- package/lib/js/tracking/handlers/playertrackerstart.js +29 -0
- package/lib/js/tracking/handlers/playertrackerstart.js.map +1 -0
- package/lib/js/tracking/playertracker.d.ts +4 -0
- package/lib/js/tracking/playertracker.js +10 -0
- package/lib/js/tracking/playertracker.js.map +1 -0
- package/lib/js/ui/components/adbutton.d.ts +7 -0
- package/lib/js/ui/components/adbutton.js +21 -0
- package/lib/js/ui/components/adbutton.js.map +1 -0
- package/lib/js/ui/components/adlabel.d.ts +7 -0
- package/lib/js/ui/components/adlabel.js +17 -0
- package/lib/js/ui/components/adlabel.js.map +1 -0
- package/lib/js/ui/components/buttons.d.ts +30 -0
- package/lib/js/ui/components/buttons.js +89 -0
- package/lib/js/ui/components/buttons.js.map +1 -0
- package/lib/js/ui/components/controlbar.d.ts +3 -0
- package/lib/js/ui/components/controlbar.js +47 -0
- package/lib/js/ui/components/controlbar.js.map +1 -0
- package/lib/js/ui/components/ctabar.d.ts +9 -0
- package/lib/js/ui/components/ctabar.js +41 -0
- package/lib/js/ui/components/ctabar.js.map +1 -0
- package/lib/js/ui/components/nativemobile/buttons.d.ts +13 -0
- package/lib/js/ui/components/nativemobile/buttons.js +43 -0
- package/lib/js/ui/components/nativemobile/buttons.js.map +1 -0
- package/lib/js/ui/components/nativemobile/controlbar.d.ts +2 -0
- package/lib/js/ui/components/nativemobile/controlbar.js +23 -0
- package/lib/js/ui/components/nativemobile/controlbar.js.map +1 -0
- package/lib/js/ui/components/nativemobile/ctabar.d.ts +10 -0
- package/lib/js/ui/components/nativemobile/ctabar.js +12 -0
- package/lib/js/ui/components/nativemobile/ctabar.js.map +1 -0
- package/lib/js/ui/components/nativemobile/playnext.d.ts +10 -0
- package/lib/js/ui/components/nativemobile/playnext.js +16 -0
- package/lib/js/ui/components/nativemobile/playnext.js.map +1 -0
- package/lib/js/ui/components/nativemobile/topbar.d.ts +3 -0
- package/lib/js/ui/components/nativemobile/topbar.js +21 -0
- package/lib/js/ui/components/nativemobile/topbar.js.map +1 -0
- package/lib/js/ui/components/playnext.d.ts +11 -0
- package/lib/js/ui/components/playnext.js +11 -0
- package/lib/js/ui/components/playnext.js.map +1 -0
- package/lib/js/ui/components/settingspanel.d.ts +4 -0
- package/lib/js/ui/components/settingspanel.js +130 -0
- package/lib/js/ui/components/settingspanel.js.map +1 -0
- package/lib/js/ui/components/shared/playnextscreen.d.ts +2 -0
- package/lib/js/ui/components/shared/playnextscreen.js +18 -0
- package/lib/js/ui/components/shared/playnextscreen.js.map +1 -0
- package/lib/js/ui/components/titlebar.d.ts +3 -0
- package/lib/js/ui/components/titlebar.js +9 -0
- package/lib/js/ui/components/titlebar.js.map +1 -0
- package/lib/js/ui/components/topbar.d.ts +2 -0
- package/lib/js/ui/components/topbar.js +19 -0
- package/lib/js/ui/components/topbar.js.map +1 -0
- package/lib/js/ui/handlers/listboxhandlers.d.ts +5 -0
- package/lib/js/ui/handlers/listboxhandlers.js +41 -0
- package/lib/js/ui/handlers/listboxhandlers.js.map +1 -0
- package/lib/js/ui/handlers/nicamhandler.d.ts +2 -0
- package/lib/js/ui/handlers/nicamhandler.js +32 -0
- package/lib/js/ui/handlers/nicamhandler.js.map +1 -0
- package/lib/js/ui/handlers/nicamhandler.test.d.ts +1 -0
- package/lib/js/ui/handlers/nicamhandler.test.js +34 -0
- package/lib/js/ui/handlers/nicamhandler.test.js.map +1 -0
- package/lib/js/ui/handlers/playnexthandlers.d.ts +0 -0
- package/lib/js/ui/handlers/playnexthandlers.js +2 -0
- package/lib/js/ui/handlers/playnexthandlers.js.map +1 -0
- package/lib/js/ui/handlers/timecontrolhandlers.d.ts +3 -0
- package/lib/js/ui/handlers/timecontrolhandlers.js +23 -0
- package/lib/js/ui/handlers/timecontrolhandlers.js.map +1 -0
- package/lib/js/ui/nativemobileui.d.ts +6 -0
- package/lib/js/ui/nativemobileui.js +49 -0
- package/lib/js/ui/nativemobileui.js.map +1 -0
- package/lib/js/ui/uicontainer.d.ts +3 -0
- package/lib/js/ui/uicontainer.js +61 -0
- package/lib/js/ui/uicontainer.js.map +1 -0
- package/lib/js/utilities/localizationconfig.d.ts +6 -0
- package/lib/js/utilities/localizationconfig.js +8 -0
- package/lib/js/utilities/localizationconfig.js.map +1 -0
- package/lib/js/utilities/printversion.d.ts +1 -0
- package/lib/js/utilities/printversion.js +28 -0
- package/lib/js/utilities/printversion.js.map +1 -0
- package/lib/js/utilities/utilities.d.ts +60 -0
- package/lib/js/utilities/utilities.js +110 -0
- package/lib/js/utilities/utilities.js.map +1 -0
- package/lib/lang/nl.json +72 -0
- package/lib/npoplayer.d.ts +45 -0
- package/lib/npoplayer.js +518 -0
- package/lib/npoplayer.js.map +1 -0
- package/lib/npoplayer.test.d.ts +1 -0
- package/lib/npoplayer.test.js +12 -0
- package/lib/npoplayer.test.js.map +1 -0
- package/lib/package.json +88 -0
- package/lib/src/js/ads/ster.d.ts +4 -0
- package/lib/src/js/ads/ster.test.d.ts +1 -0
- package/lib/src/js/api/getstreamobject.d.ts +3 -0
- package/lib/src/js/cdnproviders.d.ts +1 -0
- package/lib/src/js/checks/safari.d.ts +1 -0
- package/lib/src/js/checks/safari.test.d.ts +1 -0
- package/lib/src/js/drm/verifydrm.d.ts +4 -0
- package/lib/src/js/drm/verifydrm.test.d.ts +1 -0
- package/lib/src/js/fragments/setfragments.d.ts +3 -0
- package/lib/src/js/playeractions/customerrors.test.d.ts +1 -0
- package/lib/src/js/playeractions/handlers/customerrors.d.ts +50 -0
- package/lib/src/js/playeractions/handlers/error.d.ts +3 -0
- package/lib/src/js/playeractions/handlers/error.test.d.ts +1 -0
- package/lib/src/js/playeractions/handlers/handleoffsets.d.ts +6 -0
- package/lib/src/js/playeractions/handlers/handleoffsets.test.d.ts +1 -0
- package/lib/src/js/playeractions/handlers/resolvekeypress.d.ts +3 -0
- package/lib/src/js/playeractions/playeractions.d.ts +3 -0
- package/lib/src/js/tracking/handlers/eventbinding.d.ts +10 -0
- package/lib/src/js/tracking/handlers/eventlogging.d.ts +11 -0
- package/lib/src/js/tracking/handlers/playertrackerinit.d.ts +13 -0
- package/lib/src/js/tracking/handlers/playertrackerstart.d.ts +8 -0
- package/lib/src/js/tracking/playertracker.d.ts +4 -0
- package/lib/src/js/ui/components/adbutton.d.ts +7 -0
- package/lib/src/js/ui/components/adlabel.d.ts +7 -0
- package/lib/src/js/ui/components/buttons.d.ts +30 -0
- package/lib/src/js/ui/components/controlbar.d.ts +3 -0
- package/lib/src/js/ui/components/ctabar.d.ts +9 -0
- package/lib/src/js/ui/components/nativemobile/buttons.d.ts +13 -0
- package/lib/src/js/ui/components/nativemobile/controlbar.d.ts +2 -0
- package/lib/src/js/ui/components/nativemobile/ctabar.d.ts +10 -0
- package/lib/src/js/ui/components/nativemobile/playnext.d.ts +10 -0
- package/lib/src/js/ui/components/nativemobile/topbar.d.ts +3 -0
- package/lib/src/js/ui/components/playnext.d.ts +11 -0
- package/lib/src/js/ui/components/settingspanel.d.ts +4 -0
- package/lib/src/js/ui/components/shared/playnextscreen.d.ts +2 -0
- package/lib/src/js/ui/components/titlebar.d.ts +3 -0
- package/lib/src/js/ui/components/topbar.d.ts +2 -0
- package/lib/src/js/ui/handlers/listboxhandlers.d.ts +5 -0
- package/lib/src/js/ui/handlers/nicamhandler.d.ts +2 -0
- package/lib/src/js/ui/handlers/nicamhandler.test.d.ts +1 -0
- package/lib/src/js/ui/handlers/playnexthandlers.d.ts +0 -0
- package/lib/src/js/ui/handlers/timecontrolhandlers.d.ts +3 -0
- package/lib/src/js/ui/nativemobileui.d.ts +6 -0
- package/lib/src/js/ui/uicontainer.d.ts +3 -0
- package/lib/src/js/utilities/localizationconfig.d.ts +6 -0
- package/lib/src/js/utilities/printversion.d.ts +1 -0
- package/lib/src/js/utilities/utilities.d.ts +60 -0
- package/lib/src/npoplayer.d.ts +45 -0
- package/lib/src/npoplayer.test.d.ts +1 -0
- package/lib/src/types/classes.d.ts +4 -0
- package/lib/src/types/interfaces.d.ts +105 -0
- package/lib/types/classes.d.ts +4 -0
- package/lib/types/classes.js +4 -0
- package/lib/types/classes.js.map +1 -0
- package/lib/types/interfaces.d.ts +105 -0
- package/lib/types/interfaces.js +6 -0
- package/lib/types/interfaces.js.map +1 -0
- package/package.json +88 -0
- package/src/scss/components/_advert.scss +74 -0
- package/src/scss/components/_buffering.scss +6 -0
- package/src/scss/components/_container.scss +8 -0
- package/src/scss/components/_controlbars.scss +36 -0
- package/src/scss/components/_error.scss +26 -0
- package/src/scss/components/_fonts.scss +19 -0
- package/src/scss/components/_icons.scss +241 -0
- package/src/scss/components/_nicam.scss +61 -0
- package/src/scss/components/_playnext.scss +52 -0
- package/src/scss/components/_seekbar.scss +116 -0
- package/src/scss/components/_settingspanel.scss +196 -0
- package/src/scss/components/_subtitles.scss +32 -0
- package/src/scss/components/_textbuttons.scss +42 -0
- package/src/scss/components/_volumeslider.scss +23 -0
- package/src/scss/npoplayer.css +1238 -0
- package/src/scss/npoplayer.scss +37 -0
- package/src/scss/variants/_player-base.scss +64 -0
- package/src/scss/variants/_player-large.scss +56 -0
- package/src/scss/variants/_player-medium.scss +57 -0
- package/src/scss/variants/_player-small.scss +234 -0
- package/src/scss/vars/_colors.scss +24 -0
- package/src/scss/vars/_fonts.scss +20 -0
- package/src/scss/vars/_icons.scss +37 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { handleStartOffset, shiftToProgramStart } from "./handleoffsets";
|
|
2
|
+
const isLive = () => true;
|
|
3
|
+
const onReady = jest.fn();
|
|
4
|
+
const timeShift = jest.fn();
|
|
5
|
+
const offset = 10;
|
|
6
|
+
const timestamp = 10;
|
|
7
|
+
const player = {
|
|
8
|
+
isLive,
|
|
9
|
+
on: onReady,
|
|
10
|
+
timeShift,
|
|
11
|
+
};
|
|
12
|
+
describe("Test offset handling", () => {
|
|
13
|
+
afterEach(() => {
|
|
14
|
+
jest.resetAllMocks();
|
|
15
|
+
});
|
|
16
|
+
it("should not seek when player is live", () => {
|
|
17
|
+
handleStartOffset(player, offset);
|
|
18
|
+
expect(onReady).not.toBeCalled();
|
|
19
|
+
});
|
|
20
|
+
it("should not seek when offset is undefined", () => {
|
|
21
|
+
handleStartOffset({ ...player, isLive: () => false });
|
|
22
|
+
expect(onReady).not.toBeCalled();
|
|
23
|
+
});
|
|
24
|
+
it("should seek when player is not live and offset is defined", () => {
|
|
25
|
+
handleStartOffset({ ...player, isLive: () => false }, offset);
|
|
26
|
+
expect(onReady).toBeCalled();
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe("Test programStart shift", () => {
|
|
30
|
+
afterEach(() => {
|
|
31
|
+
jest.resetAllMocks();
|
|
32
|
+
});
|
|
33
|
+
it("should not call timeshift when player is null", () => {
|
|
34
|
+
shiftToProgramStart(null, timestamp);
|
|
35
|
+
expect(timeShift).not.toBeCalled();
|
|
36
|
+
});
|
|
37
|
+
it("should not call timeshift when timestamp is undefined", () => {
|
|
38
|
+
shiftToProgramStart(player);
|
|
39
|
+
expect(timeShift).not.toBeCalled();
|
|
40
|
+
});
|
|
41
|
+
it("should not call timeshift when player is not live", () => {
|
|
42
|
+
shiftToProgramStart({ ...player, isLive: () => false }, timestamp);
|
|
43
|
+
expect(timeShift).not.toBeCalled();
|
|
44
|
+
});
|
|
45
|
+
it("should not call timeshift when player is live and timestamp is set", () => {
|
|
46
|
+
shiftToProgramStart(player, timestamp);
|
|
47
|
+
expect(timeShift).toBeCalled();
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=handleoffsets.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleoffsets.test.js","sourceRoot":"","sources":["../../../../../src/js/playeractions/handlers/handleoffsets.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEzE,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;AAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AAE5B,MAAM,MAAM,GAAG,EAAE,CAAC;AAClB,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB,MAAM,MAAM,GAAG;IACX,MAAM;IACN,EAAE,EAAE,OAAO;IACX,SAAS;CACY,CAAC;AAE1B,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IAClC,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC3C,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAElC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAChD,iBAAiB,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;QAEtD,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACjE,iBAAiB,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;QAE9D,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACrC,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACrD,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAErC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC7D,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAE5B,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QACzD,mBAAmB,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;QAEnE,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC1E,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAEvC,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { ViewMode } from "bitmovin-player";
|
|
2
|
+
/*
|
|
3
|
+
* This function is called when a key is pressed and handles the logic for the keypress.
|
|
4
|
+
* @function resolveKeyPress
|
|
5
|
+
* @param {PlayerAPI} player - The Bitmovin player instance
|
|
6
|
+
* @param {NpoPlayer} npoplayer - The NpoPlayer instance
|
|
7
|
+
* @param {KeyboardEvent} e - The keyboard event
|
|
8
|
+
* @returns {void}
|
|
9
|
+
*/
|
|
10
|
+
export function resolveKeyPress(player, npoplayer, e) {
|
|
11
|
+
switch (e.code) {
|
|
12
|
+
case 'KeyM': {
|
|
13
|
+
const isMuted = player.isMuted() ?? false;
|
|
14
|
+
isMuted ? player.unmute() : player.mute();
|
|
15
|
+
break;
|
|
16
|
+
}
|
|
17
|
+
case 'KeyF': {
|
|
18
|
+
if (player.getViewMode() !== ViewMode.Fullscreen) {
|
|
19
|
+
player.setViewMode(ViewMode.Fullscreen);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
player.setViewMode(ViewMode.Inline);
|
|
23
|
+
}
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
case 'Space': {
|
|
27
|
+
const isPaused = player.isPaused() ?? false;
|
|
28
|
+
isPaused ? player.play() : player.pause();
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
case 'ArrowUp': {
|
|
32
|
+
const isMuted = player.isMuted() ?? false;
|
|
33
|
+
if (isMuted)
|
|
34
|
+
player.unmute();
|
|
35
|
+
npoplayer.increaseVolume();
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
case 'ArrowDown': {
|
|
39
|
+
const isMuted = player.isMuted() ?? false;
|
|
40
|
+
if (isMuted)
|
|
41
|
+
player.unmute();
|
|
42
|
+
npoplayer.decreaseVolume();
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
case 'ArrowLeft': {
|
|
46
|
+
npoplayer.goBackwards(10);
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
case 'ArrowRight': {
|
|
50
|
+
npoplayer.goForward(10);
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=resolvekeypress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolvekeypress.js","sourceRoot":"","sources":["../../../../../src/js/playeractions/handlers/resolvekeypress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3D;;;;;;;EAOE;AAEF,MAAM,UAAU,eAAe,CAAC,MAAiB,EAAE,SAAoB,EAAE,CAAgB;IACrF,QAAO,CAAC,CAAC,IAAI,EAAE;QACX,KAAK,MAAM,CAAC,CAAC;YACT,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC;YAC1C,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC1C,MAAM;SACT;QACD,KAAK,MAAM,CAAC,CAAC;YACT,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,UAAU,EAAE;gBAC9C,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;aAC3C;iBAAM;gBACH,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;aACvC;YACD,MAAM;SACT;QACD,KAAK,OAAO,CAAC,CAAC;YACV,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,KAAK,CAAC;YAC5C,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1C,MAAM;SACT;QACD,KAAK,SAAS,CAAC,CAAC;YACZ,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC;YAC1C,IAAI,OAAO;gBAAE,MAAM,CAAC,MAAM,EAAE,CAAC;YAC7B,SAAS,CAAC,cAAc,EAAE,CAAC;YAC3B,MAAM;SACT;QACD,KAAK,WAAW,CAAC,CAAC;YACd,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC;YAC1C,IAAI,OAAO;gBAAE,MAAM,CAAC,MAAM,EAAE,CAAC;YAC7B,SAAS,CAAC,cAAc,EAAE,CAAC;YAC3B,MAAM;SACT;QACD,KAAK,WAAW,CAAC,CAAC;YACd,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC1B,MAAM;SACT;QACD,KAAK,YAAY,CAAC,CAAC;YACf,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACxB,MAAM;SACT;KACJ;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playeractions.js","sourceRoot":"","sources":["../../../../src/js/playeractions/playeractions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACzG,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type PlayerAPI } from 'bitmovin-player';
|
|
2
|
+
import type NpoPlayer from '../../../npoplayer';
|
|
3
|
+
/**
|
|
4
|
+
* @function bindPlayerEvents
|
|
5
|
+
* @description Binds the player events to the event logging function.
|
|
6
|
+
* @param {NpoPlayer} npoplayer - The NpoPlayer instance.
|
|
7
|
+
* @param {PlayerAPI} player - The Bitmovin player instance.
|
|
8
|
+
* @returns {void}
|
|
9
|
+
*/
|
|
10
|
+
export declare function bindPlayerEvents(npoplayer: NpoPlayer, player: PlayerAPI): void;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { PlayerEvent, ViewMode } from 'bitmovin-player';
|
|
2
|
+
import { logEvent } from './eventlogging';
|
|
3
|
+
/**
|
|
4
|
+
* @function bindPlayerEvents
|
|
5
|
+
* @description Binds the player events to the event logging function.
|
|
6
|
+
* @param {NpoPlayer} npoplayer - The NpoPlayer instance.
|
|
7
|
+
* @param {PlayerAPI} player - The Bitmovin player instance.
|
|
8
|
+
* @returns {void}
|
|
9
|
+
*/
|
|
10
|
+
export function bindPlayerEvents(npoplayer, player) {
|
|
11
|
+
if (player == null)
|
|
12
|
+
return;
|
|
13
|
+
let isNewSource = false;
|
|
14
|
+
const playerEvents = [
|
|
15
|
+
{ event: PlayerEvent.Paused, name: 'pause' },
|
|
16
|
+
{ event: PlayerEvent.SourceLoaded, name: 'load_complete' },
|
|
17
|
+
{ event: PlayerEvent.Ready, name: 'load_complete' },
|
|
18
|
+
{ event: PlayerEvent.StallStarted, name: 'buffering' },
|
|
19
|
+
{ event: PlayerEvent.StallEnded, name: 'buffering_complete' },
|
|
20
|
+
{ event: PlayerEvent.PlaybackFinished, name: 'complete' },
|
|
21
|
+
{ event: PlayerEvent.TimeChanged, name: 'time' },
|
|
22
|
+
{
|
|
23
|
+
event: PlayerEvent.ViewModeChanged,
|
|
24
|
+
name: player?.getViewMode() === ViewMode.Fullscreen
|
|
25
|
+
? 'fullscreen'
|
|
26
|
+
: 'windowed'
|
|
27
|
+
},
|
|
28
|
+
{ event: PlayerEvent.SourceUnloaded, name: 'stop' },
|
|
29
|
+
{ event: PlayerEvent.Destroy, name: 'stop' },
|
|
30
|
+
];
|
|
31
|
+
const logEventHandler = (npoplayer, eventName) => {
|
|
32
|
+
return () => {
|
|
33
|
+
logEvent(npoplayer, eventName);
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
//Handle seek events, this requires a custom handler because we need to send the seek_from and seek_position parameters
|
|
37
|
+
const seekHandler = (e) => {
|
|
38
|
+
const data = {
|
|
39
|
+
seek_from: e.position,
|
|
40
|
+
stream_position: e.seekTarget
|
|
41
|
+
};
|
|
42
|
+
logEvent(npoplayer, 'seek', data);
|
|
43
|
+
};
|
|
44
|
+
// Because we only want to load 'start' when a new source is starting playback, we need to keep track of that
|
|
45
|
+
const handleSourceLoaded = () => {
|
|
46
|
+
isNewSource = true;
|
|
47
|
+
};
|
|
48
|
+
//fire resume event when the player resumes playback and the source is not new (unpause)
|
|
49
|
+
const handlePlay = () => {
|
|
50
|
+
if (!isNewSource) {
|
|
51
|
+
logEvent(npoplayer, 'resume');
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
//fire start event when the player starts playing new content, set isNewSource to false
|
|
55
|
+
const handlePlaying = () => {
|
|
56
|
+
if (isNewSource) {
|
|
57
|
+
logEvent(npoplayer, 'start');
|
|
58
|
+
isNewSource = false;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
//sends a stop event when the user leaves the page
|
|
62
|
+
function stopBeforeUnload() {
|
|
63
|
+
logEvent(npoplayer, 'stop');
|
|
64
|
+
}
|
|
65
|
+
//remove old listeners (if they exist) before setting new ones
|
|
66
|
+
player.off(PlayerEvent.SourceLoaded, handleSourceLoaded);
|
|
67
|
+
player.off(PlayerEvent.Seek, seekHandler);
|
|
68
|
+
player.off(PlayerEvent.Play, handlePlay);
|
|
69
|
+
player.off(PlayerEvent.Playing, handlePlaying);
|
|
70
|
+
playerEvents.forEach(({ event, name }) => {
|
|
71
|
+
const handler = logEventHandler(npoplayer, name);
|
|
72
|
+
player.off(event, handler);
|
|
73
|
+
});
|
|
74
|
+
window.removeEventListener('beforeunload', stopBeforeUnload);
|
|
75
|
+
//bind new listeners
|
|
76
|
+
player.on(PlayerEvent.SourceLoaded, handleSourceLoaded);
|
|
77
|
+
player.on(PlayerEvent.Seek, seekHandler);
|
|
78
|
+
player.on(PlayerEvent.Play, handlePlay);
|
|
79
|
+
player.on(PlayerEvent.Playing, handlePlaying);
|
|
80
|
+
playerEvents.forEach(({ event, name }) => {
|
|
81
|
+
const handler = logEventHandler(npoplayer, name);
|
|
82
|
+
player.on(event, handler);
|
|
83
|
+
});
|
|
84
|
+
window.addEventListener('beforeunload', stopBeforeUnload);
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=eventbinding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventbinding.js","sourceRoot":"","sources":["../../../../../src/js/tracking/handlers/eventbinding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @function logEvent
|
|
3
|
+
* @description Logs an event to the NPO Tag StreamTracker
|
|
4
|
+
* @param {Object} npoplayer - The NpoPlayer instance
|
|
5
|
+
* @param {string} event - The event name
|
|
6
|
+
* @param {Object} data - The event data, this is optional and currently only used for seek events,
|
|
7
|
+
* because the tag SDK does not export SeekEventProps as a type the type for data is set to any.
|
|
8
|
+
* @returns {void}
|
|
9
|
+
*/
|
|
10
|
+
import NpoPlayer from "../../../npoplayer";
|
|
11
|
+
export declare function logEvent(npoplayer: NpoPlayer, event: string, data?: any): void;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @function logEvent
|
|
3
|
+
* @description Logs an event to the NPO Tag StreamTracker
|
|
4
|
+
* @param {Object} npoplayer - The NpoPlayer instance
|
|
5
|
+
* @param {string} event - The event name
|
|
6
|
+
* @param {Object} data - The event data, this is optional and currently only used for seek events,
|
|
7
|
+
* because the tag SDK does not export SeekEventProps as a type the type for data is set to any.
|
|
8
|
+
* @returns {void}
|
|
9
|
+
*/
|
|
10
|
+
export function logEvent(npoplayer, event, data) {
|
|
11
|
+
if (!npoplayer.player || !npoplayer.streamTracker)
|
|
12
|
+
return;
|
|
13
|
+
try {
|
|
14
|
+
npoplayer.player.getCurrentTime();
|
|
15
|
+
}
|
|
16
|
+
catch (e) {
|
|
17
|
+
console.log('Er gaat iets mis met de player API', e);
|
|
18
|
+
}
|
|
19
|
+
const streamOptions = { stream_position: npoplayer.player.getCurrentTime() };
|
|
20
|
+
const eventHandlers = {
|
|
21
|
+
start: npoplayer.streamTracker.start,
|
|
22
|
+
buffering: npoplayer.streamTracker.buffering,
|
|
23
|
+
buffering_complete: npoplayer.streamTracker.buffering_complete,
|
|
24
|
+
complete: npoplayer.streamTracker.complete,
|
|
25
|
+
fullscreen: npoplayer.streamTracker.fullscreen,
|
|
26
|
+
load: npoplayer.streamTracker.load,
|
|
27
|
+
load_complete: npoplayer.streamTracker.load_complete,
|
|
28
|
+
pause: npoplayer.streamTracker.pause,
|
|
29
|
+
resume: npoplayer.streamTracker.resume,
|
|
30
|
+
stop: npoplayer.streamTracker.stop,
|
|
31
|
+
windowed: npoplayer.streamTracker.windowed,
|
|
32
|
+
time: npoplayer.streamTracker.time,
|
|
33
|
+
// seek event including so properties
|
|
34
|
+
seek: () => {
|
|
35
|
+
npoplayer.streamTracker?.seek(data);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const streamTrackerHandler = eventHandlers[event];
|
|
39
|
+
npoplayer.logEmitter.emit('logEvent', event);
|
|
40
|
+
streamTrackerHandler(streamOptions);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=eventlogging.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventlogging.js","sourceRoot":"","sources":["../../../../../src/js/tracking/handlers/eventlogging.ts"],"names":[],"mappings":"AAAA;;;;;;;;EAQE;AAIF,MAAM,UAAU,QAAQ,CAAE,SAAoB,EAAE,KAAa,EAAE,IAAU;IACrE,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa;QAAE,OAAO;IAE1D,IAAI;QACA,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,CAAA;KACpC;IAAC,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,CAAC,CAAC,CAAA;KACvD;IACD,MAAM,aAAa,GAAG,EAAE,eAAe,EAAE,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,CAAA;IAE5E,MAAM,aAAa,GAAiD;QAChE,KAAK,EAAE,SAAS,CAAC,aAAa,CAAC,KAAK;QACpC,SAAS,EAAE,SAAS,CAAC,aAAa,CAAC,SAAS;QAC5C,kBAAkB,EAAE,SAAS,CAAC,aAAa,CAAC,kBAAkB;QAC9D,QAAQ,EAAE,SAAS,CAAC,aAAa,CAAC,QAAQ;QAC1C,UAAU,EAAE,SAAS,CAAC,aAAa,CAAC,UAAU;QAC9C,IAAI,EAAE,SAAS,CAAC,aAAa,CAAC,IAAI;QAClC,aAAa,EAAE,SAAS,CAAC,aAAa,CAAC,aAAa;QACpD,KAAK,EAAE,SAAS,CAAC,aAAa,CAAC,KAAK;QACpC,MAAM,EAAE,SAAS,CAAC,aAAa,CAAC,MAAM;QACtC,IAAI,EAAE,SAAS,CAAC,aAAa,CAAC,IAAI;QAClC,QAAQ,EAAE,SAAS,CAAC,aAAa,CAAC,QAAQ;QAC1C,IAAI,EAAE,SAAS,CAAC,aAAa,CAAC,IAAI;QAClC,qCAAqC;QACrC,IAAI,EAAE,GAAG,EAAE;YACP,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QACvC,CAAC;KACJ,CAAA;IAED,MAAM,oBAAoB,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;IACjD,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;IAC5C,oBAAoB,CAAC,aAAa,CAAC,CAAA;AACvC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type NPOTag } from '@npotag/tag';
|
|
2
|
+
import { type InitialisationProps } from '@npotag/tag/dist/types/src/npoTag';
|
|
3
|
+
import type NpoPlayer from '../../../npoplayer';
|
|
4
|
+
/**
|
|
5
|
+
* @function initPlayerTracker
|
|
6
|
+
* @description: This function initializes the NPO Tag instance and page tracker.
|
|
7
|
+
* The page tracker is a required prerequisite for the stream tracker to function.
|
|
8
|
+
* @param {NpoPlayer} npoplayer - The NpoPlayer instance.
|
|
9
|
+
* @param {InitialisationProps | null} _npotag - The NPO Tag instance.
|
|
10
|
+
* @param {NPOTag} _npotaginstance - The NPO Tag instance.
|
|
11
|
+
* @returns {void}
|
|
12
|
+
*/
|
|
13
|
+
export declare function initPlayerTracker(npoplayer: NpoPlayer, _npotag?: InitialisationProps | null, _npotaginstance?: NPOTag): void;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { newATInternetPlugin, newGovoltePlugin, newPageTracker, newTag } from '@npotag/tag';
|
|
2
|
+
const npoTagPlugins = [
|
|
3
|
+
newGovoltePlugin({ maxRetryCount: 5, delayBetweenRetriesInMs: 3000 }),
|
|
4
|
+
newATInternetPlugin()
|
|
5
|
+
];
|
|
6
|
+
/**
|
|
7
|
+
* @function initPlayerTracker
|
|
8
|
+
* @description: This function initializes the NPO Tag instance and page tracker.
|
|
9
|
+
* The page tracker is a required prerequisite for the stream tracker to function.
|
|
10
|
+
* @param {NpoPlayer} npoplayer - The NpoPlayer instance.
|
|
11
|
+
* @param {InitialisationProps | null} _npotag - The NPO Tag instance.
|
|
12
|
+
* @param {NPOTag} _npotaginstance - The NPO Tag instance.
|
|
13
|
+
* @returns {void}
|
|
14
|
+
*/
|
|
15
|
+
export function initPlayerTracker(npoplayer, _npotag, _npotaginstance) {
|
|
16
|
+
npoplayer.npoTag = {
|
|
17
|
+
npoTagInstance: undefined,
|
|
18
|
+
pageTracker: null,
|
|
19
|
+
heartbeatInterval: undefined
|
|
20
|
+
};
|
|
21
|
+
npoplayer.npoTag.npoTagInstance =
|
|
22
|
+
_npotag != null
|
|
23
|
+
? newTag(_npotag, npoTagPlugins)
|
|
24
|
+
: _npotaginstance;
|
|
25
|
+
if (npoplayer.npoTag.npoTagInstance != null) {
|
|
26
|
+
npoplayer.npoTag.pageTracker = newPageTracker(npoplayer.npoTag.npoTagInstance);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=playertrackerinit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playertrackerinit.js","sourceRoot":"","sources":["../../../../../src/js/tracking/handlers/playertrackerinit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAe,MAAM,EAAE,MAAM,aAAa,CAAA;AAIxG,MAAM,aAAa,GAAG;IAClB,gBAAgB,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAC;IACrE,mBAAmB,EAAE;CACxB,CAAA;AAED;;;;;;;;EAQE;AACF,MAAM,UAAU,iBAAiB,CAAE,SAAoB,EAAE,OAAoC,EAAE,eAAwB;IACnH,SAAS,CAAC,MAAM,GAAG;QACf,cAAc,EAAE,SAAS;QACzB,WAAW,EAAE,IAAI;QACjB,iBAAiB,EAAE,SAAS;KAC/B,CAAA;IACD,SAAS,CAAC,MAAM,CAAC,cAAc;QACvB,OAAO,IAAI,IAAI;YACX,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC;YAChC,CAAC,CAAC,eAAe,CAAA;IAC7B,IAAI,SAAS,CAAC,MAAM,CAAC,cAAc,IAAI,IAAI,EAAE;QACzC,SAAS,CAAC,MAAM,CAAC,WAAW,GAAG,cAAc,CACzC,SAAS,CAAC,MAAM,CAAC,cAAc,CAClC,CAAA;KACJ;AACL,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @function startPlayerTracker
|
|
3
|
+
* @description This function creates a new StreamTracker instance and binds the player events to it.
|
|
4
|
+
* @param {Object} playerInstance - The NpoPlayer instance
|
|
5
|
+
* @param {number} duration - The duration of the stream in seconds
|
|
6
|
+
* @returns {void}
|
|
7
|
+
*/
|
|
8
|
+
export declare function startPlayerTracker(playerInstance: any, duration: number, version: string): void;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { newStreamTracker } from '@npotag/tag';
|
|
2
|
+
import { bindPlayerEvents } from './eventbinding';
|
|
3
|
+
import { validatePrid } from '../../utilities/utilities';
|
|
4
|
+
/**
|
|
5
|
+
* @function startPlayerTracker
|
|
6
|
+
* @description This function creates a new StreamTracker instance and binds the player events to it.
|
|
7
|
+
* @param {Object} playerInstance - The NpoPlayer instance
|
|
8
|
+
* @param {number} duration - The duration of the stream in seconds
|
|
9
|
+
* @returns {void}
|
|
10
|
+
*/
|
|
11
|
+
export function startPlayerTracker(playerInstance, duration, version) {
|
|
12
|
+
if (playerInstance.npoTag?.pageTracker == null) {
|
|
13
|
+
console.error('No pageTracker available');
|
|
14
|
+
}
|
|
15
|
+
else if (playerInstance.streamTracker == null) {
|
|
16
|
+
const streamTrackerConfig = {
|
|
17
|
+
stream_length: duration,
|
|
18
|
+
stream_id: validatePrid(playerInstance.streamObject.metadata.prid),
|
|
19
|
+
player_id: 'npoplayer-web',
|
|
20
|
+
av_type: 'video',
|
|
21
|
+
player_version: version,
|
|
22
|
+
sko_player_version: '1.0.0'
|
|
23
|
+
};
|
|
24
|
+
const isLiveConfig = playerInstance.streamObject.stream.isLiveStream ? { isLive: true } : {};
|
|
25
|
+
playerInstance.streamTracker = newStreamTracker(playerInstance.npoTag.pageTracker, streamTrackerConfig, isLiveConfig);
|
|
26
|
+
bindPlayerEvents(playerInstance, playerInstance.player);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=playertrackerstart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playertrackerstart.js","sourceRoot":"","sources":["../../../../../src/js/tracking/handlers/playertrackerstart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAIxD;;;;;;EAME;AACF,MAAM,UAAU,kBAAkB,CAAE,cAAmB,EAAE,QAAgB,EAAE,OAAe;IACtF,IAAI,cAAc,CAAC,MAAM,EAAE,WAAW,IAAI,IAAI,EAAE;QAC5C,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;KAC5C;SAAM,IAAI,cAAc,CAAC,aAAa,IAAI,IAAI,EAAE;QAE7C,MAAM,mBAAmB,GAAG;YACxB,aAAa,EAAE,QAAQ;YACvB,SAAS,EAAE,YAAY,CAAC,cAAc,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;YAClE,SAAS,EAAE,eAAe;YAC1B,OAAO,EAAE,OAAiB;YAC1B,cAAc,EAAE,OAAO;YACvB,kBAAkB,EAAE,OAAO;SAC9B,CAAC;QACF,MAAM,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAE7F,cAAc,CAAC,aAAa,GAAG,gBAAgB,CAC3C,cAAc,CAAC,MAAM,CAAC,WAAW,EACjC,mBAAmB,EACnB,YAAY,CACf,CAAC;QAEF,gBAAgB,CAAC,cAAc,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;KAC1D;AACL,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This module exports the various handlers that are used to track player events.
|
|
3
|
+
* The playerTracker is based on the StreamTracker module that is part of NPO Tag by DIAZ.
|
|
4
|
+
* Read the full NPO Tag documentation here: https://npotag.npo-data.nl/
|
|
5
|
+
*/
|
|
6
|
+
export { initPlayerTracker } from './handlers/playertrackerinit';
|
|
7
|
+
export { startPlayerTracker } from './handlers/playertrackerstart';
|
|
8
|
+
export { bindPlayerEvents } from './handlers/eventbinding';
|
|
9
|
+
export { logEvent } from './handlers/eventlogging';
|
|
10
|
+
//# sourceMappingURL=playertracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playertracker.js","sourceRoot":"","sources":["../../../../src/js/tracking/playertracker.ts"],"names":[],"mappings":"AAAA;;;;EAIE;AAEF,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file contains the code for the 'Meer' button linking to the advertiser's website that appears when an ad is playing.
|
|
3
|
+
* The component is added to the uiComponents object of the player instance so it can be populated with the relevant ad URL.
|
|
4
|
+
*/
|
|
5
|
+
import { Button } from 'bitmovin-player-ui';
|
|
6
|
+
/*
|
|
7
|
+
* @function createAdButton
|
|
8
|
+
* @param {NpoPlayer} npoplayer - The player instance
|
|
9
|
+
* @returns {Button} - The ad button
|
|
10
|
+
*/
|
|
11
|
+
export function createAdButton(npoplayer) {
|
|
12
|
+
npoplayer.uiComponents.adbutton = undefined;
|
|
13
|
+
const adButton = new Button({
|
|
14
|
+
cssClass: 'ui-textbutton ui-sterbutton bmpui-ui-button',
|
|
15
|
+
text: 'Meer info',
|
|
16
|
+
hidden: true
|
|
17
|
+
});
|
|
18
|
+
npoplayer.uiComponents.adbutton = adButton;
|
|
19
|
+
return adButton;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=adbutton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adbutton.js","sourceRoot":"","sources":["../../../../../src/js/ui/components/adbutton.ts"],"names":[],"mappings":"AAAA;;;EAGE;AAEF,OAAO,EAAE,MAAM,EAAC,MAAM,oBAAoB,CAAA;AAG1C;;;;EAIE;AACF,MAAM,UAAU,cAAc,CAAE,SAAoB;IAChD,SAAS,CAAC,YAAY,CAAC,QAAQ,GAAG,SAAS,CAAA;IAC3C,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC;QACxB,QAAQ,EAAE,6CAA6C;QACvD,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,IAAI;KACf,CAAC,CAAA;IAEF,SAAS,CAAC,YAAY,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1C,OAAO,QAAQ,CAAA;AACnB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* adlabel.ts
|
|
3
|
+
* This file contains the code for the adlabel component used to display to the user how many ads will be played when an adBreak occurs.
|
|
4
|
+
*/
|
|
5
|
+
import { Label } from 'bitmovin-player-ui';
|
|
6
|
+
/*
|
|
7
|
+
* @function createAdLabel
|
|
8
|
+
* @param {NpoPlayer} npoplayer - The player instance
|
|
9
|
+
* @returns {Label} - The ad label
|
|
10
|
+
*/
|
|
11
|
+
export function createAdLabel(npoplayer) {
|
|
12
|
+
npoplayer.uiComponents.adlabel = undefined;
|
|
13
|
+
const adLabel = new Label({ text: '', cssClass: 'adLabel', hidden: true });
|
|
14
|
+
npoplayer.uiComponents.adlabel = adLabel;
|
|
15
|
+
return adLabel;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=adlabel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adlabel.js","sourceRoot":"","sources":["../../../../../src/js/ui/components/adlabel.ts"],"names":[],"mappings":"AAAA;;;EAGE;AAEF,OAAO,EAAE,KAAK,EAAC,MAAM,oBAAoB,CAAA;AAGzC;;;;EAIE;AACF,MAAM,UAAU,aAAa,CAAE,SAAoB;IAC/C,SAAS,CAAC,YAAY,CAAC,OAAO,GAAG,SAAS,CAAA;IAC1C,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1E,SAAS,CAAC,YAAY,CAAC,OAAO,GAAG,OAAO,CAAA;IACxC,OAAO,OAAO,CAAA;AAClB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type PlayerAPI } from 'bitmovin-player';
|
|
2
|
+
import { Button, ControlBar } from 'bitmovin-player-ui';
|
|
3
|
+
import type NpoPlayer from '../../../npoplayer';
|
|
4
|
+
export declare function createMiddleButtons(player: PlayerAPI | null): ControlBar;
|
|
5
|
+
export declare function createRewindButton(player: PlayerAPI | null): Button<{
|
|
6
|
+
cssClass: string;
|
|
7
|
+
}>;
|
|
8
|
+
export declare function createForwardButton(player: PlayerAPI | null): Button<{
|
|
9
|
+
cssClass: string;
|
|
10
|
+
}>;
|
|
11
|
+
export declare function createPlayNextButton(player: PlayerAPI | null, npoplayer: NpoPlayer): Button<{
|
|
12
|
+
cssClass: string;
|
|
13
|
+
text: string;
|
|
14
|
+
hidden: false;
|
|
15
|
+
}>;
|
|
16
|
+
export declare function createskipIntroButton(player: PlayerAPI | null): Button<{
|
|
17
|
+
cssClass: string;
|
|
18
|
+
text: string;
|
|
19
|
+
hidden: true;
|
|
20
|
+
}>;
|
|
21
|
+
export declare function createGoBackLiveButton(player: PlayerAPI | null): Button<{
|
|
22
|
+
cssClass: string;
|
|
23
|
+
text: string;
|
|
24
|
+
hidden: true;
|
|
25
|
+
}>;
|
|
26
|
+
export declare function createWatchFromStartButton(player: PlayerAPI | null, npoplayer: NpoPlayer): Button<{
|
|
27
|
+
cssClass: string;
|
|
28
|
+
text: string;
|
|
29
|
+
hidden: true;
|
|
30
|
+
}>;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { Button, PlaybackToggleButton, ControlBar } from 'bitmovin-player-ui';
|
|
2
|
+
import { rewind, forward } from '../handlers/timecontrolhandlers';
|
|
3
|
+
export function createMiddleButtons(player) {
|
|
4
|
+
const bigPlayToggleButton = new PlaybackToggleButton({
|
|
5
|
+
cssClass: 'ui-playbacktogglebutton'
|
|
6
|
+
});
|
|
7
|
+
const bigRewindButton = createRewindButton(player);
|
|
8
|
+
const bigForwardButton = createForwardButton(player);
|
|
9
|
+
return new ControlBar({
|
|
10
|
+
components: [bigRewindButton, bigPlayToggleButton, bigForwardButton],
|
|
11
|
+
cssClasses: ['controlbar-middle']
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
export function createRewindButton(player) {
|
|
15
|
+
const rewindButton = new Button({
|
|
16
|
+
cssClass: 'ui-rewindbutton bmpui-ui-button'
|
|
17
|
+
});
|
|
18
|
+
rewindButton.onClick.subscribe(() => {
|
|
19
|
+
rewind(player);
|
|
20
|
+
});
|
|
21
|
+
return rewindButton;
|
|
22
|
+
}
|
|
23
|
+
export function createForwardButton(player) {
|
|
24
|
+
const forwardButton = new Button({
|
|
25
|
+
cssClass: 'ui-forwardbutton bmpui-ui-button'
|
|
26
|
+
});
|
|
27
|
+
forwardButton.onClick.subscribe(() => {
|
|
28
|
+
forward(player);
|
|
29
|
+
});
|
|
30
|
+
return forwardButton;
|
|
31
|
+
}
|
|
32
|
+
export function createPlayNextButton(player, npoplayer) {
|
|
33
|
+
const playNextButton = new Button({
|
|
34
|
+
cssClass: 'ui-hugeplaynextbacktogglebutton ui-playNextButton bmpui-ui-button',
|
|
35
|
+
text: 'De volgende aflevering wordt zo afgespeeld...',
|
|
36
|
+
hidden: false
|
|
37
|
+
});
|
|
38
|
+
playNextButton.onClick.subscribe(() => {
|
|
39
|
+
if (player != null) {
|
|
40
|
+
npoplayer.doPlayNext();
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
return playNextButton;
|
|
44
|
+
}
|
|
45
|
+
export function createskipIntroButton(player) {
|
|
46
|
+
const skipIntroButton = new Button({
|
|
47
|
+
cssClass: 'ui-textbutton ui-skipintrobutton bmpui-ui-button bmpui-hidden',
|
|
48
|
+
text: 'Intro overslaan',
|
|
49
|
+
hidden: true
|
|
50
|
+
});
|
|
51
|
+
skipIntroButton.onClick.subscribe(() => {
|
|
52
|
+
if (player != null) {
|
|
53
|
+
// if (introDataAvailable) {
|
|
54
|
+
// TODO Check if metadata has intro data, this is currently not yet available in the API, so this button is merely scaffolding for now.
|
|
55
|
+
player.seek(96);
|
|
56
|
+
// }
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
return skipIntroButton;
|
|
60
|
+
}
|
|
61
|
+
export function createGoBackLiveButton(player) {
|
|
62
|
+
const goBackLiveButton = new Button({
|
|
63
|
+
cssClass: 'ui-textbutton ui-backtolivebutton bmpui-ui-button',
|
|
64
|
+
text: 'Terug naar live',
|
|
65
|
+
hidden: true
|
|
66
|
+
});
|
|
67
|
+
goBackLiveButton.onClick.subscribe(() => {
|
|
68
|
+
if (player != null && player.isLive()) {
|
|
69
|
+
player.timeShift(0);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
return goBackLiveButton;
|
|
73
|
+
}
|
|
74
|
+
export function createWatchFromStartButton(player, npoplayer) {
|
|
75
|
+
const watchFromStartButton = new Button({
|
|
76
|
+
cssClass: 'ui-textbutton ui-watchfromstartbutton bmpui-ui-button',
|
|
77
|
+
text: 'Kijk vanaf het begin',
|
|
78
|
+
hidden: true
|
|
79
|
+
});
|
|
80
|
+
watchFromStartButton.onClick.subscribe(() => {
|
|
81
|
+
if ((player?.isLive()) ?? false)
|
|
82
|
+
npoplayer.watchFromStart();
|
|
83
|
+
if (npoplayer.uiComponents.watchFromStartButton)
|
|
84
|
+
npoplayer.uiComponents.watchFromStartButton.hide();
|
|
85
|
+
});
|
|
86
|
+
npoplayer.uiComponents.watchFromStartButton = watchFromStartButton;
|
|
87
|
+
return watchFromStartButton;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=buttons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buttons.js","sourceRoot":"","sources":["../../../../../src/js/ui/components/buttons.ts"],"names":[],"mappings":"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"}
|