@livepeer-frameworks/player-core 0.1.0 → 0.1.2
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 +11 -9
- package/dist/cjs/core/ABRController.js +456 -0
- package/dist/cjs/core/ABRController.js.map +1 -0
- package/dist/cjs/core/CodecUtils.js +195 -0
- package/dist/cjs/core/CodecUtils.js.map +1 -0
- package/dist/cjs/core/ErrorClassifier.js +410 -0
- package/dist/cjs/core/ErrorClassifier.js.map +1 -0
- package/dist/cjs/core/EventEmitter.js +108 -0
- package/dist/cjs/core/EventEmitter.js.map +1 -0
- package/dist/cjs/core/GatewayClient.js +342 -0
- package/dist/cjs/core/GatewayClient.js.map +1 -0
- package/dist/cjs/core/InteractionController.js +606 -0
- package/dist/cjs/core/InteractionController.js.map +1 -0
- package/dist/cjs/core/LiveDurationProxy.js +186 -0
- package/dist/cjs/core/LiveDurationProxy.js.map +1 -0
- package/dist/cjs/core/MetaTrackManager.js +624 -0
- package/dist/cjs/core/MetaTrackManager.js.map +1 -0
- package/dist/cjs/core/MistReporter.js +449 -0
- package/dist/cjs/core/MistReporter.js.map +1 -0
- package/dist/cjs/core/MistSignaling.js +264 -0
- package/dist/cjs/core/MistSignaling.js.map +1 -0
- package/dist/cjs/core/PlayerController.js +2658 -0
- package/dist/cjs/core/PlayerController.js.map +1 -0
- package/dist/cjs/core/PlayerInterface.js +269 -0
- package/dist/cjs/core/PlayerInterface.js.map +1 -0
- package/dist/cjs/core/PlayerManager.js +806 -0
- package/dist/cjs/core/PlayerManager.js.map +1 -0
- package/dist/cjs/core/PlayerRegistry.js +270 -0
- package/dist/cjs/core/PlayerRegistry.js.map +1 -0
- package/dist/cjs/core/QualityMonitor.js +474 -0
- package/dist/cjs/core/QualityMonitor.js.map +1 -0
- package/dist/cjs/core/SeekingUtils.js +292 -0
- package/dist/cjs/core/SeekingUtils.js.map +1 -0
- package/dist/cjs/core/StreamStateClient.js +381 -0
- package/dist/cjs/core/StreamStateClient.js.map +1 -0
- package/dist/cjs/core/SubtitleManager.js +227 -0
- package/dist/cjs/core/SubtitleManager.js.map +1 -0
- package/dist/cjs/core/TelemetryReporter.js +258 -0
- package/dist/cjs/core/TelemetryReporter.js.map +1 -0
- package/dist/cjs/core/TimeFormat.js +176 -0
- package/dist/cjs/core/TimeFormat.js.map +1 -0
- package/dist/cjs/core/TimerManager.js +176 -0
- package/dist/cjs/core/TimerManager.js.map +1 -0
- package/dist/cjs/core/UrlUtils.js +160 -0
- package/dist/cjs/core/UrlUtils.js.map +1 -0
- package/dist/cjs/core/detector.js +293 -0
- package/dist/cjs/core/detector.js.map +1 -0
- package/dist/cjs/core/scorer.js +443 -0
- package/dist/cjs/core/scorer.js.map +1 -0
- package/dist/cjs/index.js +121 -20134
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/lib/utils.js +11 -0
- package/dist/cjs/lib/utils.js.map +1 -0
- package/dist/cjs/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js +6 -0
- package/dist/cjs/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js.map +1 -0
- package/dist/cjs/node_modules/.pnpm/tailwind-merge@3.4.0/node_modules/tailwind-merge/dist/bundle-mjs.js +3042 -0
- package/dist/cjs/node_modules/.pnpm/tailwind-merge@3.4.0/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
- package/dist/cjs/players/DashJsPlayer.js +638 -0
- package/dist/cjs/players/DashJsPlayer.js.map +1 -0
- package/dist/cjs/players/HlsJsPlayer.js +482 -0
- package/dist/cjs/players/HlsJsPlayer.js.map +1 -0
- package/dist/cjs/players/MewsWsPlayer/SourceBufferManager.js +522 -0
- package/dist/cjs/players/MewsWsPlayer/SourceBufferManager.js.map +1 -0
- package/dist/cjs/players/MewsWsPlayer/WebSocketManager.js +215 -0
- package/dist/cjs/players/MewsWsPlayer/WebSocketManager.js.map +1 -0
- package/dist/cjs/players/MewsWsPlayer/index.js +987 -0
- package/dist/cjs/players/MewsWsPlayer/index.js.map +1 -0
- package/dist/cjs/players/MistPlayer.js +185 -0
- package/dist/cjs/players/MistPlayer.js.map +1 -0
- package/dist/cjs/players/MistWebRTCPlayer/index.js +635 -0
- package/dist/cjs/players/MistWebRTCPlayer/index.js.map +1 -0
- package/dist/cjs/players/NativePlayer.js +762 -0
- package/dist/cjs/players/NativePlayer.js.map +1 -0
- package/dist/cjs/players/VideoJsPlayer.js +585 -0
- package/dist/cjs/players/VideoJsPlayer.js.map +1 -0
- package/dist/cjs/players/WebCodecsPlayer/JitterBuffer.js +236 -0
- package/dist/cjs/players/WebCodecsPlayer/JitterBuffer.js.map +1 -0
- package/dist/cjs/players/WebCodecsPlayer/LatencyProfiles.js +143 -0
- package/dist/cjs/players/WebCodecsPlayer/LatencyProfiles.js.map +1 -0
- package/dist/cjs/players/WebCodecsPlayer/RawChunkParser.js +96 -0
- package/dist/cjs/players/WebCodecsPlayer/RawChunkParser.js.map +1 -0
- package/dist/cjs/players/WebCodecsPlayer/SyncController.js +359 -0
- package/dist/cjs/players/WebCodecsPlayer/SyncController.js.map +1 -0
- package/dist/cjs/players/WebCodecsPlayer/WebSocketController.js +460 -0
- package/dist/cjs/players/WebCodecsPlayer/WebSocketController.js.map +1 -0
- package/dist/cjs/players/WebCodecsPlayer/index.js +1467 -0
- package/dist/cjs/players/WebCodecsPlayer/index.js.map +1 -0
- package/dist/cjs/players/WebCodecsPlayer/polyfills/MediaStreamTrackGenerator.js +320 -0
- package/dist/cjs/players/WebCodecsPlayer/polyfills/MediaStreamTrackGenerator.js.map +1 -0
- package/dist/cjs/styles/index.js +57 -0
- package/dist/cjs/styles/index.js.map +1 -0
- package/dist/cjs/vanilla/FrameWorksPlayer.js +269 -0
- package/dist/cjs/vanilla/FrameWorksPlayer.js.map +1 -0
- package/dist/cjs/vanilla.js +11 -0
- package/dist/cjs/vanilla.js.map +1 -0
- package/dist/esm/core/ABRController.js +454 -0
- package/dist/esm/core/ABRController.js.map +1 -0
- package/dist/esm/core/CodecUtils.js +193 -0
- package/dist/esm/core/CodecUtils.js.map +1 -0
- package/dist/esm/core/ErrorClassifier.js +408 -0
- package/dist/esm/core/ErrorClassifier.js.map +1 -0
- package/dist/esm/core/EventEmitter.js +106 -0
- package/dist/esm/core/EventEmitter.js.map +1 -0
- package/dist/esm/core/GatewayClient.js +340 -0
- package/dist/esm/core/GatewayClient.js.map +1 -0
- package/dist/esm/core/InteractionController.js +604 -0
- package/dist/esm/core/InteractionController.js.map +1 -0
- package/dist/esm/core/LiveDurationProxy.js +184 -0
- package/dist/esm/core/LiveDurationProxy.js.map +1 -0
- package/dist/esm/core/MetaTrackManager.js +622 -0
- package/dist/esm/core/MetaTrackManager.js.map +1 -0
- package/dist/esm/core/MistReporter.js +447 -0
- package/dist/esm/core/MistReporter.js.map +1 -0
- package/dist/esm/core/MistSignaling.js +262 -0
- package/dist/esm/core/MistSignaling.js.map +1 -0
- package/dist/esm/core/PlayerController.js +2651 -0
- package/dist/esm/core/PlayerController.js.map +1 -0
- package/dist/esm/core/PlayerInterface.js +267 -0
- package/dist/esm/core/PlayerInterface.js.map +1 -0
- package/dist/esm/core/PlayerManager.js +804 -0
- package/dist/esm/core/PlayerManager.js.map +1 -0
- package/dist/esm/core/PlayerRegistry.js +264 -0
- package/dist/esm/core/PlayerRegistry.js.map +1 -0
- package/dist/esm/core/QualityMonitor.js +471 -0
- package/dist/esm/core/QualityMonitor.js.map +1 -0
- package/dist/esm/core/SeekingUtils.js +280 -0
- package/dist/esm/core/SeekingUtils.js.map +1 -0
- package/dist/esm/core/StreamStateClient.js +379 -0
- package/dist/esm/core/StreamStateClient.js.map +1 -0
- package/dist/esm/core/SubtitleManager.js +225 -0
- package/dist/esm/core/SubtitleManager.js.map +1 -0
- package/dist/esm/core/TelemetryReporter.js +256 -0
- package/dist/esm/core/TelemetryReporter.js.map +1 -0
- package/dist/esm/core/TimeFormat.js +169 -0
- package/dist/esm/core/TimeFormat.js.map +1 -0
- package/dist/esm/core/TimerManager.js +174 -0
- package/dist/esm/core/TimerManager.js.map +1 -0
- package/dist/esm/core/UrlUtils.js +151 -0
- package/dist/esm/core/UrlUtils.js.map +1 -0
- package/dist/esm/core/detector.js +279 -0
- package/dist/esm/core/detector.js.map +1 -0
- package/dist/esm/core/scorer.js +422 -0
- package/dist/esm/core/scorer.js.map +1 -0
- package/dist/esm/index.js +26 -20043
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/utils.js +9 -0
- package/dist/esm/lib/utils.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js +4 -0
- package/dist/esm/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/tailwind-merge@3.4.0/node_modules/tailwind-merge/dist/bundle-mjs.js +3036 -0
- package/dist/esm/node_modules/.pnpm/tailwind-merge@3.4.0/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
- package/dist/esm/players/DashJsPlayer.js +636 -0
- package/dist/esm/players/DashJsPlayer.js.map +1 -0
- package/dist/esm/players/HlsJsPlayer.js +480 -0
- package/dist/esm/players/HlsJsPlayer.js.map +1 -0
- package/dist/esm/players/MewsWsPlayer/SourceBufferManager.js +520 -0
- package/dist/esm/players/MewsWsPlayer/SourceBufferManager.js.map +1 -0
- package/dist/esm/players/MewsWsPlayer/WebSocketManager.js +213 -0
- package/dist/esm/players/MewsWsPlayer/WebSocketManager.js.map +1 -0
- package/dist/esm/players/MewsWsPlayer/index.js +985 -0
- package/dist/esm/players/MewsWsPlayer/index.js.map +1 -0
- package/dist/esm/players/MistPlayer.js +183 -0
- package/dist/esm/players/MistPlayer.js.map +1 -0
- package/dist/esm/players/MistWebRTCPlayer/index.js +633 -0
- package/dist/esm/players/MistWebRTCPlayer/index.js.map +1 -0
- package/dist/esm/players/NativePlayer.js +759 -0
- package/dist/esm/players/NativePlayer.js.map +1 -0
- package/dist/esm/players/VideoJsPlayer.js +583 -0
- package/dist/esm/players/VideoJsPlayer.js.map +1 -0
- package/dist/esm/players/WebCodecsPlayer/JitterBuffer.js +233 -0
- package/dist/esm/players/WebCodecsPlayer/JitterBuffer.js.map +1 -0
- package/dist/esm/players/WebCodecsPlayer/LatencyProfiles.js +134 -0
- package/dist/esm/players/WebCodecsPlayer/LatencyProfiles.js.map +1 -0
- package/dist/esm/players/WebCodecsPlayer/RawChunkParser.js +91 -0
- package/dist/esm/players/WebCodecsPlayer/RawChunkParser.js.map +1 -0
- package/dist/esm/players/WebCodecsPlayer/SyncController.js +357 -0
- package/dist/esm/players/WebCodecsPlayer/SyncController.js.map +1 -0
- package/dist/esm/players/WebCodecsPlayer/WebSocketController.js +458 -0
- package/dist/esm/players/WebCodecsPlayer/WebSocketController.js.map +1 -0
- package/dist/esm/players/WebCodecsPlayer/index.js +1458 -0
- package/dist/esm/players/WebCodecsPlayer/index.js.map +1 -0
- package/dist/esm/players/WebCodecsPlayer/polyfills/MediaStreamTrackGenerator.js +315 -0
- package/dist/esm/players/WebCodecsPlayer/polyfills/MediaStreamTrackGenerator.js.map +1 -0
- package/dist/esm/styles/index.js +54 -0
- package/dist/esm/styles/index.js.map +1 -0
- package/dist/esm/vanilla/FrameWorksPlayer.js +264 -0
- package/dist/esm/vanilla/FrameWorksPlayer.js.map +1 -0
- package/dist/esm/vanilla.js +2 -0
- package/dist/esm/vanilla.js.map +1 -0
- package/dist/player.css +185 -42
- package/dist/types/core/ABRController.d.ts +4 -4
- package/dist/types/core/CodecUtils.d.ts +1 -1
- package/dist/types/core/ErrorClassifier.d.ts +77 -0
- package/dist/types/core/GatewayClient.d.ts +4 -4
- package/dist/types/core/MetaTrackManager.d.ts +2 -2
- package/dist/types/core/MistReporter.d.ts +3 -3
- package/dist/types/core/MistSignaling.d.ts +12 -12
- package/dist/types/core/PlayerController.d.ts +19 -14
- package/dist/types/core/PlayerInterface.d.ts +100 -2
- package/dist/types/core/PlayerManager.d.ts +36 -9
- package/dist/types/core/PlayerRegistry.d.ts +11 -11
- package/dist/types/core/QualityMonitor.d.ts +2 -2
- package/dist/types/core/SeekingUtils.d.ts +2 -2
- package/dist/types/core/StreamStateClient.d.ts +2 -2
- package/dist/types/core/TelemetryReporter.d.ts +1 -1
- package/dist/types/core/TimerManager.d.ts +1 -1
- package/dist/types/core/detector.d.ts +1 -1
- package/dist/types/core/index.d.ts +44 -44
- package/dist/types/core/scorer.d.ts +1 -1
- package/dist/types/core/selector.d.ts +2 -2
- package/dist/types/index.d.ts +35 -34
- package/dist/types/players/DashJsPlayer.d.ts +3 -3
- package/dist/types/players/HlsJsPlayer.d.ts +3 -3
- package/dist/types/players/MewsWsPlayer/SourceBufferManager.d.ts +1 -1
- package/dist/types/players/MewsWsPlayer/WebSocketManager.d.ts +1 -1
- package/dist/types/players/MewsWsPlayer/index.d.ts +2 -2
- package/dist/types/players/MewsWsPlayer/types.d.ts +15 -15
- package/dist/types/players/MistPlayer.d.ts +2 -2
- package/dist/types/players/MistWebRTCPlayer/index.d.ts +3 -3
- package/dist/types/players/NativePlayer.d.ts +3 -3
- package/dist/types/players/VideoJsPlayer.d.ts +3 -3
- package/dist/types/players/WebCodecsPlayer/JitterBuffer.d.ts +3 -3
- package/dist/types/players/WebCodecsPlayer/LatencyProfiles.d.ts +1 -1
- package/dist/types/players/WebCodecsPlayer/RawChunkParser.d.ts +2 -2
- package/dist/types/players/WebCodecsPlayer/SyncController.d.ts +2 -2
- package/dist/types/players/WebCodecsPlayer/WebSocketController.d.ts +3 -3
- package/dist/types/players/WebCodecsPlayer/index.d.ts +9 -9
- package/dist/types/players/WebCodecsPlayer/polyfills/MediaStreamTrackGenerator.d.ts +1 -1
- package/dist/types/players/WebCodecsPlayer/types.d.ts +49 -49
- package/dist/types/players/WebCodecsPlayer/worker/types.d.ts +31 -31
- package/dist/types/players/index.d.ts +5 -8
- package/dist/types/types.d.ts +15 -15
- package/dist/types/vanilla/FrameWorksPlayer.d.ts +2 -2
- package/dist/types/vanilla/index.d.ts +4 -4
- package/dist/workers/decoder.worker.js +129 -122
- package/dist/workers/decoder.worker.js.map +1 -1
- package/package.json +31 -15
- package/src/core/ABRController.ts +38 -36
- package/src/core/CodecUtils.ts +49 -46
- package/src/core/Disposable.ts +4 -4
- package/src/core/ErrorClassifier.ts +499 -0
- package/src/core/EventEmitter.ts +1 -1
- package/src/core/GatewayClient.ts +41 -39
- package/src/core/InteractionController.ts +89 -82
- package/src/core/LiveDurationProxy.ts +14 -15
- package/src/core/MetaTrackManager.ts +73 -65
- package/src/core/MistReporter.ts +72 -45
- package/src/core/MistSignaling.ts +59 -56
- package/src/core/PlayerController.ts +542 -384
- package/src/core/PlayerInterface.ts +192 -59
- package/src/core/PlayerManager.ts +354 -164
- package/src/core/PlayerRegistry.ts +238 -87
- package/src/core/QualityMonitor.ts +38 -31
- package/src/core/ScreenWakeLockManager.ts +8 -9
- package/src/core/SeekingUtils.ts +31 -22
- package/src/core/StreamStateClient.ts +74 -68
- package/src/core/SubtitleManager.ts +24 -22
- package/src/core/TelemetryReporter.ts +38 -32
- package/src/core/TimeFormat.ts +13 -17
- package/src/core/TimerManager.ts +24 -8
- package/src/core/UrlUtils.ts +20 -17
- package/src/core/detector.ts +44 -44
- package/src/core/index.ts +57 -48
- package/src/core/scorer.ts +136 -141
- package/src/core/selector.ts +2 -6
- package/src/global.d.ts +1 -1
- package/src/index.ts +56 -36
- package/src/players/DashJsPlayer.ts +164 -115
- package/src/players/HlsJsPlayer.ts +132 -78
- package/src/players/MewsWsPlayer/SourceBufferManager.ts +41 -36
- package/src/players/MewsWsPlayer/WebSocketManager.ts +9 -9
- package/src/players/MewsWsPlayer/index.ts +192 -152
- package/src/players/MewsWsPlayer/types.ts +21 -21
- package/src/players/MistPlayer.ts +45 -26
- package/src/players/MistWebRTCPlayer/index.ts +175 -129
- package/src/players/NativePlayer.ts +203 -143
- package/src/players/VideoJsPlayer.ts +170 -118
- package/src/players/WebCodecsPlayer/JitterBuffer.ts +6 -7
- package/src/players/WebCodecsPlayer/LatencyProfiles.ts +43 -43
- package/src/players/WebCodecsPlayer/RawChunkParser.ts +10 -10
- package/src/players/WebCodecsPlayer/SyncController.ts +45 -53
- package/src/players/WebCodecsPlayer/WebSocketController.ts +66 -68
- package/src/players/WebCodecsPlayer/index.ts +265 -223
- package/src/players/WebCodecsPlayer/polyfills/MediaStreamTrackGenerator.ts +12 -17
- package/src/players/WebCodecsPlayer/types.ts +56 -56
- package/src/players/WebCodecsPlayer/worker/decoder.worker.ts +238 -182
- package/src/players/WebCodecsPlayer/worker/types.ts +31 -31
- package/src/players/index.ts +5 -16
- package/src/styles/animations.css +2 -1
- package/src/styles/player.css +185 -42
- package/src/styles/tailwind.css +473 -159
- package/src/types.ts +43 -43
- package/src/vanilla/FrameWorksPlayer.ts +26 -14
- package/src/vanilla/index.ts +4 -4
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
let stylesInjected = false;
|
|
4
|
+
const STYLE_URL = "player.css";
|
|
5
|
+
/**
|
|
6
|
+
* Ensures the compiled player stylesheet is imported once. When bundling with
|
|
7
|
+
* tools that respect package `style` fields, simply importing the module is enough.
|
|
8
|
+
* For host environments that do not, calling this helper will inject a link tag.
|
|
9
|
+
*/
|
|
10
|
+
function ensurePlayerStyles() {
|
|
11
|
+
if (typeof document === "undefined")
|
|
12
|
+
return;
|
|
13
|
+
if (stylesInjected)
|
|
14
|
+
return;
|
|
15
|
+
const existing = document.querySelector('link[data-fw-player-style="true"]');
|
|
16
|
+
if (existing) {
|
|
17
|
+
stylesInjected = true;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const link = document.createElement("link");
|
|
21
|
+
link.rel = "stylesheet";
|
|
22
|
+
link.href = getStylesheetUrl();
|
|
23
|
+
link.setAttribute("data-fw-player-style", "true");
|
|
24
|
+
document.head.appendChild(link);
|
|
25
|
+
stylesInjected = true;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* For SSR-first apps, inject the CSS manually and mark it as applied.
|
|
29
|
+
*/
|
|
30
|
+
function injectPlayerStyles(href) {
|
|
31
|
+
if (typeof document === "undefined")
|
|
32
|
+
return;
|
|
33
|
+
stylesInjected = true;
|
|
34
|
+
const link = document.createElement("link");
|
|
35
|
+
link.rel = "stylesheet";
|
|
36
|
+
link.href = href ?? getStylesheetUrl();
|
|
37
|
+
link.setAttribute("data-fw-player-style", "true");
|
|
38
|
+
document.head.appendChild(link);
|
|
39
|
+
}
|
|
40
|
+
function getStylesheetUrl() {
|
|
41
|
+
const current = typeof document !== "undefined" ? document.currentScript : null;
|
|
42
|
+
const src = current && "src" in current ? current.src : undefined;
|
|
43
|
+
if (!src)
|
|
44
|
+
return STYLE_URL;
|
|
45
|
+
try {
|
|
46
|
+
const url = new URL(src);
|
|
47
|
+
url.pathname = url.pathname.replace(/\/[^/]*$/, `/${STYLE_URL}`);
|
|
48
|
+
return url.toString();
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return STYLE_URL;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
exports.ensurePlayerStyles = ensurePlayerStyles;
|
|
56
|
+
exports.injectPlayerStyles = injectPlayerStyles;
|
|
57
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/styles/index.ts"],"sourcesContent":["let stylesInjected = false;\nconst STYLE_URL = \"player.css\";\n\n/**\n * Ensures the compiled player stylesheet is imported once. When bundling with\n * tools that respect package `style` fields, simply importing the module is enough.\n * For host environments that do not, calling this helper will inject a link tag.\n */\nexport function ensurePlayerStyles(): void {\n if (typeof document === \"undefined\") return;\n if (stylesInjected) return;\n const existing = document.querySelector<HTMLLinkElement>('link[data-fw-player-style=\"true\"]');\n if (existing) {\n stylesInjected = true;\n return;\n }\n\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = getStylesheetUrl();\n link.setAttribute(\"data-fw-player-style\", \"true\");\n document.head.appendChild(link);\n stylesInjected = true;\n}\n\n/**\n * For SSR-first apps, inject the CSS manually and mark it as applied.\n */\nexport function injectPlayerStyles(href?: string): void {\n if (typeof document === \"undefined\") return;\n stylesInjected = true;\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = href ?? getStylesheetUrl();\n link.setAttribute(\"data-fw-player-style\", \"true\");\n document.head.appendChild(link);\n}\n\nfunction getStylesheetUrl(): string {\n const current = typeof document !== \"undefined\" ? document.currentScript : null;\n const src = current && \"src\" in current ? (current as HTMLScriptElement).src : undefined;\n if (!src) return STYLE_URL;\n try {\n const url = new URL(src);\n url.pathname = url.pathname.replace(/\\/[^/]*$/, `/${STYLE_URL}`);\n return url.toString();\n } catch {\n return STYLE_URL;\n }\n}\n\nexport default ensurePlayerStyles;\n"],"names":[],"mappings":";;AAAA,IAAI,cAAc,GAAG,KAAK;AAC1B,MAAM,SAAS,GAAG,YAAY;AAE9B;;;;AAIG;SACa,kBAAkB,GAAA;IAChC,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE;AACrC,IAAA,IAAI,cAAc;QAAE;IACpB,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAkB,mCAAmC,CAAC;IAC7F,IAAI,QAAQ,EAAE;QACZ,cAAc,GAAG,IAAI;QACrB;IACF;IAEA,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,IAAA,IAAI,CAAC,GAAG,GAAG,YAAY;AACvB,IAAA,IAAI,CAAC,IAAI,GAAG,gBAAgB,EAAE;AAC9B,IAAA,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,MAAM,CAAC;AACjD,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,cAAc,GAAG,IAAI;AACvB;AAEA;;AAEG;AACG,SAAU,kBAAkB,CAAC,IAAa,EAAA;IAC9C,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE;IACrC,cAAc,GAAG,IAAI;IACrB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,IAAA,IAAI,CAAC,GAAG,GAAG,YAAY;AACvB,IAAA,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,gBAAgB,EAAE;AACtC,IAAA,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,MAAM,CAAC;AACjD,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACjC;AAEA,SAAS,gBAAgB,GAAA;AACvB,IAAA,MAAM,OAAO,GAAG,OAAO,QAAQ,KAAK,WAAW,GAAG,QAAQ,CAAC,aAAa,GAAG,IAAI;AAC/E,IAAA,MAAM,GAAG,GAAG,OAAO,IAAI,KAAK,IAAI,OAAO,GAAI,OAA6B,CAAC,GAAG,GAAG,SAAS;AACxF,IAAA,IAAI,CAAC,GAAG;AAAE,QAAA,OAAO,SAAS;AAC1B,IAAA,IAAI;AACF,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AACxB,QAAA,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAC;AAChE,QAAA,OAAO,GAAG,CAAC,QAAQ,EAAE;IACvB;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,SAAS;IAClB;AACF;;;;;"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var PlayerController = require('../core/PlayerController.js');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* FrameWorksPlayer.ts
|
|
9
|
+
*
|
|
10
|
+
* Vanilla JavaScript wrapper for PlayerController.
|
|
11
|
+
* Use this class in non-React environments (Svelte, Vue, plain HTML, etc.)
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import { FrameWorksPlayer } from '@livepeer-frameworks/player-core/vanilla';
|
|
16
|
+
* import '@livepeer-frameworks/player-core/player.css';
|
|
17
|
+
*
|
|
18
|
+
* const player = new FrameWorksPlayer('#player', {
|
|
19
|
+
* contentId: 'pk_...',
|
|
20
|
+
* contentType: 'live',
|
|
21
|
+
* gatewayUrl: 'https://gateway.example.com/graphql',
|
|
22
|
+
* onStateChange: (state) => console.log('State:', state),
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* // Control playback
|
|
26
|
+
* player.play();
|
|
27
|
+
* player.setVolume(0.5);
|
|
28
|
+
*
|
|
29
|
+
* // Clean up
|
|
30
|
+
* player.destroy();
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
// ============================================================================
|
|
34
|
+
// FrameWorksPlayer Class
|
|
35
|
+
// ============================================================================
|
|
36
|
+
/**
|
|
37
|
+
* Vanilla JavaScript player class.
|
|
38
|
+
*
|
|
39
|
+
* This is a thin wrapper around PlayerController that provides a
|
|
40
|
+
* constructor-based API suitable for non-React frameworks.
|
|
41
|
+
*/
|
|
42
|
+
class FrameWorksPlayer {
|
|
43
|
+
/**
|
|
44
|
+
* Create a new player instance.
|
|
45
|
+
*
|
|
46
|
+
* @param container - DOM element or CSS selector to mount the player
|
|
47
|
+
* @param options - Player options and callbacks
|
|
48
|
+
*/
|
|
49
|
+
constructor(container, options) {
|
|
50
|
+
this.cleanupFns = [];
|
|
51
|
+
this.isDestroyed = false;
|
|
52
|
+
// Resolve container
|
|
53
|
+
if (typeof container === "string") {
|
|
54
|
+
this.container = document.querySelector(container);
|
|
55
|
+
}
|
|
56
|
+
else if (container instanceof HTMLElement) {
|
|
57
|
+
this.container = container;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
throw new Error("Container element not found or invalid");
|
|
61
|
+
}
|
|
62
|
+
if (!this.container) {
|
|
63
|
+
throw new Error("Container element not found");
|
|
64
|
+
}
|
|
65
|
+
// Normalize options (support both new and legacy config formats)
|
|
66
|
+
const normalizedOptions = this.normalizeOptions(options);
|
|
67
|
+
// Create controller config
|
|
68
|
+
const config = {
|
|
69
|
+
contentId: normalizedOptions.contentId,
|
|
70
|
+
contentType: normalizedOptions.contentType,
|
|
71
|
+
endpoints: normalizedOptions.endpoints,
|
|
72
|
+
gatewayUrl: normalizedOptions.gatewayUrl,
|
|
73
|
+
authToken: normalizedOptions.authToken,
|
|
74
|
+
autoplay: normalizedOptions.autoplay ?? true,
|
|
75
|
+
muted: normalizedOptions.muted ?? true,
|
|
76
|
+
controls: normalizedOptions.controls ?? true,
|
|
77
|
+
poster: normalizedOptions.poster,
|
|
78
|
+
debug: normalizedOptions.debug,
|
|
79
|
+
};
|
|
80
|
+
// Create controller
|
|
81
|
+
this.controller = new PlayerController.PlayerController(config);
|
|
82
|
+
// Wire up callbacks
|
|
83
|
+
this.setupCallbacks(normalizedOptions);
|
|
84
|
+
// Auto-attach to container
|
|
85
|
+
this.controller.attach(this.container).catch((err) => {
|
|
86
|
+
console.error("[FrameWorksPlayer] Failed to attach:", err);
|
|
87
|
+
normalizedOptions.onError?.(err instanceof Error ? err.message : String(err));
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
// ============================================================================
|
|
91
|
+
// Playback Control (delegated to controller)
|
|
92
|
+
// ============================================================================
|
|
93
|
+
/** Start playback */
|
|
94
|
+
play() {
|
|
95
|
+
return this.controller.play();
|
|
96
|
+
}
|
|
97
|
+
/** Pause playback */
|
|
98
|
+
pause() {
|
|
99
|
+
this.controller.pause();
|
|
100
|
+
}
|
|
101
|
+
/** Seek to time in seconds */
|
|
102
|
+
seek(time) {
|
|
103
|
+
this.controller.seek(time);
|
|
104
|
+
}
|
|
105
|
+
/** Set volume (0-1) */
|
|
106
|
+
setVolume(volume) {
|
|
107
|
+
this.controller.setVolume(volume);
|
|
108
|
+
}
|
|
109
|
+
/** Set muted state */
|
|
110
|
+
setMuted(muted) {
|
|
111
|
+
this.controller.setMuted(muted);
|
|
112
|
+
}
|
|
113
|
+
/** Set playback rate */
|
|
114
|
+
setPlaybackRate(rate) {
|
|
115
|
+
this.controller.setPlaybackRate(rate);
|
|
116
|
+
}
|
|
117
|
+
/** Jump to live edge (for live streams) */
|
|
118
|
+
jumpToLive() {
|
|
119
|
+
this.controller.jumpToLive();
|
|
120
|
+
}
|
|
121
|
+
/** Request fullscreen */
|
|
122
|
+
requestFullscreen() {
|
|
123
|
+
return this.controller.requestFullscreen();
|
|
124
|
+
}
|
|
125
|
+
/** Request Picture-in-Picture */
|
|
126
|
+
requestPiP() {
|
|
127
|
+
return this.controller.requestPiP();
|
|
128
|
+
}
|
|
129
|
+
// ============================================================================
|
|
130
|
+
// State Getters (delegated to controller)
|
|
131
|
+
// ============================================================================
|
|
132
|
+
/** Get current player state */
|
|
133
|
+
getState() {
|
|
134
|
+
return this.controller.getState();
|
|
135
|
+
}
|
|
136
|
+
/** Get current stream state (for live streams) */
|
|
137
|
+
getStreamState() {
|
|
138
|
+
return this.controller.getStreamState();
|
|
139
|
+
}
|
|
140
|
+
/** Get video element (null if not ready) */
|
|
141
|
+
getVideoElement() {
|
|
142
|
+
return this.controller.getVideoElement();
|
|
143
|
+
}
|
|
144
|
+
/** Check if player is ready */
|
|
145
|
+
isReady() {
|
|
146
|
+
return this.controller.isReady();
|
|
147
|
+
}
|
|
148
|
+
/** Get current time in seconds */
|
|
149
|
+
getCurrentTime() {
|
|
150
|
+
return this.controller.getCurrentTime();
|
|
151
|
+
}
|
|
152
|
+
/** Get duration in seconds */
|
|
153
|
+
getDuration() {
|
|
154
|
+
return this.controller.getDuration();
|
|
155
|
+
}
|
|
156
|
+
/** Check if paused */
|
|
157
|
+
isPaused() {
|
|
158
|
+
return this.controller.isPaused();
|
|
159
|
+
}
|
|
160
|
+
/** Check if muted */
|
|
161
|
+
isMuted() {
|
|
162
|
+
return this.controller.isMuted();
|
|
163
|
+
}
|
|
164
|
+
// ============================================================================
|
|
165
|
+
// Advanced Control
|
|
166
|
+
// ============================================================================
|
|
167
|
+
/** Retry playback after error */
|
|
168
|
+
retry() {
|
|
169
|
+
return this.controller.retry();
|
|
170
|
+
}
|
|
171
|
+
/** Get content metadata (title, description, duration, viewers, etc.) */
|
|
172
|
+
getMetadata() {
|
|
173
|
+
return this.controller.getMetadata();
|
|
174
|
+
}
|
|
175
|
+
/** Get playback statistics */
|
|
176
|
+
getStats() {
|
|
177
|
+
return this.controller.getStats();
|
|
178
|
+
}
|
|
179
|
+
/** Get current latency (for live streams) */
|
|
180
|
+
getLatency() {
|
|
181
|
+
return this.controller.getLatency();
|
|
182
|
+
}
|
|
183
|
+
// ============================================================================
|
|
184
|
+
// Event Subscription
|
|
185
|
+
// ============================================================================
|
|
186
|
+
/**
|
|
187
|
+
* Subscribe to a player event.
|
|
188
|
+
* @param event - Event name
|
|
189
|
+
* @param listener - Callback function
|
|
190
|
+
* @returns Unsubscribe function
|
|
191
|
+
*/
|
|
192
|
+
on(event, listener) {
|
|
193
|
+
return this.controller.on(event, listener);
|
|
194
|
+
}
|
|
195
|
+
// ============================================================================
|
|
196
|
+
// Cleanup
|
|
197
|
+
// ============================================================================
|
|
198
|
+
/** Destroy the player and clean up resources */
|
|
199
|
+
destroy() {
|
|
200
|
+
if (this.isDestroyed)
|
|
201
|
+
return;
|
|
202
|
+
this.cleanupFns.forEach((fn) => {
|
|
203
|
+
try {
|
|
204
|
+
fn();
|
|
205
|
+
}
|
|
206
|
+
catch { }
|
|
207
|
+
});
|
|
208
|
+
this.cleanupFns = [];
|
|
209
|
+
this.controller.destroy();
|
|
210
|
+
this.isDestroyed = true;
|
|
211
|
+
}
|
|
212
|
+
// ============================================================================
|
|
213
|
+
// Private Methods
|
|
214
|
+
// ============================================================================
|
|
215
|
+
normalizeOptions(options) {
|
|
216
|
+
// Check if it's legacy format (has nested `options` property)
|
|
217
|
+
if ("options" in options && typeof options.options === "object") {
|
|
218
|
+
const legacy = options;
|
|
219
|
+
return {
|
|
220
|
+
contentId: legacy.contentId,
|
|
221
|
+
contentType: legacy.contentType,
|
|
222
|
+
poster: legacy.thumbnailUrl || undefined,
|
|
223
|
+
gatewayUrl: legacy.options?.gatewayUrl,
|
|
224
|
+
authToken: legacy.options?.authToken,
|
|
225
|
+
autoplay: legacy.options?.autoplay,
|
|
226
|
+
muted: legacy.options?.muted,
|
|
227
|
+
controls: legacy.options?.controls,
|
|
228
|
+
debug: legacy.options?.debug,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
return options;
|
|
232
|
+
}
|
|
233
|
+
setupCallbacks(options) {
|
|
234
|
+
if (options.onStateChange) {
|
|
235
|
+
const unsub = this.controller.on("stateChange", ({ state, context }) => {
|
|
236
|
+
options.onStateChange(state, context);
|
|
237
|
+
});
|
|
238
|
+
this.cleanupFns.push(unsub);
|
|
239
|
+
}
|
|
240
|
+
if (options.onStreamStateChange) {
|
|
241
|
+
const unsub = this.controller.on("streamStateChange", ({ state }) => {
|
|
242
|
+
options.onStreamStateChange(state);
|
|
243
|
+
});
|
|
244
|
+
this.cleanupFns.push(unsub);
|
|
245
|
+
}
|
|
246
|
+
if (options.onTimeUpdate) {
|
|
247
|
+
const unsub = this.controller.on("timeUpdate", ({ currentTime, duration }) => {
|
|
248
|
+
options.onTimeUpdate(currentTime, duration);
|
|
249
|
+
});
|
|
250
|
+
this.cleanupFns.push(unsub);
|
|
251
|
+
}
|
|
252
|
+
if (options.onError) {
|
|
253
|
+
const unsub = this.controller.on("error", ({ error }) => {
|
|
254
|
+
options.onError(error);
|
|
255
|
+
});
|
|
256
|
+
this.cleanupFns.push(unsub);
|
|
257
|
+
}
|
|
258
|
+
if (options.onReady) {
|
|
259
|
+
const unsub = this.controller.on("ready", ({ videoElement }) => {
|
|
260
|
+
options.onReady(videoElement);
|
|
261
|
+
});
|
|
262
|
+
this.cleanupFns.push(unsub);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
exports.FrameWorksPlayer = FrameWorksPlayer;
|
|
268
|
+
exports.default = FrameWorksPlayer;
|
|
269
|
+
//# sourceMappingURL=FrameWorksPlayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FrameWorksPlayer.js","sources":["../../../../src/vanilla/FrameWorksPlayer.ts"],"sourcesContent":["/**\n * FrameWorksPlayer.ts\n *\n * Vanilla JavaScript wrapper for PlayerController.\n * Use this class in non-React environments (Svelte, Vue, plain HTML, etc.)\n *\n * @example\n * ```typescript\n * import { FrameWorksPlayer } from '@livepeer-frameworks/player-core/vanilla';\n * import '@livepeer-frameworks/player-core/player.css';\n *\n * const player = new FrameWorksPlayer('#player', {\n * contentId: 'pk_...',\n * contentType: 'live',\n * gatewayUrl: 'https://gateway.example.com/graphql',\n * onStateChange: (state) => console.log('State:', state),\n * });\n *\n * // Control playback\n * player.play();\n * player.setVolume(0.5);\n *\n * // Clean up\n * player.destroy();\n * ```\n */\n\nimport type { PlayerControllerConfig, PlayerControllerEvents } from \"../core/PlayerController\";\nimport { PlayerController } from \"../core/PlayerController\";\nimport type {\n PlayerState,\n PlayerStateContext,\n StreamState,\n ContentEndpoints,\n ContentType,\n} from \"../types\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface FrameWorksPlayerOptions {\n /** Content identifier (stream name) */\n contentId: string;\n /** Content type */\n contentType?: ContentType;\n\n /** Pre-resolved endpoints (skip gateway) */\n endpoints?: ContentEndpoints;\n\n /** Gateway URL (required if endpoints not provided) */\n gatewayUrl?: string;\n /** Auth token for private streams */\n authToken?: string;\n\n /** Playback options */\n autoplay?: boolean;\n muted?: boolean;\n controls?: boolean;\n poster?: string;\n\n /** Debug logging */\n debug?: boolean;\n\n // Event callbacks\n /** Called when player state changes */\n onStateChange?: (state: PlayerState, context?: PlayerStateContext) => void;\n /** Called when stream state changes (for live streams) */\n onStreamStateChange?: (state: StreamState) => void;\n /** Called on time update during playback */\n onTimeUpdate?: (currentTime: number, duration: number) => void;\n /** Called on error */\n onError?: (error: string) => void;\n /** Called when player is ready */\n onReady?: (videoElement: HTMLVideoElement) => void;\n}\n\n// Legacy config format for backward compatibility with Svelte wrapper\ninterface LegacyConfig {\n contentId: string;\n contentType?: ContentType;\n thumbnailUrl?: string | null;\n options?: {\n gatewayUrl?: string;\n autoplay?: boolean;\n muted?: boolean;\n controls?: boolean;\n debug?: boolean;\n authToken?: string;\n };\n}\n\n// ============================================================================\n// FrameWorksPlayer Class\n// ============================================================================\n\n/**\n * Vanilla JavaScript player class.\n *\n * This is a thin wrapper around PlayerController that provides a\n * constructor-based API suitable for non-React frameworks.\n */\nexport class FrameWorksPlayer {\n private controller: PlayerController;\n private container: HTMLElement;\n private cleanupFns: Array<() => void> = [];\n private isDestroyed: boolean = false;\n\n /**\n * Create a new player instance.\n *\n * @param container - DOM element or CSS selector to mount the player\n * @param options - Player options and callbacks\n */\n constructor(\n container: HTMLElement | string | null,\n options: FrameWorksPlayerOptions | LegacyConfig\n ) {\n // Resolve container\n if (typeof container === \"string\") {\n this.container = document.querySelector(container) as HTMLElement;\n } else if (container instanceof HTMLElement) {\n this.container = container;\n } else {\n throw new Error(\"Container element not found or invalid\");\n }\n\n if (!this.container) {\n throw new Error(\"Container element not found\");\n }\n\n // Normalize options (support both new and legacy config formats)\n const normalizedOptions = this.normalizeOptions(options);\n\n // Create controller config\n const config: PlayerControllerConfig = {\n contentId: normalizedOptions.contentId,\n contentType: normalizedOptions.contentType,\n endpoints: normalizedOptions.endpoints,\n gatewayUrl: normalizedOptions.gatewayUrl,\n authToken: normalizedOptions.authToken,\n autoplay: normalizedOptions.autoplay ?? true,\n muted: normalizedOptions.muted ?? true,\n controls: normalizedOptions.controls ?? true,\n poster: normalizedOptions.poster,\n debug: normalizedOptions.debug,\n };\n\n // Create controller\n this.controller = new PlayerController(config);\n\n // Wire up callbacks\n this.setupCallbacks(normalizedOptions);\n\n // Auto-attach to container\n this.controller.attach(this.container).catch((err) => {\n console.error(\"[FrameWorksPlayer] Failed to attach:\", err);\n normalizedOptions.onError?.(err instanceof Error ? err.message : String(err));\n });\n }\n\n // ============================================================================\n // Playback Control (delegated to controller)\n // ============================================================================\n\n /** Start playback */\n play(): Promise<void> {\n return this.controller.play();\n }\n\n /** Pause playback */\n pause(): void {\n this.controller.pause();\n }\n\n /** Seek to time in seconds */\n seek(time: number): void {\n this.controller.seek(time);\n }\n\n /** Set volume (0-1) */\n setVolume(volume: number): void {\n this.controller.setVolume(volume);\n }\n\n /** Set muted state */\n setMuted(muted: boolean): void {\n this.controller.setMuted(muted);\n }\n\n /** Set playback rate */\n setPlaybackRate(rate: number): void {\n this.controller.setPlaybackRate(rate);\n }\n\n /** Jump to live edge (for live streams) */\n jumpToLive(): void {\n this.controller.jumpToLive();\n }\n\n /** Request fullscreen */\n requestFullscreen(): Promise<void> {\n return this.controller.requestFullscreen();\n }\n\n /** Request Picture-in-Picture */\n requestPiP(): Promise<void> {\n return this.controller.requestPiP();\n }\n\n // ============================================================================\n // State Getters (delegated to controller)\n // ============================================================================\n\n /** Get current player state */\n getState(): PlayerState {\n return this.controller.getState();\n }\n\n /** Get current stream state (for live streams) */\n getStreamState(): StreamState | null {\n return this.controller.getStreamState();\n }\n\n /** Get video element (null if not ready) */\n getVideoElement(): HTMLVideoElement | null {\n return this.controller.getVideoElement();\n }\n\n /** Check if player is ready */\n isReady(): boolean {\n return this.controller.isReady();\n }\n\n /** Get current time in seconds */\n getCurrentTime(): number {\n return this.controller.getCurrentTime();\n }\n\n /** Get duration in seconds */\n getDuration(): number {\n return this.controller.getDuration();\n }\n\n /** Check if paused */\n isPaused(): boolean {\n return this.controller.isPaused();\n }\n\n /** Check if muted */\n isMuted(): boolean {\n return this.controller.isMuted();\n }\n\n // ============================================================================\n // Advanced Control\n // ============================================================================\n\n /** Retry playback after error */\n retry(): Promise<void> {\n return this.controller.retry();\n }\n\n /** Get content metadata (title, description, duration, viewers, etc.) */\n getMetadata() {\n return this.controller.getMetadata();\n }\n\n /** Get playback statistics */\n getStats(): Promise<unknown> {\n return this.controller.getStats();\n }\n\n /** Get current latency (for live streams) */\n getLatency(): Promise<unknown> {\n return this.controller.getLatency();\n }\n\n // ============================================================================\n // Event Subscription\n // ============================================================================\n\n /**\n * Subscribe to a player event.\n * @param event - Event name\n * @param listener - Callback function\n * @returns Unsubscribe function\n */\n on<K extends keyof PlayerControllerEvents>(\n event: K,\n listener: (data: PlayerControllerEvents[K]) => void\n ): () => void {\n return this.controller.on(event, listener);\n }\n\n // ============================================================================\n // Cleanup\n // ============================================================================\n\n /** Destroy the player and clean up resources */\n destroy(): void {\n if (this.isDestroyed) return;\n\n this.cleanupFns.forEach((fn) => {\n try {\n fn();\n } catch {}\n });\n this.cleanupFns = [];\n\n this.controller.destroy();\n this.isDestroyed = true;\n }\n\n // ============================================================================\n // Private Methods\n // ============================================================================\n\n private normalizeOptions(\n options: FrameWorksPlayerOptions | LegacyConfig\n ): FrameWorksPlayerOptions {\n // Check if it's legacy format (has nested `options` property)\n if (\"options\" in options && typeof options.options === \"object\") {\n const legacy = options as LegacyConfig;\n return {\n contentId: legacy.contentId,\n contentType: legacy.contentType,\n poster: legacy.thumbnailUrl || undefined,\n gatewayUrl: legacy.options?.gatewayUrl,\n authToken: legacy.options?.authToken,\n autoplay: legacy.options?.autoplay,\n muted: legacy.options?.muted,\n controls: legacy.options?.controls,\n debug: legacy.options?.debug,\n };\n }\n\n return options as FrameWorksPlayerOptions;\n }\n\n private setupCallbacks(options: FrameWorksPlayerOptions): void {\n if (options.onStateChange) {\n const unsub = this.controller.on(\"stateChange\", ({ state, context }) => {\n options.onStateChange!(state, context);\n });\n this.cleanupFns.push(unsub);\n }\n\n if (options.onStreamStateChange) {\n const unsub = this.controller.on(\"streamStateChange\", ({ state }) => {\n options.onStreamStateChange!(state);\n });\n this.cleanupFns.push(unsub);\n }\n\n if (options.onTimeUpdate) {\n const unsub = this.controller.on(\"timeUpdate\", ({ currentTime, duration }) => {\n options.onTimeUpdate!(currentTime, duration);\n });\n this.cleanupFns.push(unsub);\n }\n\n if (options.onError) {\n const unsub = this.controller.on(\"error\", ({ error }) => {\n options.onError!(error);\n });\n this.cleanupFns.push(unsub);\n }\n\n if (options.onReady) {\n const unsub = this.controller.on(\"ready\", ({ videoElement }) => {\n options.onReady!(videoElement);\n });\n this.cleanupFns.push(unsub);\n }\n }\n}\n\nexport default FrameWorksPlayer;\n"],"names":["PlayerController"],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var FrameWorksPlayer = require('./vanilla/FrameWorksPlayer.js');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
exports.FrameWorksPlayer = FrameWorksPlayer.FrameWorksPlayer;
|
|
10
|
+
exports.default = FrameWorksPlayer.FrameWorksPlayer;
|
|
11
|
+
//# sourceMappingURL=vanilla.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vanilla.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
|