streamit-player 1.0.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 +35 -0
- package/LICENSE +203 -0
- package/README.md +552 -0
- package/dist/Player-BfmqCREY.cjs +11616 -0
- package/dist/Player-YpukGRGt.js +11617 -0
- package/dist/PlayerController-Bt7Po42U.cjs +14093 -0
- package/dist/PlayerController-CW0pxrIt.js +14072 -0
- package/dist/core/index.cjs +194 -0
- package/dist/core/index.js +194 -0
- package/dist/core/src/AdScheduler.d.ts +56 -0
- package/dist/core/src/AdScheduler.d.ts.map +1 -0
- package/dist/core/src/AdsController.d.ts +48 -0
- package/dist/core/src/AdsController.d.ts.map +1 -0
- package/dist/core/src/AdsManager.d.ts +181 -0
- package/dist/core/src/AdsManager.d.ts.map +1 -0
- package/dist/core/src/DrmManager.d.ts +162 -0
- package/dist/core/src/DrmManager.d.ts.map +1 -0
- package/dist/core/src/DrmValidator.d.ts +36 -0
- package/dist/core/src/DrmValidator.d.ts.map +1 -0
- package/dist/core/src/KeyboardManager.d.ts +73 -0
- package/dist/core/src/KeyboardManager.d.ts.map +1 -0
- package/dist/core/src/PictureInPictureManager.d.ts +47 -0
- package/dist/core/src/PictureInPictureManager.d.ts.map +1 -0
- package/dist/core/src/PlayerController.d.ts +231 -0
- package/dist/core/src/PlayerController.d.ts.map +1 -0
- package/dist/core/src/PlaylistManager.d.ts +63 -0
- package/dist/core/src/PlaylistManager.d.ts.map +1 -0
- package/dist/core/src/SourceManager.d.ts +142 -0
- package/dist/core/src/SourceManager.d.ts.map +1 -0
- package/dist/core/src/SubtitleManager.d.ts +77 -0
- package/dist/core/src/SubtitleManager.d.ts.map +1 -0
- package/dist/core/src/TimelineMath.d.ts +14 -0
- package/dist/core/src/TimelineMath.d.ts.map +1 -0
- package/dist/core/src/html-overlay/HtmlOverlayRenderer.d.ts +103 -0
- package/dist/core/src/html-overlay/HtmlOverlayRenderer.d.ts.map +1 -0
- package/dist/core/src/index.d.ts +21 -0
- package/dist/core/src/index.d.ts.map +1 -0
- package/dist/core/src/providers/ImaProvider.d.ts +135 -0
- package/dist/core/src/providers/ImaProvider.d.ts.map +1 -0
- package/dist/core/src/providers/ThumbnailProviders.d.ts +102 -0
- package/dist/core/src/providers/ThumbnailProviders.d.ts.map +1 -0
- package/dist/core/src/providers/VastProvider.d.ts +202 -0
- package/dist/core/src/providers/VastProvider.d.ts.map +1 -0
- package/dist/core/src/providers/VmapProvider.d.ts +98 -0
- package/dist/core/src/providers/VmapProvider.d.ts.map +1 -0
- package/dist/core/src/providers/fetchXmlWithPolicy.d.ts +9 -0
- package/dist/core/src/providers/fetchXmlWithPolicy.d.ts.map +1 -0
- package/dist/core/src/simid/SimidBridge.d.ts +44 -0
- package/dist/core/src/simid/SimidBridge.d.ts.map +1 -0
- package/dist/core/src/simid/SimidManager.d.ts +21 -0
- package/dist/core/src/simid/SimidManager.d.ts.map +1 -0
- package/dist/core/src/simid/SimidRuntime.d.ts +113 -0
- package/dist/core/src/simid/SimidRuntime.d.ts.map +1 -0
- package/dist/core/src/simid/SimidSession.d.ts +48 -0
- package/dist/core/src/simid/SimidSession.d.ts.map +1 -0
- package/dist/core/src/simid/types.d.ts +115 -0
- package/dist/core/src/simid/types.d.ts.map +1 -0
- package/dist/core/src/storage.d.ts +10 -0
- package/dist/core/src/storage.d.ts.map +1 -0
- package/dist/core/src/types.d.ts +1403 -0
- package/dist/core/src/types.d.ts.map +1 -0
- package/dist/core/src/utils.d.ts +34 -0
- package/dist/core/src/utils.d.ts.map +1 -0
- package/dist/core/src/vendorLoaders.d.ts +16 -0
- package/dist/core/src/vendorLoaders.d.ts.map +1 -0
- package/dist/index.cjs +55 -0
- package/dist/index.js +55 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/streamit-player.esm.js +26226 -0
- package/dist/streamit-player.esm.min.js +18830 -0
- package/dist/streamit-player.iife.js +26229 -0
- package/dist/streamit-player.iife.min.js +4750 -0
- package/dist/web-components/index.cjs +15 -0
- package/dist/web-components/index.js +15 -0
- package/dist/web-components/src/ChaptersButton.d.ts +27 -0
- package/dist/web-components/src/ChaptersButton.d.ts.map +1 -0
- package/dist/web-components/src/ChaptersButton.styles.d.ts +2 -0
- package/dist/web-components/src/ChaptersButton.styles.d.ts.map +1 -0
- package/dist/web-components/src/PlayButton.d.ts +17 -0
- package/dist/web-components/src/PlayButton.d.ts.map +1 -0
- package/dist/web-components/src/PlayButton.styles.d.ts +2 -0
- package/dist/web-components/src/PlayButton.styles.d.ts.map +1 -0
- package/dist/web-components/src/Player.d.ts +271 -0
- package/dist/web-components/src/Player.d.ts.map +1 -0
- package/dist/web-components/src/Player.styles.d.ts +2 -0
- package/dist/web-components/src/Player.styles.d.ts.map +1 -0
- package/dist/web-components/src/SeekButton.d.ts +18 -0
- package/dist/web-components/src/SeekButton.d.ts.map +1 -0
- package/dist/web-components/src/SeekButton.styles.d.ts +2 -0
- package/dist/web-components/src/SeekButton.styles.d.ts.map +1 -0
- package/dist/web-components/src/Seekbar.d.ts +101 -0
- package/dist/web-components/src/Seekbar.d.ts.map +1 -0
- package/dist/web-components/src/Seekbar.styles.d.ts +2 -0
- package/dist/web-components/src/Seekbar.styles.d.ts.map +1 -0
- package/dist/web-components/src/Themes.d.ts +5 -0
- package/dist/web-components/src/Themes.d.ts.map +1 -0
- package/dist/web-components/src/VerticalControls.d.ts +49 -0
- package/dist/web-components/src/VerticalControls.d.ts.map +1 -0
- package/dist/web-components/src/VerticalControls.styles.d.ts +2 -0
- package/dist/web-components/src/VerticalControls.styles.d.ts.map +1 -0
- package/dist/web-components/src/VolumeControl.d.ts +21 -0
- package/dist/web-components/src/VolumeControl.d.ts.map +1 -0
- package/dist/web-components/src/VolumeControl.styles.d.ts +2 -0
- package/dist/web-components/src/VolumeControl.styles.d.ts.map +1 -0
- package/dist/web-components/src/icons/IconRegistry.d.ts +24 -0
- package/dist/web-components/src/icons/IconRegistry.d.ts.map +1 -0
- package/dist/web-components/src/index.d.ts +10 -0
- package/dist/web-components/src/index.d.ts.map +1 -0
- package/dist/web-components/src/player-internals/GestureController.d.ts +140 -0
- package/dist/web-components/src/player-internals/GestureController.d.ts.map +1 -0
- package/dist/web-components/src/player-internals/PrefetchController.d.ts +34 -0
- package/dist/web-components/src/player-internals/PrefetchController.d.ts.map +1 -0
- package/dist/web-components/src/player-internals/SettingsMenuController.d.ts +59 -0
- package/dist/web-components/src/player-internals/SettingsMenuController.d.ts.map +1 -0
- package/dist/web-components/src/player-internals/ThumbnailCache.d.ts +64 -0
- package/dist/web-components/src/player-internals/ThumbnailCache.d.ts.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const PlayerController = require("../PlayerController-Bt7Po42U.cjs");
|
|
4
|
+
class DrmValidator {
|
|
5
|
+
/**
|
|
6
|
+
* Performs an automated validation of the player's DRM state.
|
|
7
|
+
*/
|
|
8
|
+
static async validate(controller) {
|
|
9
|
+
const report = {
|
|
10
|
+
emeSupported: typeof navigator !== "undefined" && typeof navigator.requestMediaKeySystemAccess === "function",
|
|
11
|
+
keySystems: {},
|
|
12
|
+
activeSystem: null,
|
|
13
|
+
hasMediaKeys: false,
|
|
14
|
+
activeSessionsCount: 0,
|
|
15
|
+
sessionIds: [],
|
|
16
|
+
keyStatuses: [],
|
|
17
|
+
hasUsableKey: false,
|
|
18
|
+
errors: [],
|
|
19
|
+
passed: false,
|
|
20
|
+
requestMediaKeySystemAccessChecked: false,
|
|
21
|
+
mediaKeysCreatedChecked: false,
|
|
22
|
+
mediaKeysAttachedChecked: false,
|
|
23
|
+
encryptedEventCount: 0,
|
|
24
|
+
licenseChallengeGeneratedCount: 0,
|
|
25
|
+
licenseRequestSentCount: 0,
|
|
26
|
+
licenseResponseReceivedCount: 0,
|
|
27
|
+
sessionUpdatedCount: 0,
|
|
28
|
+
keyStatusesChangeCount: 0,
|
|
29
|
+
usableKeysCount: 0,
|
|
30
|
+
expiredKeysCount: 0,
|
|
31
|
+
outputRestrictedCount: 0,
|
|
32
|
+
internalErrorsCount: 0,
|
|
33
|
+
closedSessionsCount: 0,
|
|
34
|
+
lastInternalError: null
|
|
35
|
+
};
|
|
36
|
+
if (!report.emeSupported) {
|
|
37
|
+
report.errors.push("EME is not supported on this platform/browser.");
|
|
38
|
+
return report;
|
|
39
|
+
}
|
|
40
|
+
const systems = {
|
|
41
|
+
widevine: "com.widevine.alpha",
|
|
42
|
+
playready: "com.microsoft.playready",
|
|
43
|
+
fairplay: "com.apple.fps",
|
|
44
|
+
clearkey: "org.w3.clearkey"
|
|
45
|
+
};
|
|
46
|
+
const videoCapabilities = [
|
|
47
|
+
{ contentType: 'video/mp4; codecs="avc1.640028"' },
|
|
48
|
+
{ contentType: 'video/mp4; codecs="avc1.4d401e"' },
|
|
49
|
+
{ contentType: "video/mp4" },
|
|
50
|
+
{ contentType: 'video/webm; codecs="vp9"' }
|
|
51
|
+
];
|
|
52
|
+
const audioCapabilities = [
|
|
53
|
+
{ contentType: 'audio/mp4; codecs="mp4a.40.2"' },
|
|
54
|
+
{ contentType: "audio/mp4" },
|
|
55
|
+
{ contentType: 'audio/webm; codecs="opus"' }
|
|
56
|
+
];
|
|
57
|
+
for (const [name, sys] of Object.entries(systems)) {
|
|
58
|
+
try {
|
|
59
|
+
const config = [
|
|
60
|
+
// 1. Preferred full capabilities
|
|
61
|
+
{
|
|
62
|
+
initDataTypes: ["cenc", "keyids", "webm", "skd", "sinf"],
|
|
63
|
+
videoCapabilities,
|
|
64
|
+
audioCapabilities
|
|
65
|
+
},
|
|
66
|
+
// 2. Video fallback
|
|
67
|
+
{
|
|
68
|
+
initDataTypes: ["cenc", "keyids", "webm", "skd", "sinf"],
|
|
69
|
+
videoCapabilities
|
|
70
|
+
},
|
|
71
|
+
// 3. Audio fallback
|
|
72
|
+
{
|
|
73
|
+
initDataTypes: ["cenc", "keyids", "webm", "skd", "sinf"],
|
|
74
|
+
audioCapabilities
|
|
75
|
+
},
|
|
76
|
+
// 4. State/Identifier disabled fallback
|
|
77
|
+
{
|
|
78
|
+
initDataTypes: ["cenc", "keyids", "webm", "skd", "sinf"],
|
|
79
|
+
videoCapabilities,
|
|
80
|
+
persistentState: "not-allowed",
|
|
81
|
+
distinctiveIdentifier: "not-allowed"
|
|
82
|
+
}
|
|
83
|
+
];
|
|
84
|
+
await navigator.requestMediaKeySystemAccess(sys, config);
|
|
85
|
+
report.keySystems[name] = true;
|
|
86
|
+
} catch (_) {
|
|
87
|
+
report.keySystems[name] = false;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const video = controller.getVideoElement();
|
|
91
|
+
if (video) {
|
|
92
|
+
if (video.mediaKeys) {
|
|
93
|
+
report.hasMediaKeys = true;
|
|
94
|
+
const drmManager = controller.getDrmManager();
|
|
95
|
+
if (drmManager) {
|
|
96
|
+
const drmConfig = drmManager.getConfig();
|
|
97
|
+
if (drmConfig) {
|
|
98
|
+
report.activeSystem = Object.keys(drmConfig).find(
|
|
99
|
+
(k) => k !== "robustness" && k !== "distinctiveIdentifier" && k !== "persistentState" && k !== "retryCount" && k !== "timeout"
|
|
100
|
+
) || null;
|
|
101
|
+
}
|
|
102
|
+
const sessions = drmManager.getActiveSessions();
|
|
103
|
+
if (sessions) {
|
|
104
|
+
report.activeSessionsCount = sessions.size;
|
|
105
|
+
sessions.forEach((s) => {
|
|
106
|
+
if (s.sessionId) {
|
|
107
|
+
report.sessionIds.push(s.sessionId);
|
|
108
|
+
}
|
|
109
|
+
if (s.keyStatuses) {
|
|
110
|
+
s.keyStatuses.forEach((status) => {
|
|
111
|
+
report.keyStatuses.push(String(status));
|
|
112
|
+
if (status === "usable") {
|
|
113
|
+
report.hasUsableKey = true;
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
const diag = drmManager.emeDiagnostics;
|
|
120
|
+
if (diag) {
|
|
121
|
+
report.requestMediaKeySystemAccessChecked = diag.requestMediaKeySystemAccess;
|
|
122
|
+
report.mediaKeysCreatedChecked = diag.mediaKeysCreated;
|
|
123
|
+
report.mediaKeysAttachedChecked = diag.mediaKeysAttached;
|
|
124
|
+
report.encryptedEventCount = diag.encryptedEventsCount;
|
|
125
|
+
report.licenseChallengeGeneratedCount = diag.challengesGenerated;
|
|
126
|
+
report.licenseRequestSentCount = diag.licenseRequestsSent;
|
|
127
|
+
report.licenseResponseReceivedCount = diag.licenseResponsesReceived;
|
|
128
|
+
report.sessionUpdatedCount = diag.sessionsUpdated;
|
|
129
|
+
report.keyStatusesChangeCount = diag.keyStatusesChanges;
|
|
130
|
+
report.usableKeysCount = diag.usableKeysCount;
|
|
131
|
+
report.expiredKeysCount = diag.expiredKeysCount;
|
|
132
|
+
report.outputRestrictedCount = diag.outputRestrictedCount;
|
|
133
|
+
report.internalErrorsCount = diag.internalErrorsCount;
|
|
134
|
+
report.closedSessionsCount = diag.closedSessionsCount;
|
|
135
|
+
report.lastInternalError = diag.lastInternalError;
|
|
136
|
+
if (diag.expiredKeysCount > 0) {
|
|
137
|
+
report.errors.push(`EME has ${diag.expiredKeysCount} expired key(s).`);
|
|
138
|
+
}
|
|
139
|
+
if (diag.outputRestrictedCount > 0) {
|
|
140
|
+
report.errors.push(`EME playback restricted by HDCP output constraints.`);
|
|
141
|
+
}
|
|
142
|
+
if (diag.internalErrorsCount > 0 && diag.lastInternalError) {
|
|
143
|
+
report.errors.push(`EME Internal Error: ${diag.lastInternalError}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
const state = controller.getState();
|
|
150
|
+
if (state && state.error) {
|
|
151
|
+
report.errors.push(state.error);
|
|
152
|
+
}
|
|
153
|
+
report.passed = report.emeSupported && report.errors.length === 0;
|
|
154
|
+
return report;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
exports.AdBreakManager = PlayerController.AdBreakManager;
|
|
158
|
+
exports.AdBreakType = PlayerController.AdBreakType;
|
|
159
|
+
exports.AdErrorType = PlayerController.AdErrorType;
|
|
160
|
+
exports.AdPlacementType = PlayerController.AdPlacementType;
|
|
161
|
+
exports.AdProviderType = PlayerController.AdProviderType;
|
|
162
|
+
exports.AdSkipMode = PlayerController.AdSkipMode;
|
|
163
|
+
exports.AdState = PlayerController.AdState;
|
|
164
|
+
exports.AdsController = PlayerController.AdsController;
|
|
165
|
+
exports.AdsManager = PlayerController.AdsManager;
|
|
166
|
+
exports.AdsValidator = PlayerController.AdsValidator;
|
|
167
|
+
exports.AutoThumbnailProvider = PlayerController.AutoThumbnailProvider;
|
|
168
|
+
exports.DrmManager = PlayerController.DrmManager;
|
|
169
|
+
exports.HtmlOverlayRenderer = PlayerController.HtmlOverlayRenderer;
|
|
170
|
+
exports.ImaProvider = PlayerController.ImaProvider;
|
|
171
|
+
exports.KeyboardManager = PlayerController.KeyboardManager;
|
|
172
|
+
exports.PlayerController = PlayerController.PlayerController;
|
|
173
|
+
exports.SimidBridge = PlayerController.SimidBridge;
|
|
174
|
+
exports.SimidErrorCode = PlayerController.SimidErrorCode;
|
|
175
|
+
exports.SimidManager = PlayerController.SimidManager;
|
|
176
|
+
exports.SimidRuntime = PlayerController.SimidRuntime;
|
|
177
|
+
exports.SimidSession = PlayerController.SimidSession;
|
|
178
|
+
exports.SpriteThumbnailProvider = PlayerController.SpriteThumbnailProvider;
|
|
179
|
+
exports.TimelineMath = PlayerController.TimelineMath;
|
|
180
|
+
exports.TrackingEventName = PlayerController.TrackingEventName;
|
|
181
|
+
exports.VTTThumbnailProvider = PlayerController.VTTThumbnailProvider;
|
|
182
|
+
exports.VastProvider = PlayerController.VastProvider;
|
|
183
|
+
exports.VideoFrameThumbnailProvider = PlayerController.VideoFrameThumbnailProvider;
|
|
184
|
+
exports.VmapProvider = PlayerController.VmapProvider;
|
|
185
|
+
exports.detectSupportedKeySystems = PlayerController.detectSupportedKeySystems;
|
|
186
|
+
exports.formatTime = PlayerController.formatTime;
|
|
187
|
+
exports.isClearKeySupported = PlayerController.isClearKeySupported;
|
|
188
|
+
exports.isFairPlaySupported = PlayerController.isFairPlaySupported;
|
|
189
|
+
exports.isKeySystemSupported = PlayerController.isKeySystemSupported;
|
|
190
|
+
exports.isPlayReadySupported = PlayerController.isPlayReadySupported;
|
|
191
|
+
exports.isWidevineSupported = PlayerController.isWidevineSupported;
|
|
192
|
+
exports.normalizeClearKeyValue = PlayerController.normalizeClearKeyValue;
|
|
193
|
+
exports.normalizeClearKeys = PlayerController.normalizeClearKeys;
|
|
194
|
+
exports.DrmValidator = DrmValidator;
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { A, a, b, c, d, e, f, g, h, i, j, D, H, I, K, P, S, k, l, m, n, o, T, p, V, q, r, s, t, u, v, w, x, y, z, B, C } from "../PlayerController-CW0pxrIt.js";
|
|
2
|
+
class DrmValidator {
|
|
3
|
+
/**
|
|
4
|
+
* Performs an automated validation of the player's DRM state.
|
|
5
|
+
*/
|
|
6
|
+
static async validate(controller) {
|
|
7
|
+
const report = {
|
|
8
|
+
emeSupported: typeof navigator !== "undefined" && typeof navigator.requestMediaKeySystemAccess === "function",
|
|
9
|
+
keySystems: {},
|
|
10
|
+
activeSystem: null,
|
|
11
|
+
hasMediaKeys: false,
|
|
12
|
+
activeSessionsCount: 0,
|
|
13
|
+
sessionIds: [],
|
|
14
|
+
keyStatuses: [],
|
|
15
|
+
hasUsableKey: false,
|
|
16
|
+
errors: [],
|
|
17
|
+
passed: false,
|
|
18
|
+
requestMediaKeySystemAccessChecked: false,
|
|
19
|
+
mediaKeysCreatedChecked: false,
|
|
20
|
+
mediaKeysAttachedChecked: false,
|
|
21
|
+
encryptedEventCount: 0,
|
|
22
|
+
licenseChallengeGeneratedCount: 0,
|
|
23
|
+
licenseRequestSentCount: 0,
|
|
24
|
+
licenseResponseReceivedCount: 0,
|
|
25
|
+
sessionUpdatedCount: 0,
|
|
26
|
+
keyStatusesChangeCount: 0,
|
|
27
|
+
usableKeysCount: 0,
|
|
28
|
+
expiredKeysCount: 0,
|
|
29
|
+
outputRestrictedCount: 0,
|
|
30
|
+
internalErrorsCount: 0,
|
|
31
|
+
closedSessionsCount: 0,
|
|
32
|
+
lastInternalError: null
|
|
33
|
+
};
|
|
34
|
+
if (!report.emeSupported) {
|
|
35
|
+
report.errors.push("EME is not supported on this platform/browser.");
|
|
36
|
+
return report;
|
|
37
|
+
}
|
|
38
|
+
const systems = {
|
|
39
|
+
widevine: "com.widevine.alpha",
|
|
40
|
+
playready: "com.microsoft.playready",
|
|
41
|
+
fairplay: "com.apple.fps",
|
|
42
|
+
clearkey: "org.w3.clearkey"
|
|
43
|
+
};
|
|
44
|
+
const videoCapabilities = [
|
|
45
|
+
{ contentType: 'video/mp4; codecs="avc1.640028"' },
|
|
46
|
+
{ contentType: 'video/mp4; codecs="avc1.4d401e"' },
|
|
47
|
+
{ contentType: "video/mp4" },
|
|
48
|
+
{ contentType: 'video/webm; codecs="vp9"' }
|
|
49
|
+
];
|
|
50
|
+
const audioCapabilities = [
|
|
51
|
+
{ contentType: 'audio/mp4; codecs="mp4a.40.2"' },
|
|
52
|
+
{ contentType: "audio/mp4" },
|
|
53
|
+
{ contentType: 'audio/webm; codecs="opus"' }
|
|
54
|
+
];
|
|
55
|
+
for (const [name, sys] of Object.entries(systems)) {
|
|
56
|
+
try {
|
|
57
|
+
const config = [
|
|
58
|
+
// 1. Preferred full capabilities
|
|
59
|
+
{
|
|
60
|
+
initDataTypes: ["cenc", "keyids", "webm", "skd", "sinf"],
|
|
61
|
+
videoCapabilities,
|
|
62
|
+
audioCapabilities
|
|
63
|
+
},
|
|
64
|
+
// 2. Video fallback
|
|
65
|
+
{
|
|
66
|
+
initDataTypes: ["cenc", "keyids", "webm", "skd", "sinf"],
|
|
67
|
+
videoCapabilities
|
|
68
|
+
},
|
|
69
|
+
// 3. Audio fallback
|
|
70
|
+
{
|
|
71
|
+
initDataTypes: ["cenc", "keyids", "webm", "skd", "sinf"],
|
|
72
|
+
audioCapabilities
|
|
73
|
+
},
|
|
74
|
+
// 4. State/Identifier disabled fallback
|
|
75
|
+
{
|
|
76
|
+
initDataTypes: ["cenc", "keyids", "webm", "skd", "sinf"],
|
|
77
|
+
videoCapabilities,
|
|
78
|
+
persistentState: "not-allowed",
|
|
79
|
+
distinctiveIdentifier: "not-allowed"
|
|
80
|
+
}
|
|
81
|
+
];
|
|
82
|
+
await navigator.requestMediaKeySystemAccess(sys, config);
|
|
83
|
+
report.keySystems[name] = true;
|
|
84
|
+
} catch (_) {
|
|
85
|
+
report.keySystems[name] = false;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const video = controller.getVideoElement();
|
|
89
|
+
if (video) {
|
|
90
|
+
if (video.mediaKeys) {
|
|
91
|
+
report.hasMediaKeys = true;
|
|
92
|
+
const drmManager = controller.getDrmManager();
|
|
93
|
+
if (drmManager) {
|
|
94
|
+
const drmConfig = drmManager.getConfig();
|
|
95
|
+
if (drmConfig) {
|
|
96
|
+
report.activeSystem = Object.keys(drmConfig).find(
|
|
97
|
+
(k2) => k2 !== "robustness" && k2 !== "distinctiveIdentifier" && k2 !== "persistentState" && k2 !== "retryCount" && k2 !== "timeout"
|
|
98
|
+
) || null;
|
|
99
|
+
}
|
|
100
|
+
const sessions = drmManager.getActiveSessions();
|
|
101
|
+
if (sessions) {
|
|
102
|
+
report.activeSessionsCount = sessions.size;
|
|
103
|
+
sessions.forEach((s2) => {
|
|
104
|
+
if (s2.sessionId) {
|
|
105
|
+
report.sessionIds.push(s2.sessionId);
|
|
106
|
+
}
|
|
107
|
+
if (s2.keyStatuses) {
|
|
108
|
+
s2.keyStatuses.forEach((status) => {
|
|
109
|
+
report.keyStatuses.push(String(status));
|
|
110
|
+
if (status === "usable") {
|
|
111
|
+
report.hasUsableKey = true;
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
const diag = drmManager.emeDiagnostics;
|
|
118
|
+
if (diag) {
|
|
119
|
+
report.requestMediaKeySystemAccessChecked = diag.requestMediaKeySystemAccess;
|
|
120
|
+
report.mediaKeysCreatedChecked = diag.mediaKeysCreated;
|
|
121
|
+
report.mediaKeysAttachedChecked = diag.mediaKeysAttached;
|
|
122
|
+
report.encryptedEventCount = diag.encryptedEventsCount;
|
|
123
|
+
report.licenseChallengeGeneratedCount = diag.challengesGenerated;
|
|
124
|
+
report.licenseRequestSentCount = diag.licenseRequestsSent;
|
|
125
|
+
report.licenseResponseReceivedCount = diag.licenseResponsesReceived;
|
|
126
|
+
report.sessionUpdatedCount = diag.sessionsUpdated;
|
|
127
|
+
report.keyStatusesChangeCount = diag.keyStatusesChanges;
|
|
128
|
+
report.usableKeysCount = diag.usableKeysCount;
|
|
129
|
+
report.expiredKeysCount = diag.expiredKeysCount;
|
|
130
|
+
report.outputRestrictedCount = diag.outputRestrictedCount;
|
|
131
|
+
report.internalErrorsCount = diag.internalErrorsCount;
|
|
132
|
+
report.closedSessionsCount = diag.closedSessionsCount;
|
|
133
|
+
report.lastInternalError = diag.lastInternalError;
|
|
134
|
+
if (diag.expiredKeysCount > 0) {
|
|
135
|
+
report.errors.push(`EME has ${diag.expiredKeysCount} expired key(s).`);
|
|
136
|
+
}
|
|
137
|
+
if (diag.outputRestrictedCount > 0) {
|
|
138
|
+
report.errors.push(`EME playback restricted by HDCP output constraints.`);
|
|
139
|
+
}
|
|
140
|
+
if (diag.internalErrorsCount > 0 && diag.lastInternalError) {
|
|
141
|
+
report.errors.push(`EME Internal Error: ${diag.lastInternalError}`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
const state = controller.getState();
|
|
148
|
+
if (state && state.error) {
|
|
149
|
+
report.errors.push(state.error);
|
|
150
|
+
}
|
|
151
|
+
report.passed = report.emeSupported && report.errors.length === 0;
|
|
152
|
+
return report;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
export {
|
|
156
|
+
A as AdBreakManager,
|
|
157
|
+
a as AdBreakType,
|
|
158
|
+
b as AdErrorType,
|
|
159
|
+
c as AdPlacementType,
|
|
160
|
+
d as AdProviderType,
|
|
161
|
+
e as AdSkipMode,
|
|
162
|
+
f as AdState,
|
|
163
|
+
g as AdsController,
|
|
164
|
+
h as AdsManager,
|
|
165
|
+
i as AdsValidator,
|
|
166
|
+
j as AutoThumbnailProvider,
|
|
167
|
+
D as DrmManager,
|
|
168
|
+
DrmValidator,
|
|
169
|
+
H as HtmlOverlayRenderer,
|
|
170
|
+
I as ImaProvider,
|
|
171
|
+
K as KeyboardManager,
|
|
172
|
+
P as PlayerController,
|
|
173
|
+
S as SimidBridge,
|
|
174
|
+
k as SimidErrorCode,
|
|
175
|
+
l as SimidManager,
|
|
176
|
+
m as SimidRuntime,
|
|
177
|
+
n as SimidSession,
|
|
178
|
+
o as SpriteThumbnailProvider,
|
|
179
|
+
T as TimelineMath,
|
|
180
|
+
p as TrackingEventName,
|
|
181
|
+
V as VTTThumbnailProvider,
|
|
182
|
+
q as VastProvider,
|
|
183
|
+
r as VideoFrameThumbnailProvider,
|
|
184
|
+
s as VmapProvider,
|
|
185
|
+
t as detectSupportedKeySystems,
|
|
186
|
+
u as formatTime,
|
|
187
|
+
v as isClearKeySupported,
|
|
188
|
+
w as isFairPlaySupported,
|
|
189
|
+
x as isKeySystemSupported,
|
|
190
|
+
y as isPlayReadySupported,
|
|
191
|
+
z as isWidevineSupported,
|
|
192
|
+
B as normalizeClearKeyValue,
|
|
193
|
+
C as normalizeClearKeys
|
|
194
|
+
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { PlayerController } from './PlayerController';
|
|
2
|
+
import { AdProvider, Advertisement, HtmlOverlayConfig } from './types';
|
|
3
|
+
|
|
4
|
+
export interface ScheduledAdRequest {
|
|
5
|
+
/** Required for provider 'VAST' | 'IMA'. Ignored for 'HTML_OVERLAY'. */
|
|
6
|
+
tagUrl?: string;
|
|
7
|
+
type: 'preroll' | 'midroll' | 'postroll';
|
|
8
|
+
/** Seconds (number), or a percentage of content duration, e.g. '50%'. Only used for 'midroll'. */
|
|
9
|
+
timeOffset?: number | string;
|
|
10
|
+
/** Which registered provider to trigger. Defaults to 'VAST'. */
|
|
11
|
+
provider?: 'VAST' | 'IMA' | 'HTML_OVERLAY';
|
|
12
|
+
/** Required for provider 'HTML_OVERLAY' - the overlay creative to show when this break hits. */
|
|
13
|
+
overlay?: Advertisement | HtmlOverlayConfig;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Resolves a midroll timeOffset to absolute seconds. Numbers pass through
|
|
17
|
+
* unchanged. Percentage strings (e.g. '50%') resolve against duration once
|
|
18
|
+
* it's known; returns null if not yet resolvable (duration unknown) or the
|
|
19
|
+
* format is invalid - callers should treat null as "try again later".
|
|
20
|
+
*/
|
|
21
|
+
export declare function resolveScheduledTimeOffset(timeOffset: number | string | undefined, duration: number): number | null;
|
|
22
|
+
export declare function evaluateScheduledHits(breaks: Array<{
|
|
23
|
+
id: string;
|
|
24
|
+
type: 'preroll' | 'midroll' | 'postroll';
|
|
25
|
+
timeOffset?: number;
|
|
26
|
+
isPlayed: boolean;
|
|
27
|
+
}>, currentTime: number, duration: number, isEnded: boolean): string[];
|
|
28
|
+
/**
|
|
29
|
+
* NOTE: AdScheduler and VmapProvider both independently watch the video
|
|
30
|
+
* element's timeupdate/ended events with no shared coordination or
|
|
31
|
+
* frequency-cap state between them. Using player.ads.schedule() alongside
|
|
32
|
+
* a VMAP playlist on the same player instance is unsupported - pick one
|
|
33
|
+
* scheduling mechanism per player instance.
|
|
34
|
+
*/
|
|
35
|
+
export declare class AdScheduler {
|
|
36
|
+
private controller;
|
|
37
|
+
private getProviderByName;
|
|
38
|
+
private showOverlay;
|
|
39
|
+
private breaks;
|
|
40
|
+
private timeUpdateListener;
|
|
41
|
+
private endedListener;
|
|
42
|
+
private nextId;
|
|
43
|
+
constructor(controller: PlayerController, getProviderByName: (name: 'VAST' | 'IMA') => AdProvider | undefined, showOverlay: (config: Advertisement | HtmlOverlayConfig) => Promise<boolean>);
|
|
44
|
+
schedule(request: ScheduledAdRequest): string;
|
|
45
|
+
/** True if there are unplayed manually-scheduled breaks - used to detect
|
|
46
|
+
* the unsupported combination with an active VmapProvider playlist (see
|
|
47
|
+
* class-level note above). */
|
|
48
|
+
hasActiveBreaks(): boolean;
|
|
49
|
+
unschedule(id: string): void;
|
|
50
|
+
clear(): void;
|
|
51
|
+
destroy(): void;
|
|
52
|
+
private attach;
|
|
53
|
+
private evaluate;
|
|
54
|
+
private trigger;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=AdScheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdScheduler.d.ts","sourceRoot":"","sources":["../../../core/src/AdScheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAe,aAAa,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEpF,MAAM,WAAW,kBAAkB;IACjC,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;IACzC,kGAAkG;IAClG,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,cAAc,CAAC;IAC3C,gGAAgG;IAChG,OAAO,CAAC,EAAE,aAAa,GAAG,iBAAiB,CAAC;CAC7C;AAQD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EACvC,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CAYf;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,EAC/G,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACf,MAAM,EAAE,CAgBV;AAED;;;;;;GAMG;AACH,qBAAa,WAAW;IAOpB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,WAAW;IARrB,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,kBAAkB,CAA6B;IACvD,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,MAAM,CAAK;gBAGT,UAAU,EAAE,gBAAgB,EAC5B,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,KAAK,UAAU,GAAG,SAAS,EACnE,WAAW,EAAE,CAAC,MAAM,EAAE,aAAa,GAAG,iBAAiB,KAAK,OAAO,CAAC,OAAO,CAAC;IAK/E,QAAQ,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM;IAMpD;;kCAE8B;IACvB,eAAe,IAAI,OAAO;IAI1B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI5B,KAAK,IAAI,IAAI;IAIb,OAAO,IAAI,IAAI;IAOtB,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,QAAQ;YAgCF,OAAO;CA0BtB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { PlayerController } from './PlayerController';
|
|
2
|
+
import { AdsManager } from './AdsManager';
|
|
3
|
+
import { ScheduledAdRequest } from './AdScheduler';
|
|
4
|
+
import { PlayerState, Advertisement, HtmlOverlayConfig, AdBreak, AdProvider, CapabilityInfo, AdsDiagnostics, AdsValidationReport } from './types';
|
|
5
|
+
import { HtmlOverlayDiagnostics } from './html-overlay/HtmlOverlayRenderer';
|
|
6
|
+
|
|
7
|
+
export declare class AdsController {
|
|
8
|
+
private controller;
|
|
9
|
+
readonly manager: AdsManager;
|
|
10
|
+
private providers;
|
|
11
|
+
private activeProviderName;
|
|
12
|
+
private adContainerElement;
|
|
13
|
+
constructor(controller: PlayerController);
|
|
14
|
+
setAdContainer(container: HTMLElement): void;
|
|
15
|
+
getAdContainer(): HTMLElement | null;
|
|
16
|
+
state(): Partial<PlayerState>;
|
|
17
|
+
provider(): string | null;
|
|
18
|
+
capabilities(): CapabilityInfo | null;
|
|
19
|
+
currentAd(): Advertisement | null;
|
|
20
|
+
currentBreak(): AdBreak | null;
|
|
21
|
+
skip(): void;
|
|
22
|
+
pause(): void;
|
|
23
|
+
resume(): void;
|
|
24
|
+
enable(): void;
|
|
25
|
+
disable(): void;
|
|
26
|
+
private scheduler;
|
|
27
|
+
private getScheduler;
|
|
28
|
+
schedule(request: ScheduledAdRequest): string;
|
|
29
|
+
/** True if there's an active manual schedule (via schedule()) with unplayed
|
|
30
|
+
* breaks - used by VmapProvider to detect the unsupported combination. */
|
|
31
|
+
hasActiveManualSchedule(): boolean;
|
|
32
|
+
unschedule(id: string): void;
|
|
33
|
+
clearSchedule(): void;
|
|
34
|
+
play(tagUrl: string): Promise<void>;
|
|
35
|
+
registerProvider(name: string, provider: AdProvider, adContainer?: HTMLElement): void;
|
|
36
|
+
initializeProvider(name: string, adContainer?: HTMLElement): boolean;
|
|
37
|
+
getProvider(name: string): AdProvider | undefined;
|
|
38
|
+
unregisterProvider(name: string): void;
|
|
39
|
+
destroy(): void;
|
|
40
|
+
showOverlay(adOrConfig: Advertisement | HtmlOverlayConfig): Promise<boolean>;
|
|
41
|
+
hideOverlay(): void;
|
|
42
|
+
closeOverlay(): void;
|
|
43
|
+
updateOverlay(patch: Partial<HtmlOverlayConfig>): void;
|
|
44
|
+
getOverlayDiagnostics(): HtmlOverlayDiagnostics | null;
|
|
45
|
+
diagnostics(): AdsDiagnostics;
|
|
46
|
+
validate(): AdsValidationReport;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=AdsController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdsController.d.ts","sourceRoot":"","sources":["../../../core/src/AdsController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAe,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAIhE,OAAO,EACL,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,OAAO,EACP,UAAU,EACV,cAAc,EACd,cAAc,EACd,mBAAmB,EAIpB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAmB;IACrC,SAAgB,OAAO,EAAE,UAAU,CAAC;IACpC,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,kBAAkB,CAA4B;gBAE1C,UAAU,EAAE,gBAAgB;IAWjC,cAAc,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAU5C,cAAc,IAAI,WAAW,GAAG,IAAI;IAIpC,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC;IAkB7B,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB,YAAY,IAAI,cAAc,GAAG,IAAI;IAQrC,SAAS,IAAI,aAAa,GAAG,IAAI;IAIjC,YAAY,IAAI,OAAO,GAAG,IAAI;IAI9B,IAAI,IAAI,IAAI;IAIZ,KAAK,IAAI,IAAI;IAIb,MAAM,IAAI,IAAI;IAId,MAAM,IAAI,IAAI;IAId,OAAO,IAAI,IAAI;IAItB,OAAO,CAAC,SAAS,CAA4B;IAE7C,OAAO,CAAC,YAAY;IAWb,QAAQ,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM;IAgBpD;8EAC0E;IACnE,uBAAuB,IAAI,OAAO;IAIlC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI5B,aAAa,IAAI,IAAI;IAIf,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASzC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI;IAYrF,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO;IAgBpE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAuBjD,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAiBtC,OAAO,IAAI,IAAI;IAKT,WAAW,CAAC,UAAU,EAAE,aAAa,GAAG,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlF,WAAW,IAAI,IAAI;IAInB,YAAY,IAAI,IAAI;IAIpB,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAItD,qBAAqB,IAAI,sBAAsB,GAAG,IAAI;IAKtD,WAAW,IAAI,cAAc;IAmB7B,QAAQ,IAAI,mBAAmB;CAGvC"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { PlayerController } from './PlayerController';
|
|
2
|
+
import { HtmlOverlayRenderer } from './html-overlay/HtmlOverlayRenderer';
|
|
3
|
+
import { PlaybackInterceptor, PlayerPlugin, AdBreak, Advertisement, HtmlOverlayConfig, AdState, AdProvider, CapabilityInfo, ProviderContext, AdError, CompanionSlot, PlayerSource } from './types';
|
|
4
|
+
|
|
5
|
+
export declare function matchCompanionsToSlots(companions: Advertisement[], slots: CompanionSlot[]): Array<{
|
|
6
|
+
slot: CompanionSlot;
|
|
7
|
+
companion: Advertisement;
|
|
8
|
+
}>;
|
|
9
|
+
export declare class ProviderManager {
|
|
10
|
+
private providers;
|
|
11
|
+
private activeProviderName;
|
|
12
|
+
registerProvider(name: string, provider: AdProvider): void;
|
|
13
|
+
getProvider(name: string): AdProvider | undefined;
|
|
14
|
+
unregisterProvider(name: string): void;
|
|
15
|
+
selectProvider(name: string | null): void;
|
|
16
|
+
getActiveProvider(): AdProvider | undefined;
|
|
17
|
+
getActiveProviderName(): string | null;
|
|
18
|
+
getCapabilities(name: string): CapabilityInfo | null;
|
|
19
|
+
onSourceLoaded(source?: PlayerSource): void;
|
|
20
|
+
destroy(): void;
|
|
21
|
+
}
|
|
22
|
+
export interface SnapshotState {
|
|
23
|
+
readonly currentTime: number;
|
|
24
|
+
readonly paused: boolean;
|
|
25
|
+
readonly playbackRate: number;
|
|
26
|
+
readonly muted: boolean;
|
|
27
|
+
readonly volume: number;
|
|
28
|
+
readonly activeAudioTrack: number;
|
|
29
|
+
readonly activeSubtitleTrackId: string | null;
|
|
30
|
+
readonly activeQuality: number;
|
|
31
|
+
readonly isFullscreen: boolean;
|
|
32
|
+
readonly pictureInPicture: boolean;
|
|
33
|
+
readonly isAtLiveEdge: boolean;
|
|
34
|
+
readonly liveLatency: number | null;
|
|
35
|
+
}
|
|
36
|
+
export declare class ContentSnapshot {
|
|
37
|
+
private snapshot;
|
|
38
|
+
capture(controller: PlayerController): void;
|
|
39
|
+
restore(controller: PlayerController): void;
|
|
40
|
+
clear(): void;
|
|
41
|
+
exists(): boolean;
|
|
42
|
+
}
|
|
43
|
+
export declare class AdBreakManager {
|
|
44
|
+
private activeBreak;
|
|
45
|
+
private pendingBreaks;
|
|
46
|
+
private completedBreaks;
|
|
47
|
+
private cancelledBreaks;
|
|
48
|
+
registerBreak(adBreak: AdBreak): void;
|
|
49
|
+
activateBreak(adBreak: AdBreak): void;
|
|
50
|
+
completeBreak(): void;
|
|
51
|
+
cancelBreak(id: string): void;
|
|
52
|
+
clearBreaks(): void;
|
|
53
|
+
getActiveBreak(): AdBreak | null;
|
|
54
|
+
getPendingBreaks(): AdBreak[];
|
|
55
|
+
getCompletedBreaks(): AdBreak[];
|
|
56
|
+
getCancelledBreaks(): AdBreak[];
|
|
57
|
+
}
|
|
58
|
+
export declare class AsyncGuard {
|
|
59
|
+
private activeToken;
|
|
60
|
+
generateToken(): number;
|
|
61
|
+
isValid(token: number): boolean;
|
|
62
|
+
invalidateAll(): void;
|
|
63
|
+
}
|
|
64
|
+
export declare class TimeoutManager {
|
|
65
|
+
private timers;
|
|
66
|
+
set(id: string, callback: () => void, delayMs: number): void;
|
|
67
|
+
clear(id: string): void;
|
|
68
|
+
clearAll(): void;
|
|
69
|
+
}
|
|
70
|
+
export interface ExtendedDiagnosticsStats {
|
|
71
|
+
totalAdsRequested: number;
|
|
72
|
+
totalAdsPlayed: number;
|
|
73
|
+
totalAdsCompleted: number;
|
|
74
|
+
totalAdsSkipped: number;
|
|
75
|
+
totalAdErrors: number;
|
|
76
|
+
recoveryCount: number;
|
|
77
|
+
timeoutCount: number;
|
|
78
|
+
cancelledAdsCount: number;
|
|
79
|
+
providerFailures: number;
|
|
80
|
+
averageLoadTimeMs: number;
|
|
81
|
+
averageResumeTimeMs: number;
|
|
82
|
+
activeOperationsCount: number;
|
|
83
|
+
}
|
|
84
|
+
export declare class AdsManager implements PlayerPlugin, PlaybackInterceptor {
|
|
85
|
+
readonly name = "ads-manager";
|
|
86
|
+
private controller;
|
|
87
|
+
private state;
|
|
88
|
+
private providerManager;
|
|
89
|
+
private contentSnapshot;
|
|
90
|
+
private adBreakManager;
|
|
91
|
+
private asyncGuard;
|
|
92
|
+
private timeoutManager;
|
|
93
|
+
private htmlOverlayRenderer;
|
|
94
|
+
private companionRenderers;
|
|
95
|
+
private concurrentOverlayRenderers;
|
|
96
|
+
private adContainer;
|
|
97
|
+
private isInterceptionActive;
|
|
98
|
+
private currentAd;
|
|
99
|
+
private requestedCount;
|
|
100
|
+
private playedCount;
|
|
101
|
+
private completedCount;
|
|
102
|
+
private skippedCount;
|
|
103
|
+
private errorCount;
|
|
104
|
+
private recoveryCount;
|
|
105
|
+
private timeoutCount;
|
|
106
|
+
private cancelledCount;
|
|
107
|
+
private providerFailuresCount;
|
|
108
|
+
private activeOperations;
|
|
109
|
+
install(controller: PlayerController): void;
|
|
110
|
+
destroy(): void;
|
|
111
|
+
getProviderManager(): ProviderManager;
|
|
112
|
+
getAdBreakManager(): AdBreakManager;
|
|
113
|
+
getAdState(): AdState;
|
|
114
|
+
getSavedContentSnapshot(): ContentSnapshot;
|
|
115
|
+
transitionTo(newState: AdState): boolean;
|
|
116
|
+
private updateDiagnosticsMetrics;
|
|
117
|
+
private dispatchStateEvents;
|
|
118
|
+
startAdBreak(adBreak: AdBreak, options?: {
|
|
119
|
+
skipVideoOwnership?: boolean;
|
|
120
|
+
}): void;
|
|
121
|
+
skipAd(): void;
|
|
122
|
+
endAdBreak(): void;
|
|
123
|
+
recover(reason: string): void;
|
|
124
|
+
triggerAdError(error: AdError): void;
|
|
125
|
+
scheduleTimeout(id: string, delayMs: number, reason: string): void;
|
|
126
|
+
cancelTimeout(id: string): void;
|
|
127
|
+
setAdContainer(container: HTMLElement): void;
|
|
128
|
+
getAdContainer(): HTMLElement | null;
|
|
129
|
+
createProviderContext(adContainer?: HTMLElement): ProviderContext;
|
|
130
|
+
setCurrentAd(ad: Advertisement | null): void;
|
|
131
|
+
private updatePlayerState;
|
|
132
|
+
play(): Promise<boolean> | boolean;
|
|
133
|
+
pause(): boolean;
|
|
134
|
+
seek(time: number): boolean;
|
|
135
|
+
setVolume(vol: number): boolean;
|
|
136
|
+
setMuted(muted: boolean): boolean;
|
|
137
|
+
private triggerLifecycleHook;
|
|
138
|
+
liveEdgeSyncHook(): void;
|
|
139
|
+
dvrPositionHook(): void;
|
|
140
|
+
catchUpPlaybackHook(): void;
|
|
141
|
+
liveSourceSwitchHook(): void;
|
|
142
|
+
playlistItemStartHook(): void;
|
|
143
|
+
playlistItemEndHook(): void;
|
|
144
|
+
autoplayNextItemHook(): void;
|
|
145
|
+
playlistRepeatHook(): void;
|
|
146
|
+
playlistNavigationHook(): void;
|
|
147
|
+
getHtmlOverlayRenderer(): HtmlOverlayRenderer | null;
|
|
148
|
+
private applyDefaultSanitizer;
|
|
149
|
+
isHtmlOverlayCreative(ad: Advertisement): boolean;
|
|
150
|
+
showCompanions(companions: Advertisement[]): void;
|
|
151
|
+
private clearCompanions;
|
|
152
|
+
/**
|
|
153
|
+
* Renders NonLinear overlay ads declared inside the SAME VAST <Ad> as the
|
|
154
|
+
* Linear creative currently playing - i.e. an overlay banner shown ON TOP
|
|
155
|
+
* of the ad video while it plays, per the standard IAB VAST pattern. Unlike
|
|
156
|
+
* `playHtmlOverlay()`, this does NOT touch `currentAd` or the AdState
|
|
157
|
+
* machine - it's a passive, fire-and-forget render alongside the Linear ad,
|
|
158
|
+
* exactly like `showCompanions()` except targeting the player container
|
|
159
|
+
* instead of an external page slot.
|
|
160
|
+
*/
|
|
161
|
+
showConcurrentOverlays(nonLinearAds: Advertisement[]): void;
|
|
162
|
+
/**
|
|
163
|
+
* Clears both companion ads and concurrent NonLinear overlays. Providers
|
|
164
|
+
* call this before playing the next ad in a pod, so a previous ad's
|
|
165
|
+
* companion/overlay isn't left stuck on screen if the next ad has none of
|
|
166
|
+
* its own (showCompanions/showConcurrentOverlays only run when there IS
|
|
167
|
+
* something new to show, so a previous render would otherwise never clear).
|
|
168
|
+
*/
|
|
169
|
+
clearAuxiliaryOverlays(): void;
|
|
170
|
+
private clearConcurrentOverlays;
|
|
171
|
+
private fireOverlayErrorPixels;
|
|
172
|
+
showOverlay(adOrConfig: Advertisement | HtmlOverlayConfig): Promise<boolean>;
|
|
173
|
+
hideOverlay(): void;
|
|
174
|
+
closeOverlay(): void;
|
|
175
|
+
updateOverlay(patch: Partial<HtmlOverlayConfig>): void;
|
|
176
|
+
playHtmlOverlay(ad: Advertisement): Promise<void>;
|
|
177
|
+
onSourceLoaded(source?: PlayerSource): void;
|
|
178
|
+
handleSourceSwitch(): void;
|
|
179
|
+
getDiagnosticsStats(): ExtendedDiagnosticsStats;
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=AdsManager.d.ts.map
|