@videojs/spf 10.0.0-beta.2 → 10.0.0-beta.21
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 +16 -40
- package/dist/default/core/abr/bandwidth-estimator.js +95 -0
- package/dist/default/core/abr/bandwidth-estimator.js.map +1 -0
- package/dist/default/core/abr/ewma.js +71 -0
- package/dist/default/core/abr/ewma.js.map +1 -0
- package/dist/default/core/abr/quality-selection.js +53 -0
- package/dist/default/core/abr/quality-selection.js.map +1 -0
- package/dist/default/core/buffer/back-buffer.js +46 -0
- package/dist/default/core/buffer/back-buffer.js.map +1 -0
- package/dist/default/core/buffer/forward-buffer.js +73 -0
- package/dist/default/core/buffer/forward-buffer.js.map +1 -0
- package/dist/default/core/create-machine-actor.js +91 -0
- package/dist/default/core/create-machine-actor.js.map +1 -0
- package/dist/default/core/create-machine-reactor.js +83 -0
- package/dist/default/core/create-machine-reactor.js.map +1 -0
- package/dist/default/core/create-transition-actor.js +46 -0
- package/dist/default/core/create-transition-actor.js.map +1 -0
- package/dist/default/core/features/calculate-presentation-duration.js +53 -0
- package/dist/default/core/features/calculate-presentation-duration.js.map +1 -0
- package/dist/default/core/features/quality-switching.js +69 -0
- package/dist/default/core/features/quality-switching.js.map +1 -0
- package/dist/default/core/features/resolve-presentation.js +73 -0
- package/dist/default/core/features/resolve-presentation.js.map +1 -0
- package/dist/default/core/features/resolve-track.js +66 -0
- package/dist/default/core/features/resolve-track.js.map +1 -0
- package/dist/default/core/features/select-tracks.js +130 -0
- package/dist/default/core/features/select-tracks.js.map +1 -0
- package/dist/default/core/features/sync-preload-attribute.js +26 -0
- package/dist/default/core/features/sync-preload-attribute.js.map +1 -0
- package/dist/default/core/hls/parse-attributes.js +134 -0
- package/dist/default/core/hls/parse-attributes.js.map +1 -0
- package/dist/default/core/hls/parse-media-playlist.js +82 -0
- package/dist/default/core/hls/parse-media-playlist.js.map +1 -0
- package/dist/default/core/hls/parse-multivariant.js +214 -0
- package/dist/default/core/hls/parse-multivariant.js.map +1 -0
- package/dist/default/core/hls/resolve-url.js +11 -0
- package/dist/default/core/hls/resolve-url.js.map +1 -0
- package/dist/default/core/machine.js +26 -0
- package/dist/default/core/machine.js.map +1 -0
- package/dist/default/core/signals/effect.js +41 -0
- package/dist/default/core/signals/effect.js.map +1 -0
- package/dist/default/core/signals/primitives.js +32 -0
- package/dist/default/core/signals/primitives.js.map +1 -0
- package/dist/default/core/task.js +191 -0
- package/dist/default/core/task.js.map +1 -0
- package/dist/default/core/types/index.js +15 -0
- package/dist/default/core/types/index.js.map +1 -0
- package/dist/default/core/utils/generate-id.js +21 -0
- package/dist/default/core/utils/generate-id.js.map +1 -0
- package/dist/default/core/utils/track-selection.js +39 -0
- package/dist/default/core/utils/track-selection.js.map +1 -0
- package/dist/default/dom/features/end-of-stream.js +145 -0
- package/dist/default/dom/features/end-of-stream.js.map +1 -0
- package/dist/default/dom/features/load-segments.js +192 -0
- package/dist/default/dom/features/load-segments.js.map +1 -0
- package/dist/default/dom/features/load-text-track-cues.js +104 -0
- package/dist/default/dom/features/load-text-track-cues.js.map +1 -0
- package/dist/default/dom/features/segment-loader-actor.js +243 -0
- package/dist/default/dom/features/segment-loader-actor.js.map +1 -0
- package/dist/default/dom/features/setup-mediasource.js +48 -0
- package/dist/default/dom/features/setup-mediasource.js.map +1 -0
- package/dist/default/dom/features/setup-sourcebuffer.js +78 -0
- package/dist/default/dom/features/setup-sourcebuffer.js.map +1 -0
- package/dist/default/dom/features/sync-text-tracks.js +95 -0
- package/dist/default/dom/features/sync-text-tracks.js.map +1 -0
- package/dist/default/dom/features/text-track-segment-loader-actor.js +55 -0
- package/dist/default/dom/features/text-track-segment-loader-actor.js.map +1 -0
- package/dist/default/dom/features/text-tracks-actor.js +42 -0
- package/dist/default/dom/features/text-tracks-actor.js.map +1 -0
- package/dist/default/dom/features/track-current-time.js +49 -0
- package/dist/default/dom/features/track-current-time.js.map +1 -0
- package/dist/default/dom/features/track-playback-initiated.js +66 -0
- package/dist/default/dom/features/track-playback-initiated.js.map +1 -0
- package/dist/default/dom/features/track-playback-rate.js +32 -0
- package/dist/default/dom/features/track-playback-rate.js.map +1 -0
- package/dist/default/dom/features/update-duration.js +78 -0
- package/dist/default/dom/features/update-duration.js.map +1 -0
- package/dist/default/dom/media/append-segment.js +60 -0
- package/dist/default/dom/media/append-segment.js.map +1 -0
- package/dist/default/dom/media/buffer-flusher.js +55 -0
- package/dist/default/dom/media/buffer-flusher.js.map +1 -0
- package/dist/default/dom/media/mediasource-setup.js +146 -0
- package/dist/default/dom/media/mediasource-setup.js.map +1 -0
- package/dist/default/dom/media/source-buffer-actor.js +137 -0
- package/dist/default/dom/media/source-buffer-actor.js.map +1 -0
- package/dist/default/dom/network/chunked-stream-iterable.js +49 -0
- package/dist/default/dom/network/chunked-stream-iterable.js.map +1 -0
- package/dist/default/dom/network/fetch.js +54 -0
- package/dist/default/dom/network/fetch.js.map +1 -0
- package/dist/default/dom/playback-engine/adapter.js +100 -0
- package/dist/default/dom/playback-engine/adapter.js.map +1 -0
- package/dist/default/dom/playback-engine/engine.js +142 -0
- package/dist/default/dom/playback-engine/engine.js.map +1 -0
- package/dist/default/dom/playback-engine.js +4 -0
- package/dist/default/dom/text/parse-vtt-segment.js +56 -0
- package/dist/default/dom/text/parse-vtt-segment.js.map +1 -0
- package/dist/default/dom.js +10 -0
- package/dist/{src-DRsS_H80.js → default/index.js} +3 -3
- package/dist/default/index.js.map +1 -0
- package/dist/dev/core/abr/bandwidth-estimator.d.ts +35 -0
- package/dist/dev/core/abr/bandwidth-estimator.d.ts.map +1 -0
- package/dist/dev/core/abr/bandwidth-estimator.js +95 -0
- package/dist/dev/core/abr/bandwidth-estimator.js.map +1 -0
- package/dist/dev/core/abr/ewma.js +71 -0
- package/dist/dev/core/abr/ewma.js.map +1 -0
- package/dist/dev/core/abr/quality-selection.js +53 -0
- package/dist/dev/core/abr/quality-selection.js.map +1 -0
- package/dist/dev/core/actor.d.ts +27 -0
- package/dist/dev/core/actor.d.ts.map +1 -0
- package/dist/dev/core/buffer/back-buffer.js +46 -0
- package/dist/dev/core/buffer/back-buffer.js.map +1 -0
- package/dist/dev/core/buffer/forward-buffer.js +73 -0
- package/dist/dev/core/buffer/forward-buffer.js.map +1 -0
- package/dist/dev/core/create-machine-actor.d.ts +12 -0
- package/dist/dev/core/create-machine-actor.d.ts.map +1 -0
- package/dist/dev/core/create-machine-actor.js +91 -0
- package/dist/dev/core/create-machine-actor.js.map +1 -0
- package/dist/dev/core/create-machine-reactor.d.ts +8 -0
- package/dist/dev/core/create-machine-reactor.d.ts.map +1 -0
- package/dist/dev/core/create-machine-reactor.js +83 -0
- package/dist/dev/core/create-machine-reactor.js.map +1 -0
- package/dist/dev/core/create-transition-actor.d.ts +23 -0
- package/dist/dev/core/create-transition-actor.d.ts.map +1 -0
- package/dist/dev/core/create-transition-actor.js +46 -0
- package/dist/dev/core/create-transition-actor.js.map +1 -0
- package/dist/dev/core/features/calculate-presentation-duration.js +53 -0
- package/dist/dev/core/features/calculate-presentation-duration.js.map +1 -0
- package/dist/dev/core/features/quality-switching.js +69 -0
- package/dist/dev/core/features/quality-switching.js.map +1 -0
- package/dist/dev/core/features/resolve-presentation.js +73 -0
- package/dist/dev/core/features/resolve-presentation.js.map +1 -0
- package/dist/dev/core/features/resolve-track.js +66 -0
- package/dist/dev/core/features/resolve-track.js.map +1 -0
- package/dist/dev/core/features/select-tracks.js +130 -0
- package/dist/dev/core/features/select-tracks.js.map +1 -0
- package/dist/dev/core/features/sync-preload-attribute.js +26 -0
- package/dist/dev/core/features/sync-preload-attribute.js.map +1 -0
- package/dist/dev/core/hls/parse-attributes.js +134 -0
- package/dist/dev/core/hls/parse-attributes.js.map +1 -0
- package/dist/dev/core/hls/parse-media-playlist.js +82 -0
- package/dist/dev/core/hls/parse-media-playlist.js.map +1 -0
- package/dist/dev/core/hls/parse-multivariant.js +214 -0
- package/dist/dev/core/hls/parse-multivariant.js.map +1 -0
- package/dist/dev/core/hls/resolve-url.js +11 -0
- package/dist/dev/core/hls/resolve-url.js.map +1 -0
- package/dist/dev/core/machine.d.ts +21 -0
- package/dist/dev/core/machine.d.ts.map +1 -0
- package/dist/dev/core/machine.js +26 -0
- package/dist/dev/core/machine.js.map +1 -0
- package/dist/dev/core/signals/effect.d.ts +15 -0
- package/dist/dev/core/signals/effect.d.ts.map +1 -0
- package/dist/dev/core/signals/effect.js +41 -0
- package/dist/dev/core/signals/effect.js.map +1 -0
- package/dist/dev/core/signals/primitives.d.ts +10 -0
- package/dist/dev/core/signals/primitives.d.ts.map +1 -0
- package/dist/dev/core/signals/primitives.js +32 -0
- package/dist/dev/core/signals/primitives.js.map +1 -0
- package/dist/dev/core/task.js +191 -0
- package/dist/dev/core/task.js.map +1 -0
- package/dist/dev/core/types/index.d.ts +166 -0
- package/dist/dev/core/types/index.d.ts.map +1 -0
- package/dist/dev/core/types/index.js +15 -0
- package/dist/dev/core/types/index.js.map +1 -0
- package/dist/dev/core/utils/generate-id.js +21 -0
- package/dist/dev/core/utils/generate-id.js.map +1 -0
- package/dist/dev/core/utils/track-selection.d.ts +16 -0
- package/dist/dev/core/utils/track-selection.d.ts.map +1 -0
- package/dist/dev/core/utils/track-selection.js +39 -0
- package/dist/dev/core/utils/track-selection.js.map +1 -0
- package/dist/dev/dom/features/end-of-stream.js +145 -0
- package/dist/dev/dom/features/end-of-stream.js.map +1 -0
- package/dist/dev/dom/features/load-segments.d.ts +72 -0
- package/dist/dev/dom/features/load-segments.d.ts.map +1 -0
- package/dist/dev/dom/features/load-segments.js +192 -0
- package/dist/dev/dom/features/load-segments.js.map +1 -0
- package/dist/dev/dom/features/load-text-track-cues.d.ts +85 -0
- package/dist/dev/dom/features/load-text-track-cues.d.ts.map +1 -0
- package/dist/dev/dom/features/load-text-track-cues.js +104 -0
- package/dist/dev/dom/features/load-text-track-cues.js.map +1 -0
- package/dist/dev/dom/features/segment-loader-actor.d.ts +1 -0
- package/dist/dev/dom/features/segment-loader-actor.js +243 -0
- package/dist/dev/dom/features/segment-loader-actor.js.map +1 -0
- package/dist/dev/dom/features/setup-mediasource.js +48 -0
- package/dist/dev/dom/features/setup-mediasource.js.map +1 -0
- package/dist/dev/dom/features/setup-sourcebuffer.d.ts +9 -0
- package/dist/dev/dom/features/setup-sourcebuffer.d.ts.map +1 -0
- package/dist/dev/dom/features/setup-sourcebuffer.js +78 -0
- package/dist/dev/dom/features/setup-sourcebuffer.js.map +1 -0
- package/dist/dev/dom/features/sync-text-tracks.js +95 -0
- package/dist/dev/dom/features/sync-text-tracks.js.map +1 -0
- package/dist/dev/dom/features/text-track-segment-loader-actor.d.ts +12 -0
- package/dist/dev/dom/features/text-track-segment-loader-actor.d.ts.map +1 -0
- package/dist/dev/dom/features/text-track-segment-loader-actor.js +55 -0
- package/dist/dev/dom/features/text-track-segment-loader-actor.js.map +1 -0
- package/dist/dev/dom/features/text-tracks-actor.d.ts +31 -0
- package/dist/dev/dom/features/text-tracks-actor.d.ts.map +1 -0
- package/dist/dev/dom/features/text-tracks-actor.js +42 -0
- package/dist/dev/dom/features/text-tracks-actor.js.map +1 -0
- package/dist/dev/dom/features/track-current-time.d.ts +40 -0
- package/dist/dev/dom/features/track-current-time.d.ts.map +1 -0
- package/dist/dev/dom/features/track-current-time.js +49 -0
- package/dist/dev/dom/features/track-current-time.js.map +1 -0
- package/dist/dev/dom/features/track-playback-initiated.d.ts +46 -0
- package/dist/dev/dom/features/track-playback-initiated.d.ts.map +1 -0
- package/dist/dev/dom/features/track-playback-initiated.js +66 -0
- package/dist/dev/dom/features/track-playback-initiated.js.map +1 -0
- package/dist/dev/dom/features/track-playback-rate.d.ts +34 -0
- package/dist/dev/dom/features/track-playback-rate.d.ts.map +1 -0
- package/dist/dev/dom/features/track-playback-rate.js +32 -0
- package/dist/dev/dom/features/track-playback-rate.js.map +1 -0
- package/dist/dev/dom/features/update-duration.js +78 -0
- package/dist/dev/dom/features/update-duration.js.map +1 -0
- package/dist/dev/dom/media/append-segment.d.ts +24 -0
- package/dist/dev/dom/media/append-segment.d.ts.map +1 -0
- package/dist/dev/dom/media/append-segment.js +60 -0
- package/dist/dev/dom/media/append-segment.js.map +1 -0
- package/dist/dev/dom/media/buffer-flusher.d.ts +24 -0
- package/dist/dev/dom/media/buffer-flusher.d.ts.map +1 -0
- package/dist/dev/dom/media/buffer-flusher.js +55 -0
- package/dist/dev/dom/media/buffer-flusher.js.map +1 -0
- package/dist/dev/dom/media/mediasource-setup.js +146 -0
- package/dist/dev/dom/media/mediasource-setup.js.map +1 -0
- package/dist/dev/dom/media/source-buffer-actor.d.ts +62 -0
- package/dist/dev/dom/media/source-buffer-actor.d.ts.map +1 -0
- package/dist/dev/dom/media/source-buffer-actor.js +137 -0
- package/dist/dev/dom/media/source-buffer-actor.js.map +1 -0
- package/dist/dev/dom/network/chunked-stream-iterable.js +49 -0
- package/dist/dev/dom/network/chunked-stream-iterable.js.map +1 -0
- package/dist/dev/dom/network/fetch.js +54 -0
- package/dist/dev/dom/network/fetch.js.map +1 -0
- package/dist/dev/dom/playback-engine/adapter.d.ts +40 -0
- package/dist/dev/dom/playback-engine/adapter.d.ts.map +1 -0
- package/dist/dev/dom/playback-engine/adapter.js +100 -0
- package/dist/dev/dom/playback-engine/adapter.js.map +1 -0
- package/dist/dev/dom/playback-engine/engine.d.ts +124 -0
- package/dist/dev/dom/playback-engine/engine.d.ts.map +1 -0
- package/dist/dev/dom/playback-engine/engine.js +142 -0
- package/dist/dev/dom/playback-engine/engine.js.map +1 -0
- package/dist/dev/dom/playback-engine.d.ts +4 -0
- package/dist/dev/dom/playback-engine.js +4 -0
- package/dist/dev/dom/text/parse-vtt-segment.d.ts +12 -0
- package/dist/dev/dom/text/parse-vtt-segment.d.ts.map +1 -0
- package/dist/dev/dom/text/parse-vtt-segment.js +56 -0
- package/dist/dev/dom/text/parse-vtt-segment.js.map +1 -0
- package/dist/dev/dom.d.ts +10 -0
- package/dist/dev/dom.js +10 -0
- package/dist/dev/index.d.ts.map +1 -0
- package/dist/dev/index.js +14 -0
- package/dist/dev/index.js.map +1 -0
- package/package.json +26 -24
- package/dist/adapter-CMw-rvbk.js +0 -3512
- package/dist/adapter-CMw-rvbk.js.map +0 -1
- package/dist/adapter-l8iJN_GI.d.ts +0 -689
- package/dist/adapter-l8iJN_GI.d.ts.map +0 -1
- package/dist/dom/index.d.ts +0 -243
- package/dist/dom/index.d.ts.map +0 -1
- package/dist/dom/index.js +0 -38
- package/dist/dom/index.js.map +0 -1
- package/dist/dom/playback-engine/index.d.ts +0 -2
- package/dist/dom/playback-engine/index.js +0 -4
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -3
- package/dist/src-DRsS_H80.js.map +0 -1
- /package/dist/{index.d.ts → dev/index.d.ts} +0 -0
|
@@ -1,689 +0,0 @@
|
|
|
1
|
-
//#region src/core/abr/bandwidth-estimator.d.ts
|
|
2
|
-
/**
|
|
3
|
-
* Dual EWMA Bandwidth Estimator
|
|
4
|
-
*
|
|
5
|
-
* Estimates available bandwidth using two EWMA calculations with different
|
|
6
|
-
* half-lives, taking the minimum of both. This approach (from Shaka Player):
|
|
7
|
-
*
|
|
8
|
-
* - **Fast EWMA** (2s half-life): Reacts quickly to bandwidth drops
|
|
9
|
-
* - **Slow EWMA** (5s half-life): Provides stability during fluctuations
|
|
10
|
-
* - **min(fast, slow)**: Adapts down quickly, up slowly
|
|
11
|
-
*
|
|
12
|
-
* This naturally provides asymmetric behavior needed for good QoE:
|
|
13
|
-
* avoiding stalls (quick downgrade) while preventing oscillation (slow upgrade).
|
|
14
|
-
*/
|
|
15
|
-
/**
|
|
16
|
-
* Bandwidth estimator state.
|
|
17
|
-
*
|
|
18
|
-
* This state structure will be managed by O1 (State Container).
|
|
19
|
-
* Functions in this module operate on this state immutably.
|
|
20
|
-
*/
|
|
21
|
-
interface BandwidthState {
|
|
22
|
-
/** Fast-moving EWMA estimate (raw, uncorrected). */
|
|
23
|
-
fastEstimate: number;
|
|
24
|
-
/** Total weight accumulated in fast EWMA. */
|
|
25
|
-
fastTotalWeight: number;
|
|
26
|
-
/** Slow-moving EWMA estimate (raw, uncorrected). */
|
|
27
|
-
slowEstimate: number;
|
|
28
|
-
/** Total weight accumulated in slow EWMA. */
|
|
29
|
-
slowTotalWeight: number;
|
|
30
|
-
/** Total bytes sampled across all valid samples. */
|
|
31
|
-
bytesSampled: number;
|
|
32
|
-
}
|
|
33
|
-
//#endregion
|
|
34
|
-
//#region src/core/state/create-state.d.ts
|
|
35
|
-
/**
|
|
36
|
-
* Reactive state container with selectors, custom equality, and batched updates.
|
|
37
|
-
*
|
|
38
|
-
* Manages both immutable state values and mutable object references (e.g., HTMLMediaElement).
|
|
39
|
-
*/
|
|
40
|
-
declare const STATE_SYMBOL: unique symbol;
|
|
41
|
-
/**
|
|
42
|
-
* State change listener for full-state subscriptions.
|
|
43
|
-
*/
|
|
44
|
-
type StateListener<T> = (current: T) => void;
|
|
45
|
-
/**
|
|
46
|
-
* Selector function to derive a value from state.
|
|
47
|
-
*/
|
|
48
|
-
type StateSelector<T, R> = (state: T) => R;
|
|
49
|
-
/**
|
|
50
|
-
* Listener for selector-based subscriptions.
|
|
51
|
-
*/
|
|
52
|
-
type SelectorListener<R> = (current: R) => void;
|
|
53
|
-
/**
|
|
54
|
-
* Options for selector subscriptions.
|
|
55
|
-
*/
|
|
56
|
-
interface SelectorOptions<R> {
|
|
57
|
-
/**
|
|
58
|
-
* Custom equality function for selected value.
|
|
59
|
-
* Defaults to Object.is
|
|
60
|
-
*/
|
|
61
|
-
equalityFn?: (a: R, b: R) => boolean;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Configuration for creating a state container.
|
|
65
|
-
*/
|
|
66
|
-
interface StateConfig<T> {
|
|
67
|
-
/**
|
|
68
|
-
* Custom equality function for change detection.
|
|
69
|
-
* Defaults to Object.is for top-level comparison.
|
|
70
|
-
*/
|
|
71
|
-
equalityFn?: (a: T, b: T) => boolean;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Read-only state interface.
|
|
75
|
-
*/
|
|
76
|
-
interface State<T> {
|
|
77
|
-
/** Symbol for type identification */
|
|
78
|
-
readonly [STATE_SYMBOL]: true;
|
|
79
|
-
/** Current state snapshot */
|
|
80
|
-
readonly current: T;
|
|
81
|
-
/** Subscribe to state changes */
|
|
82
|
-
subscribe(listener: StateListener<T>): () => void;
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Writable state interface with patch capability.
|
|
86
|
-
*/
|
|
87
|
-
interface WritableState<T> extends State<T> {
|
|
88
|
-
/** Update state with partial object (for object state) or full value (for primitive state) */
|
|
89
|
-
patch(partial: T extends object ? Partial<T> : T): void;
|
|
90
|
-
/** Subscribe to full-state changes */
|
|
91
|
-
subscribe(listener: StateListener<T>): () => void;
|
|
92
|
-
/** Subscribe to selected value changes */
|
|
93
|
-
subscribe<R>(selector: StateSelector<T, R>, listener: SelectorListener<R>, options?: SelectorOptions<R>): () => void;
|
|
94
|
-
/** Manually flush pending updates */
|
|
95
|
-
flush(): void;
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Create a reactive state container.
|
|
99
|
-
*
|
|
100
|
-
* @example
|
|
101
|
-
* ```typescript
|
|
102
|
-
* const state = createState({ count: 0 });
|
|
103
|
-
*
|
|
104
|
-
* // Subscribe to changes
|
|
105
|
-
* state.subscribe((current, prev) => {
|
|
106
|
-
* console.log('Changed:', prev, '->', current);
|
|
107
|
-
* });
|
|
108
|
-
*
|
|
109
|
-
* // Updates are batched
|
|
110
|
-
* state.patch({ count: 1 });
|
|
111
|
-
* state.patch({ count: 2 });
|
|
112
|
-
* // Only one notification fires (with count: 2)
|
|
113
|
-
* ```
|
|
114
|
-
*
|
|
115
|
-
* @example Selector subscriptions
|
|
116
|
-
* ```typescript
|
|
117
|
-
* const state = createState({ count: 0, name: 'test' });
|
|
118
|
-
*
|
|
119
|
-
* // Only notified when count changes
|
|
120
|
-
* state.subscribe(
|
|
121
|
-
* s => s.count,
|
|
122
|
-
* (current, prev) => console.log(current, prev)
|
|
123
|
-
* );
|
|
124
|
-
* ```
|
|
125
|
-
*
|
|
126
|
-
* @example Custom equality
|
|
127
|
-
* ```typescript
|
|
128
|
-
* const state = createState(
|
|
129
|
-
* { count: 0, name: 'test' },
|
|
130
|
-
* { equalityFn: (a, b) => a.count === b.count }
|
|
131
|
-
* );
|
|
132
|
-
* ```
|
|
133
|
-
*/
|
|
134
|
-
declare function createState<T>(initial: T, config?: StateConfig<T>): WritableState<T>;
|
|
135
|
-
//#endregion
|
|
136
|
-
//#region src/core/types/index.d.ts
|
|
137
|
-
/**
|
|
138
|
-
* Core SPF Types
|
|
139
|
-
*
|
|
140
|
-
* Based on CMAF-HAM (Common Media Application Format - Hypothetical Application Model)
|
|
141
|
-
* Protocol-agnostic representation of streaming media content.
|
|
142
|
-
*
|
|
143
|
-
* @see https://github.com/AcademySoftwareFoundation/common-media-library
|
|
144
|
-
*/
|
|
145
|
-
/**
|
|
146
|
-
* Base identifier type for all HAM objects.
|
|
147
|
-
*/
|
|
148
|
-
interface Ham {
|
|
149
|
-
id: string;
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Addressable resource with optional byte range.
|
|
153
|
-
*/
|
|
154
|
-
interface AddressableObject {
|
|
155
|
-
url: string;
|
|
156
|
-
byteRange?: {
|
|
157
|
-
start: number;
|
|
158
|
-
end: number;
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Time span with start time and duration.
|
|
163
|
-
* Used for segments and other timed ranges.
|
|
164
|
-
*/
|
|
165
|
-
interface TimeSpan {
|
|
166
|
-
startTime: number;
|
|
167
|
-
duration: number;
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Track content type.
|
|
171
|
-
*/
|
|
172
|
-
type TrackType = 'video' | 'audio' | 'text';
|
|
173
|
-
/**
|
|
174
|
-
* Video frame rate expressed as numerator/denominator.
|
|
175
|
-
*
|
|
176
|
-
* Examples:
|
|
177
|
-
* - 30 fps: { frameRateNumerator: 30 }
|
|
178
|
-
* - 29.97 fps: { frameRateNumerator: 30000, frameRateDenominator: 1001 }
|
|
179
|
-
*/
|
|
180
|
-
interface FrameRate {
|
|
181
|
-
frameRateNumerator: number;
|
|
182
|
-
frameRateDenominator?: number;
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Generic type for partially resolved tracks.
|
|
186
|
-
* Removes fields that come from media playlist parsing.
|
|
187
|
-
*
|
|
188
|
-
* @param T - Track type to make partially resolved (must extend Track)
|
|
189
|
-
*/
|
|
190
|
-
type PartiallyResolved<T extends Track = Track> = Omit<T, 'segments' | 'initialization' | keyof TimeSpan> & {
|
|
191
|
-
segments?: never;
|
|
192
|
-
duration?: never;
|
|
193
|
-
startTime?: never;
|
|
194
|
-
initialization?: never;
|
|
195
|
-
};
|
|
196
|
-
/**
|
|
197
|
-
* Base track type containing common properties for all resolved tracks.
|
|
198
|
-
* A resolved track has segments, duration, and initialization data.
|
|
199
|
-
* All URLs are fully qualified (parsers resolve relative URLs).
|
|
200
|
-
*/
|
|
201
|
-
/**
|
|
202
|
-
* Track startTime is always 0 (for future multi-period support).
|
|
203
|
-
*/
|
|
204
|
-
type Track = Ham & AddressableObject & TimeSpan & {
|
|
205
|
-
type: TrackType;
|
|
206
|
-
codecs?: string[];
|
|
207
|
-
mimeType: string;
|
|
208
|
-
language?: string | undefined;
|
|
209
|
-
bandwidth: number;
|
|
210
|
-
initialization?: AddressableObject;
|
|
211
|
-
segments: Segment[];
|
|
212
|
-
};
|
|
213
|
-
/**
|
|
214
|
-
* Resolved video track with segments.
|
|
215
|
-
*/
|
|
216
|
-
type VideoTrack = Track & Required<Pick<Track, 'initialization' | 'codecs'>> & {
|
|
217
|
-
type: 'video';
|
|
218
|
-
width?: number;
|
|
219
|
-
height?: number;
|
|
220
|
-
frameRate?: FrameRate;
|
|
221
|
-
audioGroupId?: string;
|
|
222
|
-
};
|
|
223
|
-
/**
|
|
224
|
-
* Resolved audio track with segments.
|
|
225
|
-
*/
|
|
226
|
-
type AudioTrack = Track & Required<Pick<Track, 'initialization' | 'codecs'>> & {
|
|
227
|
-
type: 'audio';
|
|
228
|
-
groupId: string;
|
|
229
|
-
name: string;
|
|
230
|
-
sampleRate: number;
|
|
231
|
-
channels: number;
|
|
232
|
-
default?: boolean;
|
|
233
|
-
autoselect?: boolean;
|
|
234
|
-
};
|
|
235
|
-
/**
|
|
236
|
-
* Resolved text track with segments.
|
|
237
|
-
*/
|
|
238
|
-
type TextTrack = Track & {
|
|
239
|
-
type: 'text';
|
|
240
|
-
groupId: string;
|
|
241
|
-
label: string;
|
|
242
|
-
kind: 'subtitles' | 'captions';
|
|
243
|
-
default?: boolean;
|
|
244
|
-
autoselect?: boolean;
|
|
245
|
-
forced?: boolean;
|
|
246
|
-
};
|
|
247
|
-
/**
|
|
248
|
-
* Union of all unresolved track types (alias for backwards compatibility).
|
|
249
|
-
|
|
250
|
-
// =============================================================================
|
|
251
|
-
// Switching and Selection Sets
|
|
252
|
-
// =============================================================================
|
|
253
|
-
|
|
254
|
-
/**
|
|
255
|
-
* Generic switching set type.
|
|
256
|
-
* A group of tracks that can be switched between seamlessly.
|
|
257
|
-
*
|
|
258
|
-
* @param T - Track type (VideoTrack, AudioTrack, or TextTrack)
|
|
259
|
-
*/
|
|
260
|
-
type SwitchingSetOf<T extends Track = Track> = Ham & {
|
|
261
|
-
type: T['type'];
|
|
262
|
-
tracks: (PartiallyResolved<T> | T)[];
|
|
263
|
-
};
|
|
264
|
-
/**
|
|
265
|
-
* Generic selection set type.
|
|
266
|
-
* Groups switching sets by track type.
|
|
267
|
-
*
|
|
268
|
-
* @param T - Track type (VideoTrack, AudioTrack, or TextTrack)
|
|
269
|
-
*/
|
|
270
|
-
type SelectionSetOf<T extends Track = Track> = Ham & {
|
|
271
|
-
type: T['type'];
|
|
272
|
-
switchingSets: SwitchingSetOf<T>[];
|
|
273
|
-
};
|
|
274
|
-
/**
|
|
275
|
-
* Video selection set - contains only video switching sets.
|
|
276
|
-
*/
|
|
277
|
-
type VideoSelectionSet = SelectionSetOf<VideoTrack>;
|
|
278
|
-
/**
|
|
279
|
-
* Audio selection set - contains only audio switching sets.
|
|
280
|
-
*/
|
|
281
|
-
type AudioSelectionSet = SelectionSetOf<AudioTrack>;
|
|
282
|
-
/**
|
|
283
|
-
* Text selection set - contains only text switching sets.
|
|
284
|
-
*/
|
|
285
|
-
type TextSelectionSet = SelectionSetOf<TextTrack>;
|
|
286
|
-
/**
|
|
287
|
-
* Selection set - groups switching sets by track type.
|
|
288
|
-
* Discriminated union ensures type-safe track access.
|
|
289
|
-
*/
|
|
290
|
-
type SelectionSet = VideoSelectionSet | AudioSelectionSet | TextSelectionSet;
|
|
291
|
-
/**
|
|
292
|
-
* Media segment with timing information.
|
|
293
|
-
* Follows CMAF-HAM composition pattern.
|
|
294
|
-
*/
|
|
295
|
-
type Segment = Ham & AddressableObject & TimeSpan;
|
|
296
|
-
/**
|
|
297
|
-
* Presentation - a single playable period of content.
|
|
298
|
-
* Uses TimeSpan fields (startTime always 0, duration optional until track resolved).
|
|
299
|
-
*
|
|
300
|
-
* Extends AddressableObject so `url` contains the original manifest URL.
|
|
301
|
-
* All URLs are fully qualified (parsers resolve relative URLs).
|
|
302
|
-
*/
|
|
303
|
-
type Presentation = Ham & AddressableObject & Partial<TimeSpan> & {
|
|
304
|
-
selectionSets: SelectionSet[];
|
|
305
|
-
};
|
|
306
|
-
//#endregion
|
|
307
|
-
//#region src/core/utils/track-selection.d.ts
|
|
308
|
-
/**
|
|
309
|
-
* State shape for track selection.
|
|
310
|
-
* Minimal shape containing presentation and selected track IDs.
|
|
311
|
-
*/
|
|
312
|
-
interface TrackSelectionState {
|
|
313
|
-
presentation?: AddressableObject | Presentation | undefined;
|
|
314
|
-
selectedVideoTrackId?: string | undefined;
|
|
315
|
-
selectedAudioTrackId?: string | undefined;
|
|
316
|
-
selectedTextTrackId?: string | undefined;
|
|
317
|
-
}
|
|
318
|
-
//#endregion
|
|
319
|
-
//#region src/core/actor.d.ts
|
|
320
|
-
/**
|
|
321
|
-
* Generic actor types.
|
|
322
|
-
*
|
|
323
|
-
* An actor owns its snapshot (finite status + non-finite context) and
|
|
324
|
-
* notifies observers when it changes. Mirrors the XState snapshot model:
|
|
325
|
-
* `snapshot.status` is the bounded operational mode, `snapshot.context`
|
|
326
|
-
* holds arbitrary non-finite data.
|
|
327
|
-
*/
|
|
328
|
-
/** Complete actor snapshot: finite status + non-finite context. */
|
|
329
|
-
interface ActorSnapshot<Status extends string, Context> {
|
|
330
|
-
status: Status;
|
|
331
|
-
context: Context;
|
|
332
|
-
}
|
|
333
|
-
/** Generic actor interface: owns its snapshot and notifies observers. */
|
|
334
|
-
interface Actor<Status extends string, Context> {
|
|
335
|
-
/** Current snapshot. */
|
|
336
|
-
readonly snapshot: ActorSnapshot<Status, Context>;
|
|
337
|
-
/**
|
|
338
|
-
* Subscribe to snapshot changes. Fires immediately with the current
|
|
339
|
-
* snapshot, then on every subsequent change.
|
|
340
|
-
*
|
|
341
|
-
* @returns Unsubscribe function.
|
|
342
|
-
*/
|
|
343
|
-
subscribe(listener: (snapshot: ActorSnapshot<Status, Context>) => void): () => void;
|
|
344
|
-
/** Tear down the actor. */
|
|
345
|
-
destroy(): void;
|
|
346
|
-
}
|
|
347
|
-
//#endregion
|
|
348
|
-
//#region src/dom/media/source-buffer-actor.d.ts
|
|
349
|
-
interface BufferedRange {
|
|
350
|
-
start: number;
|
|
351
|
-
end: number;
|
|
352
|
-
}
|
|
353
|
-
type AppendSegmentMeta = Pick<Segment, 'id' | 'startTime' | 'duration'> & {
|
|
354
|
-
trackId: Track['id'];
|
|
355
|
-
/** Declared track bandwidth in bps (from playlist BANDWIDTH attribute). */
|
|
356
|
-
trackBandwidth?: number;
|
|
357
|
-
};
|
|
358
|
-
type AppendInitMessage = {
|
|
359
|
-
type: 'append-init';
|
|
360
|
-
data: ArrayBuffer;
|
|
361
|
-
meta: {
|
|
362
|
-
trackId: Track['id'];
|
|
363
|
-
};
|
|
364
|
-
};
|
|
365
|
-
type AppendSegmentMessage = {
|
|
366
|
-
type: 'append-segment';
|
|
367
|
-
data: ArrayBuffer;
|
|
368
|
-
meta: AppendSegmentMeta;
|
|
369
|
-
};
|
|
370
|
-
type RemoveMessage = {
|
|
371
|
-
type: 'remove';
|
|
372
|
-
start: number;
|
|
373
|
-
end: number;
|
|
374
|
-
};
|
|
375
|
-
type SourceBufferMessage = AppendInitMessage | AppendSegmentMessage | RemoveMessage;
|
|
376
|
-
/** Finite (bounded) operational modes of the actor. */
|
|
377
|
-
type SourceBufferActorStatus = 'idle' | 'updating' | 'destroyed';
|
|
378
|
-
/** Non-finite (extended) data managed by the actor — the XState "context". */
|
|
379
|
-
interface SourceBufferActorContext {
|
|
380
|
-
initTrackId?: string | undefined;
|
|
381
|
-
segments: Array<Pick<Segment, 'id' | 'startTime' | 'duration'> & {
|
|
382
|
-
trackId: Track['id'];
|
|
383
|
-
trackBandwidth?: number;
|
|
384
|
-
}>;
|
|
385
|
-
bufferedRanges: BufferedRange[];
|
|
386
|
-
}
|
|
387
|
-
/** SourceBuffer actor: queues operations, owns its snapshot. */
|
|
388
|
-
interface SourceBufferActor extends Actor<SourceBufferActorStatus, SourceBufferActorContext> {
|
|
389
|
-
send(message: SourceBufferMessage, signal: AbortSignal): Promise<void>;
|
|
390
|
-
batch(messages: SourceBufferMessage[], signal: AbortSignal): Promise<void>;
|
|
391
|
-
}
|
|
392
|
-
//#endregion
|
|
393
|
-
//#region src/dom/features/load-text-track-cues.d.ts
|
|
394
|
-
/**
|
|
395
|
-
* Loaded-segment record for a single text track.
|
|
396
|
-
*/
|
|
397
|
-
interface TextTrackSegmentState {
|
|
398
|
-
segments: Array<{
|
|
399
|
-
id: string;
|
|
400
|
-
}>;
|
|
401
|
-
}
|
|
402
|
-
/**
|
|
403
|
-
* Buffer model for text track cues — keyed by track ID.
|
|
404
|
-
*
|
|
405
|
-
* Using a per-track-ID map (rather than fixed 'video'/'audio' keys) because
|
|
406
|
-
* there can be N text tracks — one per language/subtitle variant.
|
|
407
|
-
*/
|
|
408
|
-
type TextTrackBufferState = Record<string, TextTrackSegmentState>;
|
|
409
|
-
/**
|
|
410
|
-
* State shape for text track cue loading.
|
|
411
|
-
*/
|
|
412
|
-
interface TextTrackCueLoadingState {
|
|
413
|
-
selectedTextTrackId?: string;
|
|
414
|
-
presentation?: Presentation;
|
|
415
|
-
/** Current playback position — used to gate VTT segment fetching to the forward buffer window. */
|
|
416
|
-
currentTime?: number;
|
|
417
|
-
/** Loaded-segment model for text tracks, keyed by track ID. */
|
|
418
|
-
textBufferState?: TextTrackBufferState;
|
|
419
|
-
}
|
|
420
|
-
/**
|
|
421
|
-
* Owners shape for text track cue loading.
|
|
422
|
-
*/
|
|
423
|
-
interface TextTrackCueLoadingOwners {
|
|
424
|
-
textTracks?: Map<string, HTMLTrackElement>;
|
|
425
|
-
}
|
|
426
|
-
/**
|
|
427
|
-
* Load text track cues orchestration.
|
|
428
|
-
*
|
|
429
|
-
* Triggers when:
|
|
430
|
-
* - Text track is selected
|
|
431
|
-
* - Track is resolved (has segments)
|
|
432
|
-
* - Track element exists
|
|
433
|
-
*
|
|
434
|
-
* Fetches and parses VTT segments within the forward buffer window, then adds
|
|
435
|
-
* cues to the track incrementally. Continues on segment errors to provide
|
|
436
|
-
* partial subtitles.
|
|
437
|
-
*
|
|
438
|
-
* @example
|
|
439
|
-
* const cleanup = loadTextTrackCues({ state, owners });
|
|
440
|
-
*/
|
|
441
|
-
declare function loadTextTrackCues({
|
|
442
|
-
state,
|
|
443
|
-
owners
|
|
444
|
-
}: {
|
|
445
|
-
state: WritableState<TextTrackCueLoadingState>;
|
|
446
|
-
owners: WritableState<TextTrackCueLoadingOwners>;
|
|
447
|
-
}): () => void;
|
|
448
|
-
//#endregion
|
|
449
|
-
//#region src/core/events/create-event-stream.d.ts
|
|
450
|
-
/**
|
|
451
|
-
* Minimal event stream with Observable-like shape.
|
|
452
|
-
*
|
|
453
|
-
* Simple Subject/Observable-like implementation for dispatching discrete events.
|
|
454
|
-
* Events are dispatched synchronously to all subscribers.
|
|
455
|
-
*/
|
|
456
|
-
declare const EVENT_STREAM_SYMBOL: unique symbol;
|
|
457
|
-
/**
|
|
458
|
-
* Event listener function.
|
|
459
|
-
*/
|
|
460
|
-
type EventListener<T extends Pick<Event, 'type'>> = (event: T) => void;
|
|
461
|
-
/**
|
|
462
|
-
* Event stream interface.
|
|
463
|
-
*/
|
|
464
|
-
interface EventStream<T extends Pick<Event, 'type'> = {
|
|
465
|
-
type: string;
|
|
466
|
-
}> {
|
|
467
|
-
[EVENT_STREAM_SYMBOL]: true;
|
|
468
|
-
dispatch(event: T): void;
|
|
469
|
-
subscribe(listener: EventListener<T>): () => void;
|
|
470
|
-
}
|
|
471
|
-
/**
|
|
472
|
-
* Creates a minimal event stream for dispatching discrete events.
|
|
473
|
-
*
|
|
474
|
-
* Events are dispatched synchronously to all subscribers.
|
|
475
|
-
* Conforms to Observable-like shape for future compatibility.
|
|
476
|
-
*
|
|
477
|
-
* Events must have a 'type' property for discriminated union type narrowing.
|
|
478
|
-
*
|
|
479
|
-
* @example
|
|
480
|
-
* ```ts
|
|
481
|
-
* type Action = { type: 'PLAY' } | { type: 'PAUSE' };
|
|
482
|
-
* const events = createEventStream<Action>();
|
|
483
|
-
*
|
|
484
|
-
* events.subscribe((action) => {
|
|
485
|
-
* if (action.type === 'PLAY') {
|
|
486
|
-
* // Type narrowed to { type: 'PLAY' }
|
|
487
|
-
* }
|
|
488
|
-
* });
|
|
489
|
-
*
|
|
490
|
-
* events.dispatch({ type: 'PLAY' });
|
|
491
|
-
* ```
|
|
492
|
-
*/
|
|
493
|
-
declare function createEventStream<T extends Pick<Event, 'type'>>(): EventStream<T>;
|
|
494
|
-
//#endregion
|
|
495
|
-
//#region src/core/features/resolve-presentation.d.ts
|
|
496
|
-
/**
|
|
497
|
-
* Action types for presentation resolution.
|
|
498
|
-
* Event names match HTMLMediaElement events (lowercase).
|
|
499
|
-
*/
|
|
500
|
-
type PresentationAction = {
|
|
501
|
-
type: 'play';
|
|
502
|
-
} | {
|
|
503
|
-
type: 'pause';
|
|
504
|
-
} | {
|
|
505
|
-
type: 'load';
|
|
506
|
-
url: string;
|
|
507
|
-
};
|
|
508
|
-
//#endregion
|
|
509
|
-
//#region src/core/features/resolve-track.d.ts
|
|
510
|
-
/**
|
|
511
|
-
* Action types for track resolution.
|
|
512
|
-
* Event names match HTMLMediaElement events (lowercase).
|
|
513
|
-
*/
|
|
514
|
-
type TrackResolutionAction = {
|
|
515
|
-
type: 'play';
|
|
516
|
-
} | {
|
|
517
|
-
type: 'pause';
|
|
518
|
-
};
|
|
519
|
-
//#endregion
|
|
520
|
-
//#region src/core/features/select-tracks.d.ts
|
|
521
|
-
/**
|
|
522
|
-
* Action types for track selection.
|
|
523
|
-
* Reserved for future event-driven selection triggers.
|
|
524
|
-
*/
|
|
525
|
-
type TrackSelectionAction = {
|
|
526
|
-
type: 'presentation-loaded';
|
|
527
|
-
};
|
|
528
|
-
//#endregion
|
|
529
|
-
//#region src/dom/playback-engine/engine.d.ts
|
|
530
|
-
/**
|
|
531
|
-
* Union of all action types used by playback engine orchestrations.
|
|
532
|
-
* Includes synthetic @@INITIALIZE@@ event for combineLatest bootstrapping.
|
|
533
|
-
*/
|
|
534
|
-
type PlaybackEngineAction = PresentationAction | TrackResolutionAction | TrackSelectionAction | {
|
|
535
|
-
type: '@@INITIALIZE@@';
|
|
536
|
-
};
|
|
537
|
-
/**
|
|
538
|
-
* Configuration for the playback engine.
|
|
539
|
-
*/
|
|
540
|
-
interface PlaybackEngineConfig {
|
|
541
|
-
/**
|
|
542
|
-
* Initial bandwidth estimate for cold start (bits per second).
|
|
543
|
-
* Default: 1 Mbps (conservative).
|
|
544
|
-
*/
|
|
545
|
-
initialBandwidth?: number;
|
|
546
|
-
/**
|
|
547
|
-
* Preferred audio language (ISO 639 code, e.g., "en", "es").
|
|
548
|
-
* If not specified, selects first audio track.
|
|
549
|
-
*/
|
|
550
|
-
preferredAudioLanguage?: string;
|
|
551
|
-
/**
|
|
552
|
-
* Preferred subtitle language (ISO 639 code, e.g., "en", "es").
|
|
553
|
-
* If specified, selects matching text track if available.
|
|
554
|
-
*/
|
|
555
|
-
preferredSubtitleLanguage?: string;
|
|
556
|
-
/**
|
|
557
|
-
* Include FORCED subtitle tracks in selection.
|
|
558
|
-
* Default: false (follows hls.js/http-streaming pattern)
|
|
559
|
-
*/
|
|
560
|
-
includeForcedTracks?: boolean;
|
|
561
|
-
/**
|
|
562
|
-
* Auto-select DEFAULT track (requires DEFAULT=YES + AUTOSELECT=YES in HLS).
|
|
563
|
-
* Default: false (user opt-in, matches hls.js/http-streaming)
|
|
564
|
-
*/
|
|
565
|
-
enableDefaultTrack?: boolean;
|
|
566
|
-
}
|
|
567
|
-
/**
|
|
568
|
-
* Combined state shape for the playback engine.
|
|
569
|
-
* Includes all state needed by orchestrations.
|
|
570
|
-
*/
|
|
571
|
-
interface PlaybackEngineState {
|
|
572
|
-
presentation?: any;
|
|
573
|
-
preload?: string;
|
|
574
|
-
selectedVideoTrackId?: string;
|
|
575
|
-
selectedAudioTrackId?: string;
|
|
576
|
-
selectedTextTrackId?: string;
|
|
577
|
-
bandwidthState?: BandwidthState;
|
|
578
|
-
abrDisabled?: boolean;
|
|
579
|
-
textBufferState?: TextTrackBufferState;
|
|
580
|
-
currentTime?: number;
|
|
581
|
-
playbackInitiated?: boolean;
|
|
582
|
-
}
|
|
583
|
-
/**
|
|
584
|
-
* Combined owners shape for the playback engine.
|
|
585
|
-
* Includes all mutable platform objects.
|
|
586
|
-
*/
|
|
587
|
-
interface PlaybackEngineOwners {
|
|
588
|
-
mediaElement?: HTMLMediaElement | undefined;
|
|
589
|
-
mediaSource?: MediaSource;
|
|
590
|
-
videoBuffer?: SourceBuffer;
|
|
591
|
-
audioBuffer?: SourceBuffer;
|
|
592
|
-
videoBufferActor?: SourceBufferActor;
|
|
593
|
-
audioBufferActor?: SourceBufferActor;
|
|
594
|
-
textTracks?: Map<string, HTMLTrackElement>;
|
|
595
|
-
}
|
|
596
|
-
/**
|
|
597
|
-
* Playback engine instance.
|
|
598
|
-
*/
|
|
599
|
-
interface PlaybackEngine {
|
|
600
|
-
/**
|
|
601
|
-
* Reactive state (for inspection/testing).
|
|
602
|
-
*/
|
|
603
|
-
state: ReturnType<typeof createState<PlaybackEngineState>>;
|
|
604
|
-
/**
|
|
605
|
-
* Mutable owners (for inspection/testing).
|
|
606
|
-
*/
|
|
607
|
-
owners: ReturnType<typeof createState<PlaybackEngineOwners>>;
|
|
608
|
-
/**
|
|
609
|
-
* Shared event stream (for inspection/testing/triggering events).
|
|
610
|
-
*/
|
|
611
|
-
events: ReturnType<typeof createEventStream<PlaybackEngineAction>>;
|
|
612
|
-
/**
|
|
613
|
-
* Cleanup function to destroy all orchestrations.
|
|
614
|
-
*/
|
|
615
|
-
destroy: () => void;
|
|
616
|
-
}
|
|
617
|
-
/**
|
|
618
|
-
* Create a POC playback engine.
|
|
619
|
-
*
|
|
620
|
-
* Wires together all orchestrations to create a reactive playback pipeline:
|
|
621
|
-
* 1. Resolve presentation (multivariant playlist)
|
|
622
|
-
* 2. Select initial video and audio tracks
|
|
623
|
-
* 3. Resolve selected tracks (media playlists)
|
|
624
|
-
* 4. Setup MediaSource
|
|
625
|
-
* 5. Setup SourceBuffers for video and audio
|
|
626
|
-
*
|
|
627
|
-
* Note: This is a POC - does not yet load/append segments.
|
|
628
|
-
*
|
|
629
|
-
* @param config - Playback engine configuration
|
|
630
|
-
* @returns Playback engine instance with state, owners, and destroy function
|
|
631
|
-
*
|
|
632
|
-
* @example
|
|
633
|
-
* const engine = createPlaybackEngine({
|
|
634
|
-
* initialBandwidth: 2_000_000,
|
|
635
|
-
* preferredAudioLanguage: 'en',
|
|
636
|
-
* });
|
|
637
|
-
*
|
|
638
|
-
* // Initialize by patching state and owners
|
|
639
|
-
* engine.owners.patch({ mediaElement: document.querySelector('video') });
|
|
640
|
-
* engine.state.patch({
|
|
641
|
-
* presentation: { url: 'https://example.com/playlist.m3u8' },
|
|
642
|
-
* preload: 'auto',
|
|
643
|
-
* });
|
|
644
|
-
*
|
|
645
|
-
* // Inspect state
|
|
646
|
-
* console.log(engine.state.current);
|
|
647
|
-
*
|
|
648
|
-
* // Cleanup
|
|
649
|
-
* engine.destroy();
|
|
650
|
-
*/
|
|
651
|
-
declare function createPlaybackEngine(config?: PlaybackEngineConfig): PlaybackEngine;
|
|
652
|
-
//#endregion
|
|
653
|
-
//#region src/dom/playback-engine/adapter.d.ts
|
|
654
|
-
/**
|
|
655
|
-
* HTMLMediaElement-compatible adapter for the SPF playback engine.
|
|
656
|
-
*
|
|
657
|
-
* Implements the src/play() contract per the WHATWG HTML spec so that SPF can
|
|
658
|
-
* be used anywhere a media element API is expected.
|
|
659
|
-
*
|
|
660
|
-
* A new engine is created on every src assignment — this fully tears down all
|
|
661
|
-
* state, SourceBuffers, and in-flight requests from the previous source before
|
|
662
|
-
* the next one begins. The media element reference is preserved across src
|
|
663
|
-
* changes and re-applied to the new engine automatically.
|
|
664
|
-
*
|
|
665
|
-
* @example
|
|
666
|
-
* const media = new SpfMedia({ preferredAudioLanguage: 'en' });
|
|
667
|
-
* media.attach(document.querySelector('video'));
|
|
668
|
-
* media.src = 'https://stream.mux.com/abc123.m3u8';
|
|
669
|
-
*
|
|
670
|
-
* // Change source — old engine is destroyed, new one starts clean:
|
|
671
|
-
* media.src = 'https://stream.mux.com/xyz456.m3u8';
|
|
672
|
-
*
|
|
673
|
-
* // Explicit teardown:
|
|
674
|
-
* media.destroy();
|
|
675
|
-
*/
|
|
676
|
-
declare class SpfMedia {
|
|
677
|
-
#private;
|
|
678
|
-
constructor(config?: PlaybackEngineConfig);
|
|
679
|
-
get engine(): PlaybackEngine;
|
|
680
|
-
attach(mediaElement: HTMLMediaElement): void;
|
|
681
|
-
detach(): void;
|
|
682
|
-
destroy(): void;
|
|
683
|
-
get src(): string;
|
|
684
|
-
set src(value: string);
|
|
685
|
-
play(): Promise<void>;
|
|
686
|
-
}
|
|
687
|
-
//#endregion
|
|
688
|
-
export { PresentationAction as a, SourceBufferActor as c, WritableState as d, BandwidthState as f, createPlaybackEngine as i, TrackSelectionState as l, PlaybackEngine as n, EventStream as o, PlaybackEngineConfig as r, loadTextTrackCues as s, SpfMedia as t, Presentation as u };
|
|
689
|
-
//# sourceMappingURL=adapter-l8iJN_GI.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-l8iJN_GI.d.ts","names":[],"sources":["../src/core/abr/bandwidth-estimator.ts","../src/core/state/create-state.ts","../src/core/types/index.ts","../src/core/utils/track-selection.ts","../src/core/actor.ts","../src/dom/media/source-buffer-actor.ts","../src/dom/features/load-text-track-cues.ts","../src/core/events/create-event-stream.ts","../src/core/features/resolve-presentation.ts","../src/core/features/resolve-track.ts","../src/core/features/select-tracks.ts","../src/dom/playback-engine/engine.ts","../src/dom/playback-engine/adapter.ts"],"sourcesContent":[],"mappings":"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"}
|