@mediafox/core 1.0.4 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -0
- package/dist/core/player-core.d.ts +4 -1
- package/dist/core/player-core.d.ts.map +1 -1
- package/dist/core/state-facade.d.ts +4 -1
- package/dist/core/state-facade.d.ts.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/mediafox.d.ts +44 -2
- package/dist/mediafox.d.ts.map +1 -1
- package/dist/playback/audio.d.ts +14 -0
- package/dist/playback/audio.d.ts.map +1 -1
- package/dist/playback/controller.d.ts +15 -0
- package/dist/playback/controller.d.ts.map +1 -1
- package/dist/playback/renderer.d.ts +36 -2
- package/dist/playback/renderer.d.ts.map +1 -1
- package/dist/playlist/manager.d.ts +36 -0
- package/dist/playlist/manager.d.ts.map +1 -0
- package/dist/plugins/context.d.ts +9 -0
- package/dist/plugins/context.d.ts.map +1 -0
- package/dist/plugins/index.d.ts +3 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/manager.d.ts +57 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/types.d.ts +191 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/sources/manager.d.ts +22 -1
- package/dist/sources/manager.d.ts.map +1 -1
- package/dist/sources/source.d.ts +41 -0
- package/dist/sources/source.d.ts.map +1 -0
- package/dist/sources/types.d.ts +2 -0
- package/dist/sources/types.d.ts.map +1 -1
- package/dist/state/store.d.ts +12 -1
- package/dist/state/store.d.ts.map +1 -1
- package/dist/state/types.d.ts +7 -1
- package/dist/state/types.d.ts.map +1 -1
- package/dist/tracks/manager.d.ts.map +1 -1
- package/dist/types.d.ts +37 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/mediafox.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { UnsubscribeFn } from './events/types';
|
|
2
|
+
import type { MediaFoxPlugin } from './plugins/types';
|
|
2
3
|
import type { SubtitleTrackRegistration, SubtitleTrackResource } from './tracks/types';
|
|
3
|
-
import type { AudioTrackInfo, LoadOptions, MediaSource, PlayerEventListener, PlayerEventMap, PlayerOptions, PlayerStateData, RendererType, ScreenshotOptions, SeekOptions, Subscription, SubtitleTrackInfo, VideoTrackInfo } from './types';
|
|
4
|
+
import type { AudioTrackInfo, LoadOptions, MediaSource, PlayerEventListener, PlayerEventMap, PlayerOptions, PlayerStateData, PlaylistItem, PlaylistMode, RendererType, ScreenshotOptions, SeekOptions, Subscription, SubtitleTrackInfo, VideoTrackInfo } from './types';
|
|
4
5
|
export declare class MediaFox {
|
|
5
6
|
private emitter;
|
|
6
7
|
private store;
|
|
@@ -8,6 +9,8 @@ export declare class MediaFox {
|
|
|
8
9
|
private sourceManager;
|
|
9
10
|
private playbackController;
|
|
10
11
|
private trackManager;
|
|
12
|
+
private playlistManager;
|
|
13
|
+
private pluginManager;
|
|
11
14
|
private options;
|
|
12
15
|
private disposed;
|
|
13
16
|
private getCurrentInput;
|
|
@@ -19,7 +22,9 @@ export declare class MediaFox {
|
|
|
19
22
|
* Load a media source and prepare playback.
|
|
20
23
|
* Emits: loadstart, loadedmetadata, loadeddata, canplay, canplaythrough (or error)
|
|
21
24
|
*/
|
|
22
|
-
load(source: MediaSource, options?: LoadOptions
|
|
25
|
+
load(source: MediaSource, options?: LoadOptions & {
|
|
26
|
+
replacePlaylist?: boolean;
|
|
27
|
+
}): Promise<void>;
|
|
23
28
|
/** Start playback. */
|
|
24
29
|
play(): Promise<void>;
|
|
25
30
|
pause(): void;
|
|
@@ -43,6 +48,7 @@ export declare class MediaFox {
|
|
|
43
48
|
get paused(): boolean;
|
|
44
49
|
get ended(): boolean;
|
|
45
50
|
get seeking(): boolean;
|
|
51
|
+
get waiting(): boolean;
|
|
46
52
|
getVideoTracks(): VideoTrackInfo[];
|
|
47
53
|
getAudioTracks(): AudioTrackInfo[];
|
|
48
54
|
getSubtitleTracks(): SubtitleTrackInfo[];
|
|
@@ -55,6 +61,32 @@ export declare class MediaFox {
|
|
|
55
61
|
/** Capture a screenshot of the current frame. */
|
|
56
62
|
screenshot(options?: ScreenshotOptions): Promise<Blob | null>;
|
|
57
63
|
setRenderTarget(canvas: HTMLCanvasElement | OffscreenCanvas): Promise<void>;
|
|
64
|
+
getRenderTarget(): HTMLCanvasElement | OffscreenCanvas | null;
|
|
65
|
+
/** @internal Refresh plugin overlays immediately */
|
|
66
|
+
refreshOverlays(): void;
|
|
67
|
+
loadPlaylist(items: Array<MediaSource | {
|
|
68
|
+
mediaSource: MediaSource;
|
|
69
|
+
title?: string;
|
|
70
|
+
poster?: string;
|
|
71
|
+
}>, options?: {
|
|
72
|
+
autoplay?: boolean;
|
|
73
|
+
startTime?: number;
|
|
74
|
+
}): Promise<void>;
|
|
75
|
+
addToPlaylist(item: MediaSource | {
|
|
76
|
+
mediaSource: MediaSource;
|
|
77
|
+
title?: string;
|
|
78
|
+
poster?: string;
|
|
79
|
+
}, index?: number): void;
|
|
80
|
+
removeFromPlaylist(index: number): Promise<void>;
|
|
81
|
+
clearPlaylist(): void;
|
|
82
|
+
next(): Promise<void>;
|
|
83
|
+
prev(): Promise<void>;
|
|
84
|
+
jumpTo(index: number): Promise<void>;
|
|
85
|
+
get playlist(): import("./types").Playlist;
|
|
86
|
+
get playlistIndex(): number | null;
|
|
87
|
+
get nowPlaying(): PlaylistItem | null;
|
|
88
|
+
get playlistMode(): PlaylistMode;
|
|
89
|
+
set playlistMode(mode: PlaylistMode);
|
|
58
90
|
getRendererType(): RendererType;
|
|
59
91
|
switchRenderer(type: RendererType): Promise<void>;
|
|
60
92
|
/**
|
|
@@ -69,6 +101,16 @@ export declare class MediaFox {
|
|
|
69
101
|
on<K extends keyof PlayerEventMap>(event: K, listener: PlayerEventListener<K>): UnsubscribeFn;
|
|
70
102
|
once<K extends keyof PlayerEventMap>(event: K, listener: PlayerEventListener<K>): UnsubscribeFn;
|
|
71
103
|
off<K extends keyof PlayerEventMap>(event: K, listener?: PlayerEventListener<K>): void;
|
|
104
|
+
/**
|
|
105
|
+
* Install a plugin.
|
|
106
|
+
* @param plugin The plugin to install
|
|
107
|
+
*/
|
|
108
|
+
use(plugin: MediaFoxPlugin): Promise<void>;
|
|
109
|
+
/**
|
|
110
|
+
* Uninstall a plugin by name.
|
|
111
|
+
* @param name The name of the plugin to uninstall
|
|
112
|
+
*/
|
|
113
|
+
unuse(name: string): Promise<void>;
|
|
72
114
|
private emit;
|
|
73
115
|
private checkDisposed;
|
|
74
116
|
dispose(): void;
|
package/dist/mediafox.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mediafox.d.ts","sourceRoot":"","sources":["../src/mediafox.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"mediafox.d.ts","sourceRoot":"","sources":["../src/mediafox.ts"],"names":[],"mappings":"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"}
|
package/dist/playback/audio.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type AudioSample, type InputAudioTrack, type WrappedAudioBuffer } from 'mediabunny';
|
|
2
|
+
import type { PluginManager } from '../plugins/manager';
|
|
2
3
|
export interface AudioManagerOptions {
|
|
3
4
|
audioContext?: AudioContext;
|
|
4
5
|
volume?: number;
|
|
@@ -7,6 +8,7 @@ export interface AudioManagerOptions {
|
|
|
7
8
|
export declare class AudioManager {
|
|
8
9
|
private audioContext;
|
|
9
10
|
private gainNode;
|
|
11
|
+
private outputNode;
|
|
10
12
|
private bufferSink;
|
|
11
13
|
private sampleSink;
|
|
12
14
|
private bufferIterator;
|
|
@@ -20,8 +22,15 @@ export declare class AudioManager {
|
|
|
20
22
|
private disposed;
|
|
21
23
|
private playbackId;
|
|
22
24
|
private playbackRate;
|
|
25
|
+
private pluginManager;
|
|
23
26
|
constructor(options?: AudioManagerOptions);
|
|
24
27
|
private setupAudioGraph;
|
|
28
|
+
setPluginManager(pluginManager: PluginManager): void;
|
|
29
|
+
/**
|
|
30
|
+
* Rebuild the audio graph with current plugin hooks.
|
|
31
|
+
* Call this after installing/uninstalling audio plugins.
|
|
32
|
+
*/
|
|
33
|
+
rebuildAudioGraph(): void;
|
|
25
34
|
setAudioTrack(track: InputAudioTrack): Promise<void>;
|
|
26
35
|
play(fromTime?: number): Promise<void>;
|
|
27
36
|
private scheduleAudioBuffers;
|
|
@@ -41,6 +50,11 @@ export declare class AudioManager {
|
|
|
41
50
|
getBufferAt(timestamp: number): Promise<WrappedAudioBuffer | null>;
|
|
42
51
|
getSampleAt(timestamp: number): Promise<AudioSample | null>;
|
|
43
52
|
private stopQueuedNodes;
|
|
53
|
+
/**
|
|
54
|
+
* Clears iterators to stop any in-flight async operations.
|
|
55
|
+
* Called before disposing the input to prevent accessing disposed resources.
|
|
56
|
+
*/
|
|
57
|
+
clearIterators(): Promise<void>;
|
|
44
58
|
dispose(): void;
|
|
45
59
|
destroy(): void;
|
|
46
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../src/playback/audio.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,WAAW,EAEhB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACxB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../src/playback/audio.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,WAAW,EAEhB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACxB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,UAAU,CAAgC;IAClD,OAAO,CAAC,UAAU,CAAgC;IAClD,OAAO,CAAC,cAAc,CAAkE;IACxF,OAAO,CAAC,WAAW,CAAyC;IAC5D,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,aAAa,CAA8B;gBAEvC,OAAO,GAAE,mBAAwB;IAmB7C,OAAO,CAAC,eAAe;IAevB,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,IAAI;IAKpD;;;OAGG;IACH,iBAAiB,IAAI,IAAI;IAkBnB,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBpD,IAAI,CAAC,QAAQ,GAAE,MAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;YAuB9C,oBAAoB;YA4CpB,cAAc;IAW5B,KAAK,IAAI,IAAI;IAkBb,IAAI,IAAI,IAAI;IAON,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc5C,cAAc,IAAI,MAAM;IAQxB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAK9B,OAAO,CAAC,UAAU;IAQlB,SAAS,IAAI,MAAM;IAInB,OAAO,IAAI,OAAO;IAIlB,SAAS,IAAI,OAAO;IAIpB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAkBnC,eAAe,IAAI,YAAY;IAIzB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAKlE,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAKjE,OAAO,CAAC,eAAe;IAWvB;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAcrC,OAAO,IAAI,IAAI;IAef,OAAO,IAAI,IAAI;CAYhB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { InputAudioTrack, InputVideoTrack } from 'mediabunny';
|
|
2
|
+
import type { PluginManager } from '../plugins/manager';
|
|
2
3
|
import { AudioManager } from './audio';
|
|
3
4
|
import { VideoRenderer } from './renderer';
|
|
4
5
|
export interface PlaybackControllerOptions {
|
|
@@ -20,8 +21,11 @@ export declare class PlaybackController {
|
|
|
20
21
|
private lastFrameTime;
|
|
21
22
|
private syncIntervalId;
|
|
22
23
|
private renderIntervalId;
|
|
24
|
+
private isWaiting;
|
|
23
25
|
private onTimeUpdate?;
|
|
24
26
|
private onEnded?;
|
|
27
|
+
private onWaiting?;
|
|
28
|
+
private onPlaying?;
|
|
25
29
|
constructor(options?: PlaybackControllerOptions);
|
|
26
30
|
setVideoTrack(track: InputVideoTrack | null): Promise<void>;
|
|
27
31
|
/**
|
|
@@ -54,6 +58,9 @@ export declare class PlaybackController {
|
|
|
54
58
|
getPlaybackRate(): number;
|
|
55
59
|
setTimeUpdateCallback(callback: (time: number) => void): void;
|
|
56
60
|
setEndedCallback(callback: () => void): void;
|
|
61
|
+
setWaitingCallback(callback: () => void): void;
|
|
62
|
+
setPlayingCallback(callback: () => void): void;
|
|
63
|
+
isBuffering(): boolean;
|
|
57
64
|
screenshot(options?: {
|
|
58
65
|
format?: 'png' | 'jpeg' | 'webp';
|
|
59
66
|
quality?: number;
|
|
@@ -65,6 +72,14 @@ export declare class PlaybackController {
|
|
|
65
72
|
updateCanvasDimensions(): void;
|
|
66
73
|
setRendererChangeCallback(callback: (type: import('./renderers').RendererType) => void): void;
|
|
67
74
|
setRendererFallbackCallback(callback: (from: import('./renderers').RendererType, to: import('./renderers').RendererType) => void): void;
|
|
75
|
+
setPluginManager(pluginManager: PluginManager): void;
|
|
76
|
+
getCanvas(): HTMLCanvasElement | OffscreenCanvas | null;
|
|
77
|
+
refreshOverlays(): void;
|
|
78
|
+
/**
|
|
79
|
+
* Rebuild the audio graph with current plugin hooks.
|
|
80
|
+
* Call this after installing/uninstalling audio plugins.
|
|
81
|
+
*/
|
|
82
|
+
rebuildAudioGraph(): void;
|
|
68
83
|
reset(): Promise<void>;
|
|
69
84
|
dispose(): void;
|
|
70
85
|
destroy(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/playback/controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAM3C,MAAM,WAAW,yBAAyB;IACxC,MAAM,CAAC,EAAE,iBAAiB,GAAG,eAAe,CAAC;IAC7C,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,aAAa,EAAE,YAAY,CAAC;CACnD;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,YAAY,CAAC,CAAyB;IAC9C,OAAO,CAAC,OAAO,CAAC,CAAa;
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/playback/controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,15 @@
|
|
|
1
|
-
import { type InputVideoTrack, type VideoSample, type WrappedCanvas } from 'mediabunny';
|
|
1
|
+
import { CanvasSink, type InputVideoTrack, type VideoSample, type WrappedCanvas } from 'mediabunny';
|
|
2
|
+
import type { PluginManager } from '../plugins/manager';
|
|
2
3
|
import type { RendererType } from './renderers';
|
|
4
|
+
/** @internal */
|
|
5
|
+
interface PrefetchedVideoData {
|
|
6
|
+
canvasSink: CanvasSink;
|
|
7
|
+
firstFrame: WrappedCanvas | null;
|
|
8
|
+
}
|
|
9
|
+
/** @internal */
|
|
10
|
+
export declare function registerPrefetchedVideoData(track: InputVideoTrack, data: PrefetchedVideoData): void;
|
|
11
|
+
/** @internal */
|
|
12
|
+
export declare function consumePrefetchedVideoData(track: InputVideoTrack): PrefetchedVideoData | undefined;
|
|
3
13
|
export interface VideoRendererOptions {
|
|
4
14
|
canvas?: HTMLCanvasElement | OffscreenCanvas;
|
|
5
15
|
width?: number;
|
|
@@ -31,6 +41,10 @@ export declare class VideoRenderer {
|
|
|
31
41
|
private lastObservedHeight;
|
|
32
42
|
private videoAspectRatio;
|
|
33
43
|
private debug;
|
|
44
|
+
private pluginManager;
|
|
45
|
+
private overlayCanvas;
|
|
46
|
+
private overlayCtx;
|
|
47
|
+
private lastOverlayTime;
|
|
34
48
|
constructor(options?: VideoRendererOptions);
|
|
35
49
|
private setupResizeObserver;
|
|
36
50
|
private getCanvasDimensionsFromEntry;
|
|
@@ -43,9 +57,22 @@ export declare class VideoRenderer {
|
|
|
43
57
|
setCanvas(canvas: HTMLCanvasElement | OffscreenCanvas): Promise<void>;
|
|
44
58
|
setVideoTrack(track: InputVideoTrack): Promise<void>;
|
|
45
59
|
seek(timestamp: number): Promise<void>;
|
|
46
|
-
updateFrame(currentTime: number):
|
|
60
|
+
updateFrame(currentTime: number): {
|
|
61
|
+
frameUpdated: boolean;
|
|
62
|
+
isStarving: boolean;
|
|
63
|
+
};
|
|
47
64
|
private fetchNextFrame;
|
|
48
65
|
private renderFrame;
|
|
66
|
+
private renderFrameWithPlugins;
|
|
67
|
+
private executeOverlays;
|
|
68
|
+
/**
|
|
69
|
+
* Refresh overlays immediately (e.g., when a plugin is installed/uninstalled).
|
|
70
|
+
* For WebGPU/WebGL, this clears and redraws the overlay canvas.
|
|
71
|
+
* For canvas2d, this triggers a frame re-render if a current frame exists.
|
|
72
|
+
*/
|
|
73
|
+
refreshOverlays(): void;
|
|
74
|
+
private ensureOverlayCanvas;
|
|
75
|
+
private cleanupOverlayCanvas;
|
|
49
76
|
getFrameAt(timestamp: number): Promise<WrappedCanvas | null>;
|
|
50
77
|
getSampleAt(timestamp: number): Promise<VideoSample | null>;
|
|
51
78
|
extractFrames(startTime: number, endTime: number, interval?: number): Promise<WrappedCanvas[]>;
|
|
@@ -66,8 +93,15 @@ export declare class VideoRenderer {
|
|
|
66
93
|
switchRenderer(type: RendererType): Promise<void>;
|
|
67
94
|
setRendererChangeCallback(callback: (type: RendererType) => void): void;
|
|
68
95
|
setRendererFallbackCallback(callback: (from: RendererType, to: RendererType) => void): void;
|
|
96
|
+
setPluginManager(pluginManager: PluginManager): void;
|
|
69
97
|
static getSupportedRenderers(): RendererType[];
|
|
98
|
+
/**
|
|
99
|
+
* Clears iterators to stop any in-flight async operations.
|
|
100
|
+
* Called before disposing the input to prevent accessing disposed resources.
|
|
101
|
+
*/
|
|
102
|
+
clearIterators(): Promise<void>;
|
|
70
103
|
private disposeVideoResources;
|
|
71
104
|
dispose(): void;
|
|
72
105
|
}
|
|
106
|
+
export {};
|
|
73
107
|
//# sourceMappingURL=renderer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/playback/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/playback/renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { TypedEventEmitter } from '../events/types';
|
|
2
|
+
import type { SourceManager } from '../sources/manager';
|
|
3
|
+
import type { StateStore } from '../state/types';
|
|
4
|
+
import type { MediaSource, PlayerEventMap, Playlist, PlaylistItem, PlaylistMode } from '../types';
|
|
5
|
+
interface PlaylistItemConfig {
|
|
6
|
+
mediaSource: MediaSource;
|
|
7
|
+
title?: string;
|
|
8
|
+
poster?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class PlaylistManager {
|
|
11
|
+
private store;
|
|
12
|
+
private emitter;
|
|
13
|
+
private switchSource?;
|
|
14
|
+
private sourceManager?;
|
|
15
|
+
constructor(store: StateStore, emitter: TypedEventEmitter<PlayerEventMap>, switchSource?: (item: PlaylistItem, autoplay: boolean) => Promise<void>, sourceManager?: SourceManager);
|
|
16
|
+
loadPlaylist(items: Array<MediaSource | PlaylistItemConfig>, options?: {
|
|
17
|
+
autoplay?: boolean;
|
|
18
|
+
startTime?: number;
|
|
19
|
+
}): Promise<void>;
|
|
20
|
+
addToPlaylist(itemInput: MediaSource | PlaylistItemConfig, index?: number): void;
|
|
21
|
+
removeFromPlaylist(index: number): Promise<void>;
|
|
22
|
+
clearPlaylist(): void;
|
|
23
|
+
next(): Promise<void>;
|
|
24
|
+
prev(): Promise<void>;
|
|
25
|
+
jumpTo(index: number): Promise<void>;
|
|
26
|
+
setMode(mode: PlaylistMode): void;
|
|
27
|
+
private switchTo;
|
|
28
|
+
private createPlaylistItem;
|
|
29
|
+
get playlist(): Playlist;
|
|
30
|
+
get currentIndex(): number | null;
|
|
31
|
+
get currentItem(): PlaylistItem | null;
|
|
32
|
+
get mode(): PlaylistMode;
|
|
33
|
+
dispose(): void;
|
|
34
|
+
}
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/playlist/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAQlG,UAAU,kBAAkB;IAC1B,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,YAAY,CAAC,CAA2D;IAChF,OAAO,CAAC,aAAa,CAAC,CAAgB;gBAGpC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC1C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,EACvE,aAAa,CAAC,EAAE,aAAa;IAQzB,YAAY,CAChB,KAAK,EAAE,KAAK,CAAC,WAAW,GAAG,kBAAkB,CAAC,EAC9C,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO,GACvD,OAAO,CAAC,IAAI,CAAC;IAqChB,aAAa,CAAC,SAAS,EAAE,WAAW,GAAG,kBAAkB,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAO1E,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BtD,aAAa,IAAI,IAAI;IAQf,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA+BrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IASrB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY1C,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;YAUnB,QAAQ;IAoCtB,OAAO,CAAC,kBAAkB;IAwB1B,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,YAAY,IAAI,MAAM,GAAG,IAAI,CAEhC;IAED,IAAI,WAAW,IAAI,YAAY,GAAG,IAAI,CAGrC;IAED,IAAI,IAAI,IAAI,YAAY,CAEvB;IAED,OAAO,IAAI,IAAI;CAShB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { MediaFox } from '../mediafox';
|
|
2
|
+
import type { InstalledPlugin, MediaFoxPlugin, PluginContext } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Creates a PluginContext for a plugin.
|
|
5
|
+
* The context provides controlled access to player internals.
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export declare function createPluginContext(player: MediaFox, plugin: MediaFoxPlugin, installedPlugin: InstalledPlugin, getInstalledPlugins: () => Map<string, InstalledPlugin>): PluginContext;
|
|
9
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/plugins/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE9E;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,cAAc,EACtB,eAAe,EAAE,eAAe,EAChC,mBAAmB,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GACtD,aAAa,CA8Ef"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,YAAY,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,WAAW,EACX,UAAU,GACX,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { WrappedCanvas } from 'mediabunny';
|
|
2
|
+
import type { MediaFox } from '../mediafox';
|
|
3
|
+
import type { MediaInfo, MediaSource, PlayerEventMap, PlayerStateData } from '../types';
|
|
4
|
+
import type { HookResult, MediaFoxPlugin, OverlayDimensions } from './types';
|
|
5
|
+
/**
|
|
6
|
+
* Manages plugin lifecycle and hook execution.
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export declare class PluginManager {
|
|
10
|
+
private player;
|
|
11
|
+
private plugins;
|
|
12
|
+
private overlays;
|
|
13
|
+
private overlaysSorted;
|
|
14
|
+
private registrationCounter;
|
|
15
|
+
constructor(player: MediaFox);
|
|
16
|
+
/**
|
|
17
|
+
* Install a plugin.
|
|
18
|
+
*/
|
|
19
|
+
install(plugin: MediaFoxPlugin): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Uninstall a plugin by name.
|
|
22
|
+
*/
|
|
23
|
+
uninstall(name: string): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Check if a plugin is installed.
|
|
26
|
+
*/
|
|
27
|
+
has(name: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Get installed plugin count.
|
|
30
|
+
*/
|
|
31
|
+
get size(): number;
|
|
32
|
+
executeBeforeLoad(source: MediaSource): Promise<HookResult<MediaSource> | undefined>;
|
|
33
|
+
executeAfterLoad(mediaInfo: MediaInfo): Promise<void>;
|
|
34
|
+
executeBeforePlay(): Promise<HookResult | undefined>;
|
|
35
|
+
executeAfterPlay(): void;
|
|
36
|
+
executeBeforePause(): Promise<HookResult | undefined>;
|
|
37
|
+
executeAfterPause(): void;
|
|
38
|
+
executeBeforeSeek(time: number): Promise<HookResult<number> | undefined>;
|
|
39
|
+
executeAfterSeek(time: number): void;
|
|
40
|
+
executeBeforeStop(): Promise<HookResult | undefined>;
|
|
41
|
+
executeAfterStop(): void;
|
|
42
|
+
executeOnError(error: Error): boolean;
|
|
43
|
+
executeOnEnded(): void;
|
|
44
|
+
executeBeforeRender(frame: WrappedCanvas, time: number): {
|
|
45
|
+
skip?: boolean;
|
|
46
|
+
} | undefined;
|
|
47
|
+
executeTransformFrame(frame: WrappedCanvas): WrappedCanvas;
|
|
48
|
+
executeAfterRender(canvas: HTMLCanvasElement | OffscreenCanvas): void;
|
|
49
|
+
executeOverlays(ctx: CanvasRenderingContext2D, time: number, dimensions: OverlayDimensions): void;
|
|
50
|
+
executeBeforeStateUpdate(update: Partial<PlayerStateData>): Partial<PlayerStateData> | null;
|
|
51
|
+
executeOnStateChange(state: PlayerStateData, prevState: PlayerStateData): void;
|
|
52
|
+
executeBeforeEvent<K extends keyof PlayerEventMap>(event: K, data: PlayerEventMap[K]): HookResult<PlayerEventMap[K]> | undefined;
|
|
53
|
+
executeAfterEvent<K extends keyof PlayerEventMap>(event: K, data: PlayerEventMap[K]): void;
|
|
54
|
+
executeOnAudioNode(audioContext: AudioContext, gainNode: GainNode): AudioNode;
|
|
55
|
+
dispose(): Promise<void>;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/plugins/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAExF,OAAO,KAAK,EACV,UAAU,EAEV,cAAc,EACd,iBAAiB,EAElB,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,qBAAa,aAAa;IAMZ,OAAO,CAAC,MAAM;IAL1B,OAAO,CAAC,OAAO,CAA2C;IAC1D,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,mBAAmB,CAAK;gBAEZ,MAAM,EAAE,QAAQ;IAEpC;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA4DpD;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsC5C;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAMK,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;IAgBpF,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAarD,iBAAiB,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAe1D,gBAAgB,IAAI,IAAI;IAalB,kBAAkB,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAe3D,iBAAiB,IAAI,IAAI;IAanB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IAgB9E,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAa9B,iBAAiB,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAe1D,gBAAgB,IAAI,IAAI;IAaxB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAgBrC,cAAc,IAAI,IAAI;IAiBtB,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS;IAevF,qBAAqB,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa;IAe1D,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,GAAG,eAAe,GAAG,IAAI;IAarE,eAAe,CAAC,GAAG,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,GAAG,IAAI;IA0BjG,wBAAwB,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IAgB3F,oBAAoB,CAAC,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,GAAG,IAAI;IAiB9E,kBAAkB,CAAC,CAAC,SAAS,MAAM,cAAc,EAC/C,KAAK,EAAE,CAAC,EACR,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GACtB,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;IAgB5C,iBAAiB,CAAC,CAAC,SAAS,MAAM,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI;IAiB1F,kBAAkB,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,GAAG,SAAS;IAsBvE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAW/B"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import type { WrappedCanvas } from 'mediabunny';
|
|
2
|
+
import type { MediaFox } from '../mediafox';
|
|
3
|
+
import type { MediaInfo, MediaSource, PlayerEventMap, PlayerStateData } from '../types';
|
|
4
|
+
/** A value that may or may not be a Promise */
|
|
5
|
+
export type MaybePromise<T> = T | Promise<T>;
|
|
6
|
+
/** Result from a hook that can cancel or modify an operation */
|
|
7
|
+
export interface HookResult<T = void> {
|
|
8
|
+
/** If true, cancel the operation */
|
|
9
|
+
cancel?: boolean;
|
|
10
|
+
/** Modified value to use instead of original */
|
|
11
|
+
data?: T;
|
|
12
|
+
}
|
|
13
|
+
/** Overlay render dimensions */
|
|
14
|
+
export interface OverlayDimensions {
|
|
15
|
+
width: number;
|
|
16
|
+
height: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Lifecycle hooks are called at key points during player operations.
|
|
20
|
+
* These hooks can be async and may cancel or modify operations.
|
|
21
|
+
*/
|
|
22
|
+
export interface LifecycleHooks {
|
|
23
|
+
/** Called before loading a media source. Can modify source or cancel. */
|
|
24
|
+
beforeLoad?(source: MediaSource): MaybePromise<HookResult<MediaSource> | undefined>;
|
|
25
|
+
/** Called after media is loaded successfully. */
|
|
26
|
+
afterLoad?(mediaInfo: MediaInfo): MaybePromise<void>;
|
|
27
|
+
/** Called before play starts. Can cancel play. */
|
|
28
|
+
beforePlay?(): MaybePromise<HookResult | undefined>;
|
|
29
|
+
/** Called after play has started. */
|
|
30
|
+
afterPlay?(): void;
|
|
31
|
+
/** Called before pause. Can cancel pause. */
|
|
32
|
+
beforePause?(): MaybePromise<HookResult | undefined>;
|
|
33
|
+
/** Called after pause completes. */
|
|
34
|
+
afterPause?(): void;
|
|
35
|
+
/** Called before seeking. Can modify seek time or cancel. */
|
|
36
|
+
beforeSeek?(time: number): MaybePromise<HookResult<number> | undefined>;
|
|
37
|
+
/** Called after seek completes. */
|
|
38
|
+
afterSeek?(time: number): void;
|
|
39
|
+
/** Called before stop. Can cancel stop. */
|
|
40
|
+
beforeStop?(): MaybePromise<HookResult | undefined>;
|
|
41
|
+
/** Called after stop completes. */
|
|
42
|
+
afterStop?(): void;
|
|
43
|
+
/** Called when an error occurs. Return { handled: true } to suppress. */
|
|
44
|
+
onError?(error: Error): {
|
|
45
|
+
handled?: boolean;
|
|
46
|
+
} | undefined;
|
|
47
|
+
/** Called when playback ends naturally. */
|
|
48
|
+
onEnded?(): void;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Render hooks are called during the video rendering pipeline.
|
|
52
|
+
* IMPORTANT: These must be synchronous for performance.
|
|
53
|
+
*/
|
|
54
|
+
export interface RenderHooks {
|
|
55
|
+
/** Called before a frame is rendered. Return { skip: true } to skip this frame. */
|
|
56
|
+
beforeRender?(frame: WrappedCanvas, time: number): {
|
|
57
|
+
skip?: boolean;
|
|
58
|
+
} | undefined;
|
|
59
|
+
/** Called to transform a frame before rendering. Return modified frame. */
|
|
60
|
+
transformFrame?(frame: WrappedCanvas): WrappedCanvas;
|
|
61
|
+
/** Called after frame is rendered to canvas. */
|
|
62
|
+
afterRender?(canvas: HTMLCanvasElement | OffscreenCanvas): void;
|
|
63
|
+
/**
|
|
64
|
+
* Canvas overlay hook - draws on top of video frame.
|
|
65
|
+
* zIndex controls layer order (higher = on top).
|
|
66
|
+
* Default zIndex is 0; plugins with same zIndex render in registration order.
|
|
67
|
+
*/
|
|
68
|
+
onOverlay?: {
|
|
69
|
+
/** Layer order - higher values render on top */
|
|
70
|
+
zIndex?: number;
|
|
71
|
+
/** Render function called each frame */
|
|
72
|
+
render(ctx: CanvasRenderingContext2D, time: number, dimensions: OverlayDimensions): void;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* State hooks are called when player state changes.
|
|
77
|
+
* These are synchronous.
|
|
78
|
+
*/
|
|
79
|
+
export interface StateHooks {
|
|
80
|
+
/** Called before state is updated. Return modified update or null to cancel. */
|
|
81
|
+
beforeStateUpdate?(update: Partial<PlayerStateData>): Partial<PlayerStateData> | null | undefined;
|
|
82
|
+
/** Called after state has changed. */
|
|
83
|
+
onStateChange?(state: PlayerStateData, prevState: PlayerStateData): void;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Event hooks allow intercepting and modifying player events.
|
|
87
|
+
* These are synchronous.
|
|
88
|
+
*/
|
|
89
|
+
export interface EventHooks {
|
|
90
|
+
/** Called before an event is emitted. Can modify data or cancel emission. */
|
|
91
|
+
beforeEvent?<K extends keyof PlayerEventMap>(event: K, data: PlayerEventMap[K]): HookResult<PlayerEventMap[K]> | undefined;
|
|
92
|
+
/** Called after an event is emitted. */
|
|
93
|
+
afterEvent?<K extends keyof PlayerEventMap>(event: K, data: PlayerEventMap[K]): void;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Audio hooks allow modifying the Web Audio graph.
|
|
97
|
+
* These are synchronous.
|
|
98
|
+
*/
|
|
99
|
+
export interface AudioHooks {
|
|
100
|
+
/**
|
|
101
|
+
* Called when audio graph is set up.
|
|
102
|
+
* Return a modified AudioNode to insert into the chain.
|
|
103
|
+
*/
|
|
104
|
+
onAudioNode?(audioContext: AudioContext, sourceNode: GainNode): AudioNode | undefined;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* All plugin hooks grouped by category.
|
|
108
|
+
*/
|
|
109
|
+
export interface PluginHooks {
|
|
110
|
+
lifecycle?: LifecycleHooks;
|
|
111
|
+
render?: RenderHooks;
|
|
112
|
+
state?: StateHooks;
|
|
113
|
+
event?: EventHooks;
|
|
114
|
+
audio?: AudioHooks;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Context provided to plugins during installation.
|
|
118
|
+
* Provides controlled access to player internals.
|
|
119
|
+
*/
|
|
120
|
+
export interface PluginContext {
|
|
121
|
+
/** Reference to the MediaFox player instance */
|
|
122
|
+
readonly player: MediaFox;
|
|
123
|
+
/** Get current player state (read-only) */
|
|
124
|
+
getState(): Readonly<PlayerStateData>;
|
|
125
|
+
/** Subscribe to state changes. Returns unsubscribe function. */
|
|
126
|
+
subscribe(listener: (state: PlayerStateData) => void): () => void;
|
|
127
|
+
/** Get plugin's private state */
|
|
128
|
+
getPluginState<T>(): T | undefined;
|
|
129
|
+
/** Set plugin's private state */
|
|
130
|
+
setPluginState<T>(state: T): void;
|
|
131
|
+
/** Subscribe to player event */
|
|
132
|
+
on<K extends keyof PlayerEventMap>(event: K, handler: (data: PlayerEventMap[K]) => void): void;
|
|
133
|
+
/** Unsubscribe from player event */
|
|
134
|
+
off<K extends keyof PlayerEventMap>(event: K, handler: (data: PlayerEventMap[K]) => void): void;
|
|
135
|
+
/** Get the player's render canvas */
|
|
136
|
+
getCanvas(): HTMLCanvasElement | OffscreenCanvas | null;
|
|
137
|
+
/** Get another plugin by name */
|
|
138
|
+
getPlugin<T extends MediaFoxPlugin>(name: string): T | undefined;
|
|
139
|
+
/** Check if a plugin is installed */
|
|
140
|
+
hasPlugin(name: string): boolean;
|
|
141
|
+
/** Log message with plugin prefix */
|
|
142
|
+
log(...args: unknown[]): void;
|
|
143
|
+
/** Log warning with plugin prefix */
|
|
144
|
+
warn(...args: unknown[]): void;
|
|
145
|
+
/** Log error with plugin prefix */
|
|
146
|
+
error(...args: unknown[]): void;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* MediaFox plugin interface.
|
|
150
|
+
* Plugins must implement this interface to be used with player.use().
|
|
151
|
+
*/
|
|
152
|
+
export interface MediaFoxPlugin {
|
|
153
|
+
/** Unique plugin name */
|
|
154
|
+
readonly name: string;
|
|
155
|
+
/** Plugin version (optional, for debugging) */
|
|
156
|
+
readonly version?: string;
|
|
157
|
+
/** Other plugins that must be installed first */
|
|
158
|
+
readonly dependencies?: string[];
|
|
159
|
+
/**
|
|
160
|
+
* Called when plugin is installed.
|
|
161
|
+
* Use context to set up event listeners and state.
|
|
162
|
+
*/
|
|
163
|
+
install(context: PluginContext): void | Promise<void>;
|
|
164
|
+
/**
|
|
165
|
+
* Called when plugin is uninstalled (optional).
|
|
166
|
+
* Clean up any external resources here.
|
|
167
|
+
* Event listeners registered via context.on() are auto-cleaned.
|
|
168
|
+
*/
|
|
169
|
+
uninstall?(): void | Promise<void>;
|
|
170
|
+
/**
|
|
171
|
+
* Plugin hooks (optional).
|
|
172
|
+
* Define hooks to intercept player operations.
|
|
173
|
+
*/
|
|
174
|
+
hooks?: PluginHooks;
|
|
175
|
+
}
|
|
176
|
+
/** @internal Installed plugin with context */
|
|
177
|
+
export interface InstalledPlugin {
|
|
178
|
+
plugin: MediaFoxPlugin;
|
|
179
|
+
context: PluginContext;
|
|
180
|
+
eventListeners: Map<keyof PlayerEventMap, Set<(data: unknown) => void>>;
|
|
181
|
+
stateUnsubscribes: Array<() => void>;
|
|
182
|
+
pluginState: unknown;
|
|
183
|
+
}
|
|
184
|
+
/** @internal Overlay entry for sorted rendering */
|
|
185
|
+
export interface OverlayEntry {
|
|
186
|
+
pluginName: string;
|
|
187
|
+
zIndex: number;
|
|
188
|
+
registrationOrder: number;
|
|
189
|
+
render: RenderHooks['onOverlay'];
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"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"}
|