@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.
Files changed (61) hide show
  1. package/README.md +326 -0
  2. package/dist/core/player-core.d.ts +27 -0
  3. package/dist/core/player-core.d.ts.map +1 -0
  4. package/dist/core/state-facade.d.ts +25 -0
  5. package/dist/core/state-facade.d.ts.map +1 -0
  6. package/dist/core/track-switcher.d.ts +29 -0
  7. package/dist/core/track-switcher.d.ts.map +1 -0
  8. package/dist/events/emitter.d.ts +18 -0
  9. package/dist/events/emitter.d.ts.map +1 -0
  10. package/dist/events/types.d.ts +16 -0
  11. package/dist/events/types.d.ts.map +1 -0
  12. package/dist/index.d.ts +22 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +40 -0
  15. package/dist/mediafox.d.ts +72 -0
  16. package/dist/mediafox.d.ts.map +1 -0
  17. package/dist/playback/audio.d.ts +47 -0
  18. package/dist/playback/audio.d.ts.map +1 -0
  19. package/dist/playback/controller.d.ts +70 -0
  20. package/dist/playback/controller.d.ts.map +1 -0
  21. package/dist/playback/renderer.d.ts +53 -0
  22. package/dist/playback/renderer.d.ts.map +1 -0
  23. package/dist/playback/renderers/canvas2d.d.ts +16 -0
  24. package/dist/playback/renderers/canvas2d.d.ts.map +1 -0
  25. package/dist/playback/renderers/factory.d.ts +25 -0
  26. package/dist/playback/renderers/factory.d.ts.map +1 -0
  27. package/dist/playback/renderers/index.d.ts +6 -0
  28. package/dist/playback/renderers/index.d.ts.map +1 -0
  29. package/dist/playback/renderers/types.d.ts +40 -0
  30. package/dist/playback/renderers/types.d.ts.map +1 -0
  31. package/dist/playback/renderers/webgl.d.ts +32 -0
  32. package/dist/playback/renderers/webgl.d.ts.map +1 -0
  33. package/dist/playback/renderers/webgpu.d.ts +32 -0
  34. package/dist/playback/renderers/webgpu.d.ts.map +1 -0
  35. package/dist/sources/manager.d.ts +17 -0
  36. package/dist/sources/manager.d.ts.map +1 -0
  37. package/dist/sources/types.d.ts +14 -0
  38. package/dist/sources/types.d.ts.map +1 -0
  39. package/dist/state/store.d.ts +32 -0
  40. package/dist/state/store.d.ts.map +1 -0
  41. package/dist/state/types.d.ts +10 -0
  42. package/dist/state/types.d.ts.map +1 -0
  43. package/dist/tracks/manager.d.ts +45 -0
  44. package/dist/tracks/manager.d.ts.map +1 -0
  45. package/dist/tracks/types.d.ts +26 -0
  46. package/dist/tracks/types.d.ts.map +1 -0
  47. package/dist/types.d.ts +196 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/utils/async-lock.d.ts +5 -0
  50. package/dist/utils/async-lock.d.ts.map +1 -0
  51. package/dist/utils/dispose.d.ts +11 -0
  52. package/dist/utils/dispose.d.ts.map +1 -0
  53. package/dist/utils/equal.d.ts +2 -0
  54. package/dist/utils/equal.d.ts.map +1 -0
  55. package/dist/utils/errors.d.ts +30 -0
  56. package/dist/utils/errors.d.ts.map +1 -0
  57. package/dist/utils/logger.d.ts +23 -0
  58. package/dist/utils/logger.d.ts.map +1 -0
  59. package/dist/utils/time.d.ts +83 -0
  60. package/dist/utils/time.d.ts.map +1 -0
  61. 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"}
@@ -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,5 @@
1
+ export declare class KeyedLock {
2
+ private chains;
3
+ run<T>(key: string, fn: () => Promise<T>): Promise<T>;
4
+ }
5
+ //# sourceMappingURL=async-lock.d.ts.map
@@ -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,2 @@
1
+ export declare function isDeepEqual(a: unknown, b: unknown): boolean;
2
+ //# sourceMappingURL=equal.d.ts.map
@@ -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
+ }