@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
package/dist/player.css
CHANGED
|
@@ -16,25 +16,25 @@
|
|
|
16
16
|
*/
|
|
17
17
|
.fw-player-surface {
|
|
18
18
|
/* Tokyo Night color palette */
|
|
19
|
-
--tn-bg-dark: 235 21% 11%;
|
|
20
|
-
--tn-bg: 233 23% 17%;
|
|
21
|
-
--tn-bg-highlight: 233 23% 21%;
|
|
22
|
-
--tn-bg-visual: 232 27% 25%;
|
|
19
|
+
--tn-bg-dark: 235 21% 11%; /* #1a1b26 - Darkest (slab backgrounds) */
|
|
20
|
+
--tn-bg: 233 23% 17%; /* #24283b - Main background */
|
|
21
|
+
--tn-bg-highlight: 233 23% 21%; /* #292e42 - Elevated surfaces */
|
|
22
|
+
--tn-bg-visual: 232 27% 25%; /* #33395e - Selection/active states */
|
|
23
23
|
|
|
24
24
|
/* Text hierarchy */
|
|
25
|
-
--tn-fg: 223 27% 76%;
|
|
26
|
-
--tn-fg-bright: 220 13% 91%;
|
|
27
|
-
--tn-fg-dark: 224 16% 53%;
|
|
28
|
-
--tn-fg-gutter: 228 15% 45%;
|
|
25
|
+
--tn-fg: 223 27% 76%; /* #a9b1d6 - Primary text */
|
|
26
|
+
--tn-fg-bright: 220 13% 91%; /* #e2e4ea - Bright/highlighted text */
|
|
27
|
+
--tn-fg-dark: 224 16% 53%; /* #787c99 - Secondary text (muted) */
|
|
28
|
+
--tn-fg-gutter: 228 15% 45%; /* #5a607f - Borders, seams */
|
|
29
29
|
|
|
30
30
|
/* Accent colors (semantic) */
|
|
31
|
-
--tn-blue: 218 79% 73%;
|
|
32
|
-
--tn-green: 95 53% 55%;
|
|
33
|
-
--tn-red: 348 74% 64%;
|
|
34
|
-
--tn-yellow: 35 79% 64%;
|
|
35
|
-
--tn-purple: 267 82% 77%;
|
|
36
|
-
--tn-cyan: 178 64% 63%;
|
|
37
|
-
--tn-teal: 162 66% 62%;
|
|
31
|
+
--tn-blue: 218 79% 73%; /* #7aa2f7 - Primary actions */
|
|
32
|
+
--tn-green: 95 53% 55%; /* #9ece6a - Success */
|
|
33
|
+
--tn-red: 348 74% 64%; /* #f7768e - Destructive, live */
|
|
34
|
+
--tn-yellow: 35 79% 64%; /* #e0af68 - Warnings */
|
|
35
|
+
--tn-purple: 267 82% 77%; /* #bb9af7 - Secondary accent */
|
|
36
|
+
--tn-cyan: 178 64% 63%; /* #7dcfff - Info */
|
|
37
|
+
--tn-teal: 162 66% 62%; /* #73daca - Terminal green */
|
|
38
38
|
|
|
39
39
|
/* Player-internal variables (not shared with host) */
|
|
40
40
|
--fw-background: var(--tn-bg);
|
|
@@ -74,7 +74,8 @@
|
|
|
74
74
|
ANIMATIONS
|
|
75
75
|
===================================================== */
|
|
76
76
|
@keyframes float {
|
|
77
|
-
0%,
|
|
77
|
+
0%,
|
|
78
|
+
100% {
|
|
78
79
|
transform: translateY(0px) scale(1);
|
|
79
80
|
}
|
|
80
81
|
50% {
|
|
@@ -161,6 +162,7 @@
|
|
|
161
162
|
background: var(--fw-controls-bg);
|
|
162
163
|
border-top: 1px solid var(--fw-seam);
|
|
163
164
|
backdrop-filter: blur(8px);
|
|
165
|
+
pointer-events: auto;
|
|
164
166
|
}
|
|
165
167
|
|
|
166
168
|
/* Control group - seamed sections within bar */
|
|
@@ -183,7 +185,9 @@
|
|
|
183
185
|
border-radius: 0;
|
|
184
186
|
background: transparent;
|
|
185
187
|
color: hsl(var(--tn-fg));
|
|
186
|
-
transition:
|
|
188
|
+
transition:
|
|
189
|
+
background-color 0.15s,
|
|
190
|
+
color 0.15s;
|
|
187
191
|
cursor: pointer;
|
|
188
192
|
border: none;
|
|
189
193
|
}
|
|
@@ -201,10 +205,18 @@
|
|
|
201
205
|
}
|
|
202
206
|
|
|
203
207
|
/* Status indicators */
|
|
204
|
-
.fw-status-online {
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
.fw-status-
|
|
208
|
+
.fw-status-online {
|
|
209
|
+
color: hsl(var(--tn-green));
|
|
210
|
+
}
|
|
211
|
+
.fw-status-offline {
|
|
212
|
+
color: hsl(var(--tn-red));
|
|
213
|
+
}
|
|
214
|
+
.fw-status-warning {
|
|
215
|
+
color: hsl(var(--tn-yellow));
|
|
216
|
+
}
|
|
217
|
+
.fw-status-info {
|
|
218
|
+
color: hsl(var(--tn-cyan));
|
|
219
|
+
}
|
|
208
220
|
|
|
209
221
|
/* =====================================================
|
|
210
222
|
PLAYER CONTAINER STYLES (Slab-based)
|
|
@@ -215,7 +227,7 @@
|
|
|
215
227
|
height: 100%;
|
|
216
228
|
width: 100%;
|
|
217
229
|
overflow: hidden;
|
|
218
|
-
border-radius: 0;
|
|
230
|
+
border-radius: 0; /* Slabs don't have rounded corners */
|
|
219
231
|
background-color: hsl(var(--tn-bg-dark));
|
|
220
232
|
border: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
|
|
221
233
|
}
|
|
@@ -317,7 +329,9 @@
|
|
|
317
329
|
overflow-y: auto;
|
|
318
330
|
background: hsl(var(--tn-bg-dark));
|
|
319
331
|
border: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
|
|
320
|
-
box-shadow:
|
|
332
|
+
box-shadow:
|
|
333
|
+
0 10px 15px -3px rgb(0 0 0 / 0.1),
|
|
334
|
+
0 4px 6px -4px rgb(0 0 0 / 0.1);
|
|
321
335
|
border-radius: 0.25rem;
|
|
322
336
|
z-index: 50;
|
|
323
337
|
}
|
|
@@ -358,7 +372,9 @@
|
|
|
358
372
|
color: hsl(var(--tn-fg));
|
|
359
373
|
border: none;
|
|
360
374
|
cursor: pointer;
|
|
361
|
-
transition:
|
|
375
|
+
transition:
|
|
376
|
+
background-color 0.15s,
|
|
377
|
+
color 0.15s;
|
|
362
378
|
}
|
|
363
379
|
|
|
364
380
|
.fw-settings-btn:hover {
|
|
@@ -413,7 +429,9 @@
|
|
|
413
429
|
background: hsl(var(--tn-bg-dark));
|
|
414
430
|
padding: 0;
|
|
415
431
|
color: hsl(var(--tn-fg));
|
|
416
|
-
box-shadow:
|
|
432
|
+
box-shadow:
|
|
433
|
+
0 10px 15px -3px rgb(0 0 0 / 0.1),
|
|
434
|
+
0 4px 6px -4px rgb(0 0 0 / 0.1);
|
|
417
435
|
}
|
|
418
436
|
|
|
419
437
|
.fw-context-menu-item {
|
|
@@ -426,7 +444,9 @@
|
|
|
426
444
|
font-size: 0.875rem;
|
|
427
445
|
outline: none;
|
|
428
446
|
color: hsl(var(--tn-fg));
|
|
429
|
-
transition:
|
|
447
|
+
transition:
|
|
448
|
+
background-color 0.15s,
|
|
449
|
+
color 0.15s;
|
|
430
450
|
}
|
|
431
451
|
|
|
432
452
|
.fw-context-menu-item:hover,
|
|
@@ -467,7 +487,9 @@
|
|
|
467
487
|
font-size: 0.875rem;
|
|
468
488
|
outline: none;
|
|
469
489
|
color: hsl(var(--tn-fg));
|
|
470
|
-
transition:
|
|
490
|
+
transition:
|
|
491
|
+
background-color 0.15s,
|
|
492
|
+
color 0.15s;
|
|
471
493
|
}
|
|
472
494
|
|
|
473
495
|
.fw-context-menu-checkbox:hover,
|
|
@@ -496,7 +518,9 @@
|
|
|
496
518
|
font-weight: 700;
|
|
497
519
|
text-transform: uppercase;
|
|
498
520
|
letter-spacing: 0.05em;
|
|
499
|
-
transition:
|
|
521
|
+
transition:
|
|
522
|
+
background-color 0.15s,
|
|
523
|
+
color 0.15s;
|
|
500
524
|
border: none;
|
|
501
525
|
cursor: pointer;
|
|
502
526
|
}
|
|
@@ -517,26 +541,27 @@
|
|
|
517
541
|
color: white;
|
|
518
542
|
}
|
|
519
543
|
|
|
520
|
-
|
|
521
544
|
/* --- Volume Control --- */
|
|
522
545
|
.fw-volume-group {
|
|
523
546
|
display: flex;
|
|
524
547
|
align-items: center;
|
|
525
|
-
border-radius: 0
|
|
526
|
-
transition:
|
|
548
|
+
border-radius: 0;
|
|
549
|
+
transition:
|
|
550
|
+
background-color 0.2s,
|
|
551
|
+
width 0.2s;
|
|
527
552
|
cursor: pointer;
|
|
528
553
|
}
|
|
529
554
|
|
|
530
555
|
.fw-volume-group--expanded {
|
|
531
|
-
background:
|
|
556
|
+
background: hsl(var(--tn-bg-visual) / 0.5);
|
|
532
557
|
}
|
|
533
558
|
|
|
534
559
|
.fw-volume-group:hover {
|
|
535
|
-
background:
|
|
560
|
+
background: hsl(var(--tn-bg-visual) / 0.5);
|
|
536
561
|
}
|
|
537
562
|
|
|
538
563
|
.fw-volume-group--expanded:hover {
|
|
539
|
-
background:
|
|
564
|
+
background: hsl(var(--tn-bg-visual) / 0.5);
|
|
540
565
|
}
|
|
541
566
|
|
|
542
567
|
.fw-volume-group--disabled {
|
|
@@ -565,7 +590,9 @@
|
|
|
565
590
|
display: flex;
|
|
566
591
|
align-items: center;
|
|
567
592
|
overflow: hidden;
|
|
568
|
-
transition:
|
|
593
|
+
transition:
|
|
594
|
+
width 0.2s ease-out,
|
|
595
|
+
opacity 0.2s ease-out;
|
|
569
596
|
}
|
|
570
597
|
|
|
571
598
|
.fw-volume-slider-wrapper--collapsed {
|
|
@@ -579,6 +606,108 @@
|
|
|
579
606
|
opacity: 1;
|
|
580
607
|
}
|
|
581
608
|
|
|
609
|
+
/* --- Slider Component (shared by React/Svelte) --- */
|
|
610
|
+
.fw-slider {
|
|
611
|
+
position: relative;
|
|
612
|
+
display: flex;
|
|
613
|
+
width: 100%;
|
|
614
|
+
height: 1.25rem;
|
|
615
|
+
touch-action: none;
|
|
616
|
+
user-select: none;
|
|
617
|
+
align-items: center;
|
|
618
|
+
cursor: pointer;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
.fw-slider--vertical {
|
|
622
|
+
flex-direction: column;
|
|
623
|
+
width: 1.25rem;
|
|
624
|
+
height: 100%;
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
.fw-slider-track {
|
|
628
|
+
position: absolute;
|
|
629
|
+
left: 0;
|
|
630
|
+
right: 0;
|
|
631
|
+
height: 4px;
|
|
632
|
+
border-radius: 9999px;
|
|
633
|
+
background: hsl(var(--tn-fg-gutter) / 0.4);
|
|
634
|
+
overflow: hidden;
|
|
635
|
+
transition: height 0.15s ease;
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
.fw-slider:hover .fw-slider-track {
|
|
639
|
+
height: 6px;
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
.fw-slider--vertical .fw-slider-track {
|
|
643
|
+
top: 0;
|
|
644
|
+
bottom: 0;
|
|
645
|
+
left: 50%;
|
|
646
|
+
right: auto;
|
|
647
|
+
width: 4px;
|
|
648
|
+
height: auto;
|
|
649
|
+
transform: translateX(-50%);
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
.fw-slider--vertical:hover .fw-slider-track {
|
|
653
|
+
width: 6px;
|
|
654
|
+
height: auto;
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
.fw-slider-range {
|
|
658
|
+
position: absolute;
|
|
659
|
+
height: 100%;
|
|
660
|
+
border-radius: 9999px;
|
|
661
|
+
background: hsl(var(--tn-fg));
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
.fw-slider-range--accent {
|
|
665
|
+
background: hsl(var(--tn-cyan));
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
.fw-slider--vertical .fw-slider-range {
|
|
669
|
+
width: 100%;
|
|
670
|
+
height: auto;
|
|
671
|
+
bottom: 0;
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
.fw-slider-thumb {
|
|
675
|
+
display: block;
|
|
676
|
+
width: 10px;
|
|
677
|
+
height: 10px;
|
|
678
|
+
border-radius: 50%;
|
|
679
|
+
background: hsl(var(--tn-fg));
|
|
680
|
+
border: none;
|
|
681
|
+
box-shadow: 0 2px 4px rgb(0 0 0 / 0.3);
|
|
682
|
+
cursor: pointer;
|
|
683
|
+
transition:
|
|
684
|
+
width 0.15s ease,
|
|
685
|
+
height 0.15s ease,
|
|
686
|
+
box-shadow 0.15s ease;
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
.fw-slider:hover .fw-slider-thumb {
|
|
690
|
+
width: 14px;
|
|
691
|
+
height: 14px;
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
.fw-slider-thumb:focus {
|
|
695
|
+
outline: none;
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
.fw-slider-thumb:focus-visible {
|
|
699
|
+
box-shadow: 0 0 0 2px hsl(var(--tn-fg) / 0.5);
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
.fw-slider-thumb--accent {
|
|
703
|
+
background: hsl(var(--tn-cyan));
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
.fw-slider-thumb[data-disabled] {
|
|
707
|
+
pointer-events: none;
|
|
708
|
+
opacity: 0.5;
|
|
709
|
+
}
|
|
710
|
+
|
|
582
711
|
/* --- Time Display --- */
|
|
583
712
|
.fw-time-display {
|
|
584
713
|
font-family: ui-monospace, monospace;
|
|
@@ -676,7 +805,9 @@
|
|
|
676
805
|
background: hsl(var(--tn-blue));
|
|
677
806
|
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
|
|
678
807
|
transform: translate(-50%, -50%);
|
|
679
|
-
transition:
|
|
808
|
+
transition:
|
|
809
|
+
opacity 0.15s ease,
|
|
810
|
+
transform 0.15s ease;
|
|
680
811
|
opacity: 0;
|
|
681
812
|
pointer-events: none;
|
|
682
813
|
}
|
|
@@ -949,7 +1080,9 @@
|
|
|
949
1080
|
border: none;
|
|
950
1081
|
color: hsl(var(--tn-fg-dark));
|
|
951
1082
|
cursor: pointer;
|
|
952
|
-
transition:
|
|
1083
|
+
transition:
|
|
1084
|
+
background-color 0.15s ease,
|
|
1085
|
+
color 0.15s ease;
|
|
953
1086
|
}
|
|
954
1087
|
|
|
955
1088
|
.fw-error-close:hover {
|
|
@@ -980,7 +1113,9 @@
|
|
|
980
1113
|
background: transparent;
|
|
981
1114
|
border: none;
|
|
982
1115
|
cursor: pointer;
|
|
983
|
-
transition:
|
|
1116
|
+
transition:
|
|
1117
|
+
background-color 0.15s ease,
|
|
1118
|
+
color 0.15s ease;
|
|
984
1119
|
}
|
|
985
1120
|
|
|
986
1121
|
.fw-error-btn:hover {
|
|
@@ -1076,7 +1211,9 @@
|
|
|
1076
1211
|
border-right: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
|
|
1077
1212
|
color: hsl(var(--tn-fg-dark));
|
|
1078
1213
|
cursor: pointer;
|
|
1079
|
-
transition:
|
|
1214
|
+
transition:
|
|
1215
|
+
background-color 0.15s,
|
|
1216
|
+
color 0.15s;
|
|
1080
1217
|
}
|
|
1081
1218
|
|
|
1082
1219
|
.fw-dev-tab:hover {
|
|
@@ -1183,7 +1320,9 @@
|
|
|
1183
1320
|
border: none;
|
|
1184
1321
|
color: hsl(var(--tn-fg-dark));
|
|
1185
1322
|
cursor: pointer;
|
|
1186
|
-
transition:
|
|
1323
|
+
transition:
|
|
1324
|
+
background-color 0.15s,
|
|
1325
|
+
color 0.15s;
|
|
1187
1326
|
}
|
|
1188
1327
|
|
|
1189
1328
|
.fw-dev-mode-btn:hover {
|
|
@@ -1211,7 +1350,9 @@
|
|
|
1211
1350
|
color: hsl(var(--tn-fg));
|
|
1212
1351
|
font-size: 0.75rem;
|
|
1213
1352
|
cursor: pointer;
|
|
1214
|
-
transition:
|
|
1353
|
+
transition:
|
|
1354
|
+
background-color 0.15s,
|
|
1355
|
+
color 0.15s;
|
|
1215
1356
|
}
|
|
1216
1357
|
|
|
1217
1358
|
.fw-dev-action-btn:last-child {
|
|
@@ -1378,7 +1519,9 @@
|
|
|
1378
1519
|
z-index: 50;
|
|
1379
1520
|
background: hsl(var(--tn-bg-dark));
|
|
1380
1521
|
border: 1px solid hsl(var(--tn-fg-gutter));
|
|
1381
|
-
box-shadow:
|
|
1522
|
+
box-shadow:
|
|
1523
|
+
0 4px 6px -1px rgb(0 0 0 / 0.1),
|
|
1524
|
+
0 2px 4px -2px rgb(0 0 0 / 0.1);
|
|
1382
1525
|
padding: 0.5rem;
|
|
1383
1526
|
font-size: 10px;
|
|
1384
1527
|
white-space: nowrap;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type { ABRMode, ABROptions, PlaybackQuality, QualityLevel } from
|
|
1
|
+
import type { ABRMode, ABROptions, PlaybackQuality, QualityLevel } from "../types";
|
|
2
2
|
export interface ABRControllerConfig {
|
|
3
3
|
/** ABR options */
|
|
4
4
|
options?: Partial<ABROptions>;
|
|
5
5
|
/** Callback to get available qualities */
|
|
6
6
|
getQualities: () => QualityLevel[];
|
|
7
7
|
/** Callback to select a quality */
|
|
8
|
-
selectQuality: (id: string |
|
|
8
|
+
selectQuality: (id: string | "auto") => void;
|
|
9
9
|
/** Callback to get current quality */
|
|
10
10
|
getCurrentQuality?: () => QualityLevel | null;
|
|
11
11
|
/** Callback to get bandwidth estimate (bits per second) - typically from player stats */
|
|
@@ -13,7 +13,7 @@ export interface ABRControllerConfig {
|
|
|
13
13
|
/** Debug logging */
|
|
14
14
|
debug?: boolean;
|
|
15
15
|
}
|
|
16
|
-
export type ABRDecision =
|
|
16
|
+
export type ABRDecision = "upgrade" | "downgrade" | "maintain" | "none";
|
|
17
17
|
/**
|
|
18
18
|
* ABRController - Adaptive Bitrate Controller
|
|
19
19
|
*
|
|
@@ -138,7 +138,7 @@ export declare class ABRController {
|
|
|
138
138
|
/**
|
|
139
139
|
* Manually set quality (switches to manual mode temporarily)
|
|
140
140
|
*/
|
|
141
|
-
setQuality(id: string |
|
|
141
|
+
setQuality(id: string | "auto"): void;
|
|
142
142
|
/**
|
|
143
143
|
* Get current ABR mode
|
|
144
144
|
*/
|
|
@@ -45,7 +45,7 @@ export declare function isCodecSupported(codecString: string, containerType?: st
|
|
|
45
45
|
* @param type - Track type to filter ('video' or 'audio')
|
|
46
46
|
* @returns Best supported track or null
|
|
47
47
|
*/
|
|
48
|
-
export declare function getBestSupportedTrack(tracks: TrackInfo[], type:
|
|
48
|
+
export declare function getBestSupportedTrack(tracks: TrackInfo[], type: "video" | "audio"): TrackInfo | null;
|
|
49
49
|
declare const _default: {
|
|
50
50
|
translateCodec: typeof translateCodec;
|
|
51
51
|
isCodecSupported: typeof isCodecSupported;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ErrorClassifier - Centralized error classification and recovery orchestration
|
|
3
|
+
*
|
|
4
|
+
* Implements a 4-tier error handling system:
|
|
5
|
+
* - Tier 1 (TRANSIENT): Silent retry with exponential backoff
|
|
6
|
+
* - Tier 2 (RECOVERABLE): Protocol/player swap with toast notification
|
|
7
|
+
* - Tier 3 (DEGRADED): Quality drop with informational toast
|
|
8
|
+
* - Tier 4 (FATAL): Blocking error modal
|
|
9
|
+
*/
|
|
10
|
+
import { ErrorCode, type ClassifiedError, type ErrorHandlingEvents } from "./PlayerInterface";
|
|
11
|
+
type EventListener<K extends keyof ErrorHandlingEvents> = (data: ErrorHandlingEvents[K]) => void;
|
|
12
|
+
export type RecoveryAction = {
|
|
13
|
+
type: "retry";
|
|
14
|
+
delayMs: number;
|
|
15
|
+
} | {
|
|
16
|
+
type: "swap";
|
|
17
|
+
reason: string;
|
|
18
|
+
} | {
|
|
19
|
+
type: "toast";
|
|
20
|
+
message: string;
|
|
21
|
+
} | {
|
|
22
|
+
type: "fatal";
|
|
23
|
+
error: ClassifiedError;
|
|
24
|
+
};
|
|
25
|
+
export interface ErrorClassifierOptions {
|
|
26
|
+
/** Number of alternative player/protocol combos available */
|
|
27
|
+
alternativesCount?: number;
|
|
28
|
+
/** Enable debug logging */
|
|
29
|
+
debug?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Centralized error classifier that tracks retry state and determines recovery actions.
|
|
33
|
+
*/
|
|
34
|
+
export declare class ErrorClassifier {
|
|
35
|
+
private retryCounts;
|
|
36
|
+
private lastErrorTime;
|
|
37
|
+
private alternativesRemaining;
|
|
38
|
+
private listeners;
|
|
39
|
+
private debug;
|
|
40
|
+
private lastQualityToastTime;
|
|
41
|
+
private static readonly QUALITY_TOAST_DEBOUNCE_MS;
|
|
42
|
+
constructor(options?: ErrorClassifierOptions);
|
|
43
|
+
/**
|
|
44
|
+
* Update the count of remaining alternatives (called after a swap attempt)
|
|
45
|
+
*/
|
|
46
|
+
setAlternativesRemaining(count: number): void;
|
|
47
|
+
/**
|
|
48
|
+
* Reset retry counts (call when playback successfully resumes)
|
|
49
|
+
*/
|
|
50
|
+
reset(): void;
|
|
51
|
+
/**
|
|
52
|
+
* Classify a raw error and determine the appropriate recovery action.
|
|
53
|
+
*
|
|
54
|
+
* @param code - Error code identifying the error type
|
|
55
|
+
* @param originalError - Original error object or message
|
|
56
|
+
* @returns The recovery action to take
|
|
57
|
+
*/
|
|
58
|
+
classify(code: ErrorCode, originalError?: Error | string): RecoveryAction;
|
|
59
|
+
classifyWithDetails(code: ErrorCode, message: string, details?: ClassifiedError["details"], originalError?: Error | string): RecoveryAction;
|
|
60
|
+
/**
|
|
61
|
+
* Notify classifier that a protocol swap occurred (for event emission)
|
|
62
|
+
*/
|
|
63
|
+
notifyProtocolSwap(fromPlayer: string, toPlayer: string, fromProtocol: string, toProtocol: string, reason: string): void;
|
|
64
|
+
/**
|
|
65
|
+
* Calculate exponential backoff delay with jitter
|
|
66
|
+
*/
|
|
67
|
+
private calculateBackoff;
|
|
68
|
+
/**
|
|
69
|
+
* Map common error patterns to error codes
|
|
70
|
+
*/
|
|
71
|
+
static mapErrorToCode(error: Error | string): ErrorCode;
|
|
72
|
+
on<K extends keyof ErrorHandlingEvents>(event: K, listener: EventListener<K>): void;
|
|
73
|
+
off<K extends keyof ErrorHandlingEvents>(event: K, listener: EventListener<K>): void;
|
|
74
|
+
private emit;
|
|
75
|
+
private log;
|
|
76
|
+
}
|
|
77
|
+
export {};
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* Framework-agnostic client for resolving viewer endpoints from the Gateway GraphQL API.
|
|
5
5
|
* Extracted from useViewerEndpoints.ts for use in headless core.
|
|
6
6
|
*/
|
|
7
|
-
import { TypedEventEmitter } from
|
|
8
|
-
import type { ContentEndpoints, ContentType } from
|
|
9
|
-
export type GatewayStatus =
|
|
7
|
+
import { TypedEventEmitter } from "./EventEmitter";
|
|
8
|
+
import type { ContentEndpoints, ContentType } from "../types";
|
|
9
|
+
export type GatewayStatus = "idle" | "loading" | "ready" | "error";
|
|
10
10
|
export interface GatewayClientConfig {
|
|
11
11
|
/** Gateway GraphQL endpoint URL */
|
|
12
12
|
gatewayUrl: string;
|
|
@@ -32,7 +32,7 @@ export interface GatewayClientEvents {
|
|
|
32
32
|
endpoints: ContentEndpoints;
|
|
33
33
|
};
|
|
34
34
|
}
|
|
35
|
-
type CircuitBreakerState =
|
|
35
|
+
type CircuitBreakerState = "closed" | "open" | "half-open";
|
|
36
36
|
/**
|
|
37
37
|
* Client for resolving viewer endpoints from the Gateway GraphQL API.
|
|
38
38
|
*
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MetaTrackEvent } from
|
|
1
|
+
import type { MetaTrackEvent } from "../types";
|
|
2
2
|
export interface MetaTrackSubscription {
|
|
3
3
|
trackId: string;
|
|
4
4
|
callback: (event: MetaTrackEvent) => void;
|
|
@@ -19,7 +19,7 @@ export interface MetaTrackManagerConfig {
|
|
|
19
19
|
/** Fast-forward interval in seconds for catching up (default: 5) */
|
|
20
20
|
fastForwardInterval?: number;
|
|
21
21
|
}
|
|
22
|
-
type ConnectionState =
|
|
22
|
+
type ConnectionState = "disconnected" | "connecting" | "connected" | "reconnecting";
|
|
23
23
|
/**
|
|
24
24
|
* MetaTrackManager - Handles real-time metadata subscriptions via MistServer WebSocket
|
|
25
25
|
*
|
|
@@ -20,7 +20,7 @@ export interface MistReporterStats {
|
|
|
20
20
|
lastError: string | null;
|
|
21
21
|
firstPlayback: number | null;
|
|
22
22
|
playbackScore: number;
|
|
23
|
-
autoplay:
|
|
23
|
+
autoplay: "success" | "muted" | "failed" | null;
|
|
24
24
|
videoHeight: number | null;
|
|
25
25
|
videoWidth: number | null;
|
|
26
26
|
playerHeight: number | null;
|
|
@@ -97,7 +97,7 @@ export declare class MistReporter {
|
|
|
97
97
|
/**
|
|
98
98
|
* Increment a counter stat
|
|
99
99
|
*/
|
|
100
|
-
add(key:
|
|
100
|
+
add(key: "nWaiting" | "nStalled" | "nError", amount?: number): void;
|
|
101
101
|
/**
|
|
102
102
|
* Initialize reporting for a video element
|
|
103
103
|
*/
|
|
@@ -113,7 +113,7 @@ export declare class MistReporter {
|
|
|
113
113
|
/**
|
|
114
114
|
* Update autoplay status
|
|
115
115
|
*/
|
|
116
|
-
setAutoplayStatus(status:
|
|
116
|
+
setAutoplayStatus(status: "success" | "muted" | "failed"): void;
|
|
117
117
|
/**
|
|
118
118
|
* Update current tracks
|
|
119
119
|
*/
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* - tracks: Select tracks { video: string, audio: string }
|
|
18
18
|
* - set_speed: Set playback rate { play_rate: number | "auto" }
|
|
19
19
|
*/
|
|
20
|
-
import { TypedEventEmitter } from
|
|
20
|
+
import { TypedEventEmitter } from "./EventEmitter";
|
|
21
21
|
export interface MistSignalingConfig {
|
|
22
22
|
/** WebSocket URL (will convert http to ws) */
|
|
23
23
|
url: string;
|
|
@@ -42,35 +42,35 @@ export interface MistTimeUpdate {
|
|
|
42
42
|
}
|
|
43
43
|
export interface MistSignalingEvents {
|
|
44
44
|
/** Connection established */
|
|
45
|
-
|
|
45
|
+
connected: void;
|
|
46
46
|
/** Connection closed */
|
|
47
|
-
|
|
47
|
+
disconnected: {
|
|
48
48
|
code: number;
|
|
49
49
|
};
|
|
50
50
|
/** SDP answer received */
|
|
51
|
-
|
|
51
|
+
answer_sdp: {
|
|
52
52
|
result: boolean;
|
|
53
53
|
answer_sdp: string;
|
|
54
54
|
};
|
|
55
55
|
/** Time/track update */
|
|
56
|
-
|
|
56
|
+
time_update: MistTimeUpdate;
|
|
57
57
|
/** Seek completed */
|
|
58
|
-
|
|
58
|
+
seeked: {
|
|
59
59
|
live_point?: boolean;
|
|
60
60
|
};
|
|
61
61
|
/** Playback speed changed */
|
|
62
|
-
|
|
62
|
+
speed_changed: {
|
|
63
63
|
play_rate: number;
|
|
64
64
|
play_rate_curr: number;
|
|
65
65
|
};
|
|
66
66
|
/** Stream ended */
|
|
67
|
-
|
|
67
|
+
stopped: void;
|
|
68
68
|
/** Error occurred */
|
|
69
|
-
|
|
69
|
+
error: {
|
|
70
70
|
message: string;
|
|
71
71
|
};
|
|
72
72
|
}
|
|
73
|
-
export type MistSignalingState =
|
|
73
|
+
export type MistSignalingState = "connecting" | "connected" | "disconnected" | "closed";
|
|
74
74
|
/**
|
|
75
75
|
* MistSignaling handles WebSocket communication with MistServer for WebRTC
|
|
76
76
|
*/
|
|
@@ -113,7 +113,7 @@ export declare class MistSignaling extends TypedEventEmitter<MistSignalingEvents
|
|
|
113
113
|
/**
|
|
114
114
|
* Seek to position (in seconds or "live")
|
|
115
115
|
*/
|
|
116
|
-
seek(time: number |
|
|
116
|
+
seek(time: number | "live"): Promise<string>;
|
|
117
117
|
/**
|
|
118
118
|
* Pause playback (hold)
|
|
119
119
|
*/
|
|
@@ -135,7 +135,7 @@ export declare class MistSignaling extends TypedEventEmitter<MistSignalingEvents
|
|
|
135
135
|
* Set playback speed
|
|
136
136
|
* @param rate - Playback rate (1.0 normal, "auto" for live catch-up)
|
|
137
137
|
*/
|
|
138
|
-
setSpeed(rate: number |
|
|
138
|
+
setSpeed(rate: number | "auto"): boolean;
|
|
139
139
|
/**
|
|
140
140
|
* Close the connection
|
|
141
141
|
*/
|