@mediafox/core 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +326 -0
- package/dist/core/player-core.d.ts +27 -0
- package/dist/core/player-core.d.ts.map +1 -0
- package/dist/core/state-facade.d.ts +25 -0
- package/dist/core/state-facade.d.ts.map +1 -0
- package/dist/core/track-switcher.d.ts +29 -0
- package/dist/core/track-switcher.d.ts.map +1 -0
- package/dist/events/emitter.d.ts +18 -0
- package/dist/events/emitter.d.ts.map +1 -0
- package/dist/events/types.d.ts +16 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/mediafox.d.ts +72 -0
- package/dist/mediafox.d.ts.map +1 -0
- package/dist/playback/audio.d.ts +47 -0
- package/dist/playback/audio.d.ts.map +1 -0
- package/dist/playback/controller.d.ts +70 -0
- package/dist/playback/controller.d.ts.map +1 -0
- package/dist/playback/renderer.d.ts +53 -0
- package/dist/playback/renderer.d.ts.map +1 -0
- package/dist/playback/renderers/canvas2d.d.ts +16 -0
- package/dist/playback/renderers/canvas2d.d.ts.map +1 -0
- package/dist/playback/renderers/factory.d.ts +25 -0
- package/dist/playback/renderers/factory.d.ts.map +1 -0
- package/dist/playback/renderers/index.d.ts +6 -0
- package/dist/playback/renderers/index.d.ts.map +1 -0
- package/dist/playback/renderers/types.d.ts +40 -0
- package/dist/playback/renderers/types.d.ts.map +1 -0
- package/dist/playback/renderers/webgl.d.ts +32 -0
- package/dist/playback/renderers/webgl.d.ts.map +1 -0
- package/dist/playback/renderers/webgpu.d.ts +32 -0
- package/dist/playback/renderers/webgpu.d.ts.map +1 -0
- package/dist/sources/manager.d.ts +17 -0
- package/dist/sources/manager.d.ts.map +1 -0
- package/dist/sources/types.d.ts +14 -0
- package/dist/sources/types.d.ts.map +1 -0
- package/dist/state/store.d.ts +32 -0
- package/dist/state/store.d.ts.map +1 -0
- package/dist/state/types.d.ts +10 -0
- package/dist/state/types.d.ts.map +1 -0
- package/dist/tracks/manager.d.ts +45 -0
- package/dist/tracks/manager.d.ts.map +1 -0
- package/dist/tracks/types.d.ts +26 -0
- package/dist/tracks/types.d.ts.map +1 -0
- package/dist/types.d.ts +196 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils/async-lock.d.ts +5 -0
- package/dist/utils/async-lock.d.ts.map +1 -0
- package/dist/utils/dispose.d.ts +11 -0
- package/dist/utils/dispose.d.ts.map +1 -0
- package/dist/utils/equal.d.ts +2 -0
- package/dist/utils/equal.d.ts.map +1 -0
- package/dist/utils/errors.d.ts +30 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +23 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/time.d.ts +83 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { MediaSource } from '../types';
|
|
2
|
+
import type { SourceInfo, SourceManagerOptions } from './types';
|
|
3
|
+
export declare class SourceManager {
|
|
4
|
+
private currentSource;
|
|
5
|
+
private options;
|
|
6
|
+
constructor(options?: SourceManagerOptions);
|
|
7
|
+
createSource(media: MediaSource): Promise<SourceInfo>;
|
|
8
|
+
getCurrentSource(): SourceInfo | null;
|
|
9
|
+
getOriginalSource(): MediaSource | null;
|
|
10
|
+
dispose(): void;
|
|
11
|
+
static isStreamingSource(media: MediaSource): boolean;
|
|
12
|
+
static isLocalSource(media: MediaSource): boolean;
|
|
13
|
+
static getSourceType(media: MediaSource): string;
|
|
14
|
+
static fromFetch(url: string | URL, init?: RequestInit): Promise<Blob>;
|
|
15
|
+
static fromStreamingFetch(url: string | URL, init?: RequestInit): ReadableStream<Uint8Array>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/sources/manager.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEhE,qBAAa,aAAa;IACxB,OAAO,CAAC,aAAa,CAA2B;IAChD,OAAO,CAAC,OAAO,CAAuB;gBAE1B,OAAO,GAAE,oBAAyB;IAQxC,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAsD3D,gBAAgB,IAAI,UAAU,GAAG,IAAI;IAIrC,iBAAiB,IAAI,WAAW,GAAG,IAAI;IAIvC,OAAO,IAAI,IAAI;IAKf,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO;IAIrD,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO;IAUjD,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM;WAanC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAS5E,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC;CA4B7F"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Input, Source } from 'mediabunny';
|
|
2
|
+
import type { MediaSource } from '../types';
|
|
3
|
+
export interface SourceManagerOptions {
|
|
4
|
+
maxCacheSize?: number;
|
|
5
|
+
crossOrigin?: string;
|
|
6
|
+
requestInit?: RequestInit;
|
|
7
|
+
}
|
|
8
|
+
export interface SourceInfo {
|
|
9
|
+
source: Source;
|
|
10
|
+
input: Input | null;
|
|
11
|
+
type: 'blob' | 'buffer' | 'url' | 'file' | 'stream';
|
|
12
|
+
originalSource: MediaSource;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sources/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;IACpD,cAAc,EAAE,WAAW,CAAC;CAC7B"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { AudioTrackInfo, MediaInfo, PlayerStateData, SubtitleTrackInfo, TimeRange, VideoTrackInfo } from '../types';
|
|
2
|
+
import type { StateListener, StateStore, StateUnsubscribe } from './types';
|
|
3
|
+
export declare class Store implements StateStore {
|
|
4
|
+
private state;
|
|
5
|
+
private listeners;
|
|
6
|
+
private updateScheduled;
|
|
7
|
+
private pendingUpdates;
|
|
8
|
+
constructor();
|
|
9
|
+
private getInitialState;
|
|
10
|
+
getState(): Readonly<PlayerStateData>;
|
|
11
|
+
setState(updates: Partial<PlayerStateData>): void;
|
|
12
|
+
private flushUpdates;
|
|
13
|
+
subscribe(listener: StateListener): StateUnsubscribe;
|
|
14
|
+
reset(): void;
|
|
15
|
+
private notifyListeners;
|
|
16
|
+
updatePlaybackState(playing: boolean): void;
|
|
17
|
+
updateTime(currentTime: number): void;
|
|
18
|
+
updateDuration(duration: number): void;
|
|
19
|
+
updateBuffered(buffered: TimeRange[]): void;
|
|
20
|
+
updateVolume(volume: number, muted: boolean): void;
|
|
21
|
+
updatePlaybackRate(playbackRate: number): void;
|
|
22
|
+
updateMediaInfo(mediaInfo: MediaInfo | null): void;
|
|
23
|
+
updateTracks(videoTracks?: VideoTrackInfo[], audioTracks?: AudioTrackInfo[], subtitleTracks?: SubtitleTrackInfo[]): void;
|
|
24
|
+
updateSelectedTracks(type: 'video' | 'audio' | 'subtitle', trackId: string | null): void;
|
|
25
|
+
updateError(error: Error | null): void;
|
|
26
|
+
updateSeekingState(seeking: boolean): void;
|
|
27
|
+
updateReadyState(canPlay: boolean, canPlayThrough: boolean): void;
|
|
28
|
+
updateEndedState(ended: boolean): void;
|
|
29
|
+
updateLoadingState(): void;
|
|
30
|
+
updateRendererType(rendererType: import('../types').RendererType): void;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/state/store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EAET,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,cAAc,EACf,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3E,qBAAa,KAAM,YAAW,UAAU;IACtC,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,cAAc,CAAgC;;IAMtD,OAAO,CAAC,eAAe;IAgCvB,QAAQ,IAAI,QAAQ,CAAC,eAAe,CAAC;IAIrC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IASjD,OAAO,CAAC,YAAY;IAqBpB,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,gBAAgB;IAWpD,KAAK,IAAI,IAAI;IAOb,OAAO,CAAC,eAAe;IAYvB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAU3C,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIrC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAItC,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI;IAI3C,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAIlD,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAI9C,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IAIlD,YAAY,CACV,WAAW,CAAC,EAAE,cAAc,EAAE,EAC9B,WAAW,CAAC,EAAE,cAAc,EAAE,EAC9B,cAAc,CAAC,EAAE,iBAAiB,EAAE,GACnC,IAAI;IAQP,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAcxF,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI;IAOtC,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAI1C,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,GAAG,IAAI;IAQjE,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAStC,kBAAkB,IAAI,IAAI;IAU1B,kBAAkB,CAAC,YAAY,EAAE,OAAO,UAAU,EAAE,YAAY,GAAG,IAAI;CAGxE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { PlayerStateData } from '../types';
|
|
2
|
+
export type StateListener = (state: PlayerStateData) => void;
|
|
3
|
+
export type StateUnsubscribe = () => void;
|
|
4
|
+
export interface StateStore {
|
|
5
|
+
getState(): Readonly<PlayerStateData>;
|
|
6
|
+
setState(updates: Partial<PlayerStateData>): void;
|
|
7
|
+
subscribe(listener: StateListener): StateUnsubscribe;
|
|
8
|
+
reset(): void;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/state/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;AAC7D,MAAM,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC;AAE1C,MAAM,WAAW,UAAU;IACzB,QAAQ,IAAI,QAAQ,CAAC,eAAe,CAAC,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;IAClD,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,gBAAgB,CAAC;IACrD,KAAK,IAAI,IAAI,CAAC;CACf"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Input, InputAudioTrack, InputVideoTrack } from 'mediabunny';
|
|
2
|
+
import type { AudioTrackInfo, SubtitleTrackInfo, VideoTrackInfo } from '../types';
|
|
3
|
+
import type { SubtitleTrackRegistration, SubtitleTrackResource, TrackManagerState, TrackSelectionEvent } from './types';
|
|
4
|
+
export declare class TrackManager {
|
|
5
|
+
private input;
|
|
6
|
+
private videoTracks;
|
|
7
|
+
private audioTracks;
|
|
8
|
+
private videoTrackInfos;
|
|
9
|
+
private audioTrackInfos;
|
|
10
|
+
private subtitleTrackInfos;
|
|
11
|
+
private subtitleProviders;
|
|
12
|
+
private subtitleTrackResolvers;
|
|
13
|
+
private selectedVideoTrack;
|
|
14
|
+
private selectedAudioTrack;
|
|
15
|
+
private selectedSubtitleTrack;
|
|
16
|
+
private onTrackChange?;
|
|
17
|
+
initialize(input: Input): Promise<void>;
|
|
18
|
+
private loadTracks;
|
|
19
|
+
getVideoTracks(): VideoTrackInfo[];
|
|
20
|
+
getAudioTracks(): AudioTrackInfo[];
|
|
21
|
+
getSubtitleTracks(): SubtitleTrackInfo[];
|
|
22
|
+
getSelectedVideoTrack(): InputVideoTrack | null;
|
|
23
|
+
getSelectedAudioTrack(): InputAudioTrack | null;
|
|
24
|
+
getSelectedVideoTrackInfo(): VideoTrackInfo | null;
|
|
25
|
+
getSelectedAudioTrackInfo(): AudioTrackInfo | null;
|
|
26
|
+
getSelectedSubtitleTrackInfo(): SubtitleTrackInfo | null;
|
|
27
|
+
selectVideoTrack(trackId: string | null): boolean;
|
|
28
|
+
selectAudioTrack(trackId: string | null): boolean;
|
|
29
|
+
selectSubtitleTrack(trackId: string | null): boolean;
|
|
30
|
+
registerSubtitleTracks(sourceId: string, entries: SubtitleTrackRegistration[]): void;
|
|
31
|
+
unregisterSubtitleTracks(sourceId: string): void;
|
|
32
|
+
getSubtitleTrackResource(trackId: string | null): Promise<SubtitleTrackResource | null>;
|
|
33
|
+
private rebuildSubtitleTracks;
|
|
34
|
+
setTrackChangeListener(listener: (event: TrackSelectionEvent) => void): void;
|
|
35
|
+
getState(): TrackManagerState;
|
|
36
|
+
getPrimaryVideoTrack(): InputVideoTrack | null;
|
|
37
|
+
getPrimaryAudioTrack(): InputAudioTrack | null;
|
|
38
|
+
hasVideo(): boolean;
|
|
39
|
+
hasAudio(): boolean;
|
|
40
|
+
hasSubtitles(): boolean;
|
|
41
|
+
dispose(): void;
|
|
42
|
+
replaceAudioTrackByInputId(originalInputId: number, newTrack: InputAudioTrack): Promise<void>;
|
|
43
|
+
replaceVideoTrackByInputId(originalInputId: number, newTrack: InputVideoTrack): Promise<void>;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/tracks/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE1E,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAElF,OAAO,KAAK,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAExH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,WAAW,CAA2C;IAC9D,OAAO,CAAC,WAAW,CAA2C;IAC9D,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,kBAAkB,CAA2B;IACrD,OAAO,CAAC,iBAAiB,CAAuD;IAChF,OAAO,CAAC,sBAAsB,CAAgE;IAC9F,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,qBAAqB,CAAuB;IACpD,OAAO,CAAC,aAAa,CAAC,CAAuC;IAEvD,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;YAK/B,UAAU;IAuFxB,cAAc,IAAI,cAAc,EAAE;IAIlC,cAAc,IAAI,cAAc,EAAE;IAIlC,iBAAiB,IAAI,iBAAiB,EAAE;IAIxC,qBAAqB,IAAI,eAAe,GAAG,IAAI;IAK/C,qBAAqB,IAAI,eAAe,GAAG,IAAI;IAK/C,yBAAyB,IAAI,cAAc,GAAG,IAAI;IAKlD,yBAAyB,IAAI,cAAc,GAAG,IAAI;IAKlD,4BAA4B,IAAI,iBAAiB,GAAG,IAAI;IAKxD,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;IA4BjD,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;IA4BjD,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;IA4BpD,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,yBAAyB,EAAE,GAAG,IAAI;IAKpF,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAO1C,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAO7F,OAAO,CAAC,qBAAqB;IAoC7B,sBAAsB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,GAAG,IAAI;IAI5E,QAAQ,IAAI,iBAAiB;IAW7B,oBAAoB,IAAI,eAAe,GAAG,IAAI;IAO9C,oBAAoB,IAAI,eAAe,GAAG,IAAI;IAO9C,QAAQ,IAAI,OAAO;IAInB,QAAQ,IAAI,OAAO;IAInB,YAAY,IAAI,OAAO;IAIvB,OAAO,IAAI,IAAI;IAgBT,0BAA0B,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC7F,0BAA0B,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CAiCpG"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { AudioTrackInfo, SubtitleTrackInfo, VideoTrackInfo } from '../types';
|
|
2
|
+
export type SubtitleTrackFormat = 'ass' | 'srt' | 'vtt';
|
|
3
|
+
export interface SubtitleTrackResource {
|
|
4
|
+
format: SubtitleTrackFormat;
|
|
5
|
+
content?: string;
|
|
6
|
+
url?: string;
|
|
7
|
+
fonts?: Array<string | Uint8Array>;
|
|
8
|
+
}
|
|
9
|
+
export interface SubtitleTrackRegistration {
|
|
10
|
+
info: SubtitleTrackInfo;
|
|
11
|
+
resolver: () => Promise<SubtitleTrackResource>;
|
|
12
|
+
}
|
|
13
|
+
export interface TrackManagerState {
|
|
14
|
+
videoTracks: VideoTrackInfo[];
|
|
15
|
+
audioTracks: AudioTrackInfo[];
|
|
16
|
+
subtitleTracks: SubtitleTrackInfo[];
|
|
17
|
+
selectedVideoTrack: string | null;
|
|
18
|
+
selectedAudioTrack: string | null;
|
|
19
|
+
selectedSubtitleTrack: string | null;
|
|
20
|
+
}
|
|
21
|
+
export interface TrackSelectionEvent {
|
|
22
|
+
type: 'video' | 'audio' | 'subtitle';
|
|
23
|
+
previousTrackId: string | null;
|
|
24
|
+
newTrackId: string | null;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tracks/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAElF,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAExD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,MAAM,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,cAAc,EAAE,iBAAiB,EAAE,CAAC;IACpC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;IACrC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import type { AudioCodec, MetadataTags, SubtitleCodec, VideoCodec } from 'mediabunny';
|
|
2
|
+
export type MediaSource = File | Blob | string | URL | ArrayBuffer | Uint8Array | ReadableStream<Uint8Array>;
|
|
3
|
+
export type PlayerState = 'idle' | 'loading' | 'ready' | 'playing' | 'paused' | 'ended' | 'error';
|
|
4
|
+
export type PlaybackMode = 'normal' | 'loop' | 'loop-one';
|
|
5
|
+
export type RendererType = 'webgpu' | 'webgl' | 'canvas2d';
|
|
6
|
+
export interface PlayerOptions {
|
|
7
|
+
renderTarget?: HTMLCanvasElement | OffscreenCanvas;
|
|
8
|
+
audioContext?: AudioContext;
|
|
9
|
+
volume?: number;
|
|
10
|
+
muted?: boolean;
|
|
11
|
+
playbackRate?: number;
|
|
12
|
+
autoplay?: boolean;
|
|
13
|
+
preload?: 'none' | 'metadata' | 'auto';
|
|
14
|
+
crossOrigin?: string;
|
|
15
|
+
maxCacheSize?: number;
|
|
16
|
+
renderer?: RendererType;
|
|
17
|
+
}
|
|
18
|
+
export interface MediaInfo {
|
|
19
|
+
duration: number;
|
|
20
|
+
format: string;
|
|
21
|
+
mimeType: string;
|
|
22
|
+
metadata: MetadataTags;
|
|
23
|
+
hasVideo: boolean;
|
|
24
|
+
hasAudio: boolean;
|
|
25
|
+
hasSubtitles: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface VideoTrackInfo {
|
|
28
|
+
id: string;
|
|
29
|
+
codec: VideoCodec | null;
|
|
30
|
+
language: string;
|
|
31
|
+
name: string | null;
|
|
32
|
+
width: number;
|
|
33
|
+
height: number;
|
|
34
|
+
frameRate: number;
|
|
35
|
+
bitrate: number;
|
|
36
|
+
rotation: 0 | 90 | 180 | 270;
|
|
37
|
+
selected: boolean;
|
|
38
|
+
decodable: boolean;
|
|
39
|
+
}
|
|
40
|
+
export interface AudioTrackInfo {
|
|
41
|
+
id: string;
|
|
42
|
+
codec: AudioCodec | null;
|
|
43
|
+
language: string;
|
|
44
|
+
name: string | null;
|
|
45
|
+
channels: number;
|
|
46
|
+
sampleRate: number;
|
|
47
|
+
bitrate: number;
|
|
48
|
+
selected: boolean;
|
|
49
|
+
decodable: boolean;
|
|
50
|
+
}
|
|
51
|
+
export interface SubtitleTrackInfo {
|
|
52
|
+
id: string;
|
|
53
|
+
codec: SubtitleCodec | null;
|
|
54
|
+
language: string;
|
|
55
|
+
name: string | null;
|
|
56
|
+
selected: boolean;
|
|
57
|
+
}
|
|
58
|
+
export interface PlayerStateData {
|
|
59
|
+
state: PlayerState;
|
|
60
|
+
currentTime: number;
|
|
61
|
+
duration: number;
|
|
62
|
+
buffered: TimeRange[];
|
|
63
|
+
volume: number;
|
|
64
|
+
muted: boolean;
|
|
65
|
+
playbackRate: number;
|
|
66
|
+
playing: boolean;
|
|
67
|
+
paused: boolean;
|
|
68
|
+
ended: boolean;
|
|
69
|
+
seeking: boolean;
|
|
70
|
+
error: Error | null;
|
|
71
|
+
mediaInfo: MediaInfo | null;
|
|
72
|
+
videoTracks: VideoTrackInfo[];
|
|
73
|
+
audioTracks: AudioTrackInfo[];
|
|
74
|
+
subtitleTracks: SubtitleTrackInfo[];
|
|
75
|
+
selectedVideoTrack: string | null;
|
|
76
|
+
selectedAudioTrack: string | null;
|
|
77
|
+
selectedSubtitleTrack: string | null;
|
|
78
|
+
canPlay: boolean;
|
|
79
|
+
canPlayThrough: boolean;
|
|
80
|
+
isLive: boolean;
|
|
81
|
+
rendererType: RendererType;
|
|
82
|
+
}
|
|
83
|
+
export interface TimeRange {
|
|
84
|
+
start: number;
|
|
85
|
+
end: number;
|
|
86
|
+
}
|
|
87
|
+
export interface SeekOptions {
|
|
88
|
+
precise?: boolean;
|
|
89
|
+
keyframe?: boolean;
|
|
90
|
+
}
|
|
91
|
+
export interface LoadOptions {
|
|
92
|
+
autoplay?: boolean;
|
|
93
|
+
startTime?: number;
|
|
94
|
+
}
|
|
95
|
+
export interface ScreenshotOptions {
|
|
96
|
+
format?: 'png' | 'jpeg' | 'webp';
|
|
97
|
+
quality?: number;
|
|
98
|
+
width?: number;
|
|
99
|
+
height?: number;
|
|
100
|
+
fit?: 'fill' | 'contain' | 'cover';
|
|
101
|
+
}
|
|
102
|
+
export interface QualityLevel {
|
|
103
|
+
id: string;
|
|
104
|
+
label: string;
|
|
105
|
+
width?: number;
|
|
106
|
+
height?: number;
|
|
107
|
+
bitrate?: number;
|
|
108
|
+
codec?: VideoCodec;
|
|
109
|
+
auto?: boolean;
|
|
110
|
+
}
|
|
111
|
+
export type PlayerEventMap = {
|
|
112
|
+
statechange: PlayerStateData;
|
|
113
|
+
loadstart: undefined;
|
|
114
|
+
loadedmetadata: MediaInfo;
|
|
115
|
+
loadeddata: undefined;
|
|
116
|
+
canplay: undefined;
|
|
117
|
+
canplaythrough: undefined;
|
|
118
|
+
play: undefined;
|
|
119
|
+
pause: undefined;
|
|
120
|
+
playing: undefined;
|
|
121
|
+
ended: undefined;
|
|
122
|
+
timeupdate: {
|
|
123
|
+
currentTime: number;
|
|
124
|
+
};
|
|
125
|
+
durationchange: {
|
|
126
|
+
duration: number;
|
|
127
|
+
};
|
|
128
|
+
volumechange: {
|
|
129
|
+
volume: number;
|
|
130
|
+
muted: boolean;
|
|
131
|
+
};
|
|
132
|
+
ratechange: {
|
|
133
|
+
playbackRate: number;
|
|
134
|
+
};
|
|
135
|
+
seeking: {
|
|
136
|
+
currentTime: number;
|
|
137
|
+
};
|
|
138
|
+
seeked: {
|
|
139
|
+
currentTime: number;
|
|
140
|
+
};
|
|
141
|
+
waiting: undefined;
|
|
142
|
+
progress: {
|
|
143
|
+
buffered: TimeRange[];
|
|
144
|
+
};
|
|
145
|
+
error: Error;
|
|
146
|
+
warning: {
|
|
147
|
+
type: string;
|
|
148
|
+
message: string;
|
|
149
|
+
error?: Error;
|
|
150
|
+
};
|
|
151
|
+
trackchange: {
|
|
152
|
+
type: 'video' | 'audio' | 'subtitle';
|
|
153
|
+
trackId: string | null;
|
|
154
|
+
};
|
|
155
|
+
qualitychange: {
|
|
156
|
+
qualityId: string;
|
|
157
|
+
auto: boolean;
|
|
158
|
+
};
|
|
159
|
+
resize: {
|
|
160
|
+
width: number;
|
|
161
|
+
height: number;
|
|
162
|
+
};
|
|
163
|
+
rendererchange: RendererType;
|
|
164
|
+
rendererfallback: {
|
|
165
|
+
from: RendererType;
|
|
166
|
+
to: RendererType;
|
|
167
|
+
};
|
|
168
|
+
};
|
|
169
|
+
export type PlayerEventListener<K extends keyof PlayerEventMap> = (event: PlayerEventMap[K]) => void;
|
|
170
|
+
export interface Subscription {
|
|
171
|
+
unsubscribe(): void;
|
|
172
|
+
}
|
|
173
|
+
export interface PerformanceMetrics {
|
|
174
|
+
droppedFrames: number;
|
|
175
|
+
totalFrames: number;
|
|
176
|
+
decodedFrames: number;
|
|
177
|
+
currentFPS: number;
|
|
178
|
+
averageFPS: number;
|
|
179
|
+
bufferHealth: number;
|
|
180
|
+
latency: number;
|
|
181
|
+
bandwidth: number;
|
|
182
|
+
}
|
|
183
|
+
export interface ChapterInfo {
|
|
184
|
+
id: string;
|
|
185
|
+
title: string;
|
|
186
|
+
startTime: number;
|
|
187
|
+
endTime: number;
|
|
188
|
+
thumbnail?: string;
|
|
189
|
+
}
|
|
190
|
+
export interface CuePoint {
|
|
191
|
+
id: string;
|
|
192
|
+
time: number;
|
|
193
|
+
type: string;
|
|
194
|
+
data?: unknown;
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-lock.d.ts","sourceRoot":"","sources":["../../src/utils/async-lock.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAuC;IAE/C,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAsB5D"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safely calls return() on an AsyncGenerator if present, swallowing errors.
|
|
3
|
+
* Used to ensure iterators are properly cleaned up without leaking promises.
|
|
4
|
+
*/
|
|
5
|
+
export declare function safeAsyncReturn<T, TReturn = unknown, TNext = unknown>(iterator: AsyncGenerator<T, TReturn, TNext> | null | undefined): void;
|
|
6
|
+
/**
|
|
7
|
+
* Clear interval/RAF ids safely.
|
|
8
|
+
*/
|
|
9
|
+
export declare function safeClearInterval(id: number | null): null;
|
|
10
|
+
export declare function safeCancelAnimationFrame(id: number | null): null;
|
|
11
|
+
//# sourceMappingURL=dispose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispose.d.ts","sourceRoot":"","sources":["../../src/utils/dispose.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO,EACnE,QAAQ,EAAE,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,IAAI,GAAG,SAAS,GAC7D,IAAI,CAQN;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAGzD;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAGhE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"equal.d.ts","sourceRoot":"","sources":["../../src/utils/equal.ts"],"names":[],"mappings":"AACA,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CA2B3D"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export declare enum ErrorCode {
|
|
2
|
+
MEDIA_NOT_SUPPORTED = "MEDIA_NOT_SUPPORTED",
|
|
3
|
+
MEDIA_LOAD_FAILED = "MEDIA_LOAD_FAILED",
|
|
4
|
+
DECODE_ERROR = "DECODE_ERROR",
|
|
5
|
+
NETWORK_ERROR = "NETWORK_ERROR",
|
|
6
|
+
PERMISSION_DENIED = "PERMISSION_DENIED",
|
|
7
|
+
PLAYBACK_ERROR = "PLAYBACK_ERROR",
|
|
8
|
+
TRACK_NOT_FOUND = "TRACK_NOT_FOUND",
|
|
9
|
+
INVALID_STATE = "INVALID_STATE",
|
|
10
|
+
UNKNOWN_ERROR = "UNKNOWN_ERROR"
|
|
11
|
+
}
|
|
12
|
+
export declare class MediaFoxError extends Error {
|
|
13
|
+
code: ErrorCode;
|
|
14
|
+
details?: unknown;
|
|
15
|
+
constructor(code: ErrorCode, message: string, details?: unknown);
|
|
16
|
+
static mediaNotSupported(message?: string, details?: unknown): MediaFoxError;
|
|
17
|
+
static mediaLoadFailed(message?: string, details?: unknown): MediaFoxError;
|
|
18
|
+
static decodeError(message?: string, details?: unknown): MediaFoxError;
|
|
19
|
+
static networkError(message?: string, details?: unknown): MediaFoxError;
|
|
20
|
+
static permissionDenied(message?: string, details?: unknown): MediaFoxError;
|
|
21
|
+
static playbackError(message?: string, details?: unknown): MediaFoxError;
|
|
22
|
+
static trackNotFound(message?: string, details?: unknown): MediaFoxError;
|
|
23
|
+
static invalidState(message?: string, details?: unknown): MediaFoxError;
|
|
24
|
+
static unknownError(message?: string, details?: unknown): MediaFoxError;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Wrap an error with additional context
|
|
28
|
+
*/
|
|
29
|
+
export declare function wrapError(error: unknown, context: string): MediaFoxError;
|
|
30
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,oBAAY,SAAS;IACnB,mBAAmB,wBAAwB;IAC3C,iBAAiB,sBAAsB;IACvC,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;IAC/B,iBAAiB,sBAAsB;IACvC,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;IACnC,aAAa,kBAAkB;IAC/B,aAAa,kBAAkB;CAChC;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;gBAEN,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;IAO/D,MAAM,CAAC,iBAAiB,CAAC,OAAO,SAA+B,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,aAAa;IAIlG,MAAM,CAAC,eAAe,CAAC,OAAO,SAAyB,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,aAAa;IAI1F,MAAM,CAAC,WAAW,CAAC,OAAO,SAA2B,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,aAAa;IAIxF,MAAM,CAAC,YAAY,CAAC,OAAO,SAA2B,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,aAAa;IAIzF,MAAM,CAAC,gBAAgB,CAAC,OAAO,SAAsB,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,aAAa;IAIxF,MAAM,CAAC,aAAa,CAAC,OAAO,SAA4B,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,aAAa;IAI3F,MAAM,CAAC,aAAa,CAAC,OAAO,SAAoB,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,aAAa;IAInF,MAAM,CAAC,YAAY,CAAC,OAAO,SAAyB,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,aAAa;IAIvF,MAAM,CAAC,YAAY,CAAC,OAAO,SAA2B,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,aAAa;CAG1F;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,CAUxE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple logger utility for MediaFox
|
|
3
|
+
*/
|
|
4
|
+
export declare enum LogLevel {
|
|
5
|
+
DEBUG = 0,
|
|
6
|
+
INFO = 1,
|
|
7
|
+
WARN = 2,
|
|
8
|
+
ERROR = 3,
|
|
9
|
+
NONE = 4
|
|
10
|
+
}
|
|
11
|
+
export declare function setLogLevel(level: LogLevel): void;
|
|
12
|
+
export declare function debug(message: string, ...args: unknown[]): void;
|
|
13
|
+
export declare function info(message: string, ...args: unknown[]): void;
|
|
14
|
+
export declare function warn(message: string, ...args: unknown[]): void;
|
|
15
|
+
export declare function error(message: string, ...args: unknown[]): void;
|
|
16
|
+
export declare const logger: {
|
|
17
|
+
setLevel: typeof setLogLevel;
|
|
18
|
+
debug: typeof debug;
|
|
19
|
+
info: typeof info;
|
|
20
|
+
warn: typeof warn;
|
|
21
|
+
error: typeof error;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;IACT,IAAI,IAAI;CACT;AAKD,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAEjD;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAI/D;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAI9D;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAI9D;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAI/D;AAED,eAAO,MAAM,MAAM;;;;;;CAMlB,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format seconds into a human-readable time string
|
|
3
|
+
* @param seconds - Time in seconds
|
|
4
|
+
* @param showMilliseconds - Whether to show milliseconds
|
|
5
|
+
* @returns Formatted time string (e.g., "1:23:45" or "23:45.123")
|
|
6
|
+
*/
|
|
7
|
+
export declare function formatTime(seconds: number, showMilliseconds?: boolean): string;
|
|
8
|
+
/**
|
|
9
|
+
* Parse a time string into seconds
|
|
10
|
+
* @param timeString - Time string (e.g., "1:23:45", "23:45", "45")
|
|
11
|
+
* @returns Time in seconds
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseTime(timeString: string): number;
|
|
14
|
+
/**
|
|
15
|
+
* Get frame number from time
|
|
16
|
+
* @param time - Time in seconds
|
|
17
|
+
* @param frameRate - Frame rate in Hz
|
|
18
|
+
* @returns Frame number
|
|
19
|
+
*/
|
|
20
|
+
export declare function timeToFrame(time: number, frameRate: number): number;
|
|
21
|
+
/**
|
|
22
|
+
* Get time from frame number
|
|
23
|
+
* @param frame - Frame number
|
|
24
|
+
* @param frameRate - Frame rate in Hz
|
|
25
|
+
* @returns Time in seconds
|
|
26
|
+
*/
|
|
27
|
+
export declare function frameToTime(frame: number, frameRate: number): number;
|
|
28
|
+
/**
|
|
29
|
+
* Clamp a value between min and max
|
|
30
|
+
* @param value - Value to clamp
|
|
31
|
+
* @param min - Minimum value
|
|
32
|
+
* @param max - Maximum value
|
|
33
|
+
* @returns Clamped value
|
|
34
|
+
*/
|
|
35
|
+
export declare function clamp(value: number, min: number, max: number): number;
|
|
36
|
+
/**
|
|
37
|
+
* Check if two time ranges overlap
|
|
38
|
+
* @param range1 - First time range
|
|
39
|
+
* @param range2 - Second time range
|
|
40
|
+
* @returns True if ranges overlap
|
|
41
|
+
*/
|
|
42
|
+
export declare function timeRangesOverlap(range1: {
|
|
43
|
+
start: number;
|
|
44
|
+
end: number;
|
|
45
|
+
}, range2: {
|
|
46
|
+
start: number;
|
|
47
|
+
end: number;
|
|
48
|
+
}): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Merge overlapping time ranges
|
|
51
|
+
* @param ranges - Array of time ranges
|
|
52
|
+
* @returns Merged time ranges
|
|
53
|
+
*/
|
|
54
|
+
export declare function mergeTimeRanges(ranges: Array<{
|
|
55
|
+
start: number;
|
|
56
|
+
end: number;
|
|
57
|
+
}>): Array<{
|
|
58
|
+
start: number;
|
|
59
|
+
end: number;
|
|
60
|
+
}>;
|
|
61
|
+
/**
|
|
62
|
+
* Calculate total buffered duration
|
|
63
|
+
* @param ranges - Array of time ranges
|
|
64
|
+
* @returns Total duration in seconds
|
|
65
|
+
*/
|
|
66
|
+
export declare function totalBufferedDuration(ranges: Array<{
|
|
67
|
+
start: number;
|
|
68
|
+
end: number;
|
|
69
|
+
}>): number;
|
|
70
|
+
/**
|
|
71
|
+
* Find the buffered range containing a specific time
|
|
72
|
+
* @param ranges - Array of time ranges
|
|
73
|
+
* @param time - Time to search for
|
|
74
|
+
* @returns The containing range or null
|
|
75
|
+
*/
|
|
76
|
+
export declare function findBufferedRange(ranges: Array<{
|
|
77
|
+
start: number;
|
|
78
|
+
end: number;
|
|
79
|
+
}>, time: number): {
|
|
80
|
+
start: number;
|
|
81
|
+
end: number;
|
|
82
|
+
} | null;
|
|
83
|
+
//# sourceMappingURL=time.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/utils/time.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,UAAQ,GAAG,MAAM,CAwB5E;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAuBpD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EACtC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACrC,OAAO,CAET;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAkBpH;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAE3F;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,EAC7C,IAAI,EAAE,MAAM,GACX;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAOvC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mediafox/core",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Framework-agnostic media player library powered by MediaBunny",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"dev": "bun run --watch src/index.ts",
|
|
20
|
+
"build": "bun run build:js && bun run build:types",
|
|
21
|
+
"build:js": "bun build src/index.ts --outdir=dist --target=browser --format=esm --minify --external mediabunny",
|
|
22
|
+
"build:types": "tsc --emitDeclarationOnly",
|
|
23
|
+
"test": "bun test",
|
|
24
|
+
"lint": "biome lint ./src",
|
|
25
|
+
"format": "biome format ./src",
|
|
26
|
+
"check": "biome check ./src",
|
|
27
|
+
"typecheck": "tsc --noEmit",
|
|
28
|
+
"prepublishOnly": "bun run build"
|
|
29
|
+
},
|
|
30
|
+
"publishConfig": {
|
|
31
|
+
"access": "public"
|
|
32
|
+
},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@types/bun": "latest",
|
|
35
|
+
"@webgpu/types": "^0.1.65",
|
|
36
|
+
"mediabunny": "^1.23.0"
|
|
37
|
+
},
|
|
38
|
+
"peerDependencies": {
|
|
39
|
+
"mediabunny": "^1.23.0",
|
|
40
|
+
"typescript": ">=5.0.0"
|
|
41
|
+
},
|
|
42
|
+
"keywords": [
|
|
43
|
+
"video",
|
|
44
|
+
"player",
|
|
45
|
+
"media",
|
|
46
|
+
"mediabunny",
|
|
47
|
+
"webcodecs",
|
|
48
|
+
"audio",
|
|
49
|
+
"streaming"
|
|
50
|
+
],
|
|
51
|
+
"author": "",
|
|
52
|
+
"license": "MIT",
|
|
53
|
+
"repository": {
|
|
54
|
+
"type": "git",
|
|
55
|
+
"url": "https://github.com/wiedymi/mediafox.git"
|
|
56
|
+
},
|
|
57
|
+
"bugs": {
|
|
58
|
+
"url": "https://github.com/wiedymi/mediafox/issues"
|
|
59
|
+
},
|
|
60
|
+
"homepage": "https://github.com/wiedymi/mediafox#readme"
|
|
61
|
+
}
|