@remotion/media 4.0.506 → 4.0.507

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.
@@ -1,6 +1,6 @@
1
1
  import type { MediaRequestInit } from './request-init';
2
2
  import type { ExtractFrameViaBroadcastChannelResult } from './video-extraction/extract-frame-via-broadcast-channel';
3
- export declare const extractFrameAndAudio: ({ src, timeInSeconds, logLevel, durationInSeconds, playbackRate, includeAudio, includeVideo, loop, audioStreamIndex, trimAfter, trimBefore, fps, maxCacheSize, credentials, requestInit, }: {
3
+ export declare const extractFrameAndAudio: ({ src, timeInSeconds, logLevel, durationInSeconds, playbackRate, includeAudio, includeVideo, loop, audioStreamIndex, trimAfter, trimBefore, fps, maxCacheSize, credentials, requestInit, mediaCache, }: {
4
4
  src: string;
5
5
  timeInSeconds: number;
6
6
  logLevel: "error" | "info" | "trace" | "verbose" | "warn";
@@ -16,4 +16,98 @@ export declare const extractFrameAndAudio: ({ src, timeInSeconds, logLevel, dura
16
16
  maxCacheSize: number;
17
17
  credentials: RequestCredentials | undefined;
18
18
  requestInit?: MediaRequestInit | undefined;
19
+ mediaCache: {
20
+ sinkManager: {
21
+ getSink: (src: string, logLevel: "error" | "info" | "trace" | "verbose" | "warn", credentials: RequestCredentials | undefined, requestInit: MediaRequestInit | undefined) => Promise<{
22
+ getVideo: () => Promise<import("./video-extraction/get-frames-since-keyframe").VideoSinkResult>;
23
+ getAudio: (index: number | null) => Promise<import("./video-extraction/get-frames-since-keyframe").AudioSinkResult>;
24
+ actualMatroskaTimestamps: {
25
+ observeTimestamp: (startTime: number) => void;
26
+ getRealTimestamp: (observedTimestamp: number) => number | null;
27
+ };
28
+ isMatroska: boolean;
29
+ getDuration: () => Promise<number>;
30
+ }>;
31
+ dispose: () => void;
32
+ };
33
+ keyframeManager: {
34
+ requestKeyframeBank: ({ timestamp, videoSampleSink, src, logLevel, maxCacheSize, fps, }: {
35
+ timestamp: number;
36
+ videoSampleSink: import("mediabunny").VideoSampleSink;
37
+ src: string;
38
+ logLevel: "error" | "info" | "trace" | "verbose" | "warn";
39
+ maxCacheSize: number;
40
+ fps: number;
41
+ }) => Promise<import("./video-extraction/keyframe-bank").KeyframeBank | null>;
42
+ getCacheStats: () => {
43
+ count: number;
44
+ totalSize: number;
45
+ };
46
+ clearAll: (logLevel: "error" | "info" | "trace" | "verbose" | "warn") => void;
47
+ dispose: (logLevel: "error" | "info" | "trace" | "verbose" | "warn") => void;
48
+ };
49
+ audioManager: {
50
+ getIterator: ({ src, timeInSeconds, audioSampleSink, isMatroska, actualMatroskaTimestamps, logLevel, maxCacheSize, }: {
51
+ src: string;
52
+ timeInSeconds: number;
53
+ audioSampleSink: import("mediabunny").AudioSampleSink;
54
+ isMatroska: boolean;
55
+ actualMatroskaTimestamps: {
56
+ observeTimestamp: (startTime: number) => void;
57
+ getRealTimestamp: (observedTimestamp: number) => number | null;
58
+ };
59
+ logLevel: "error" | "info" | "trace" | "verbose" | "warn";
60
+ maxCacheSize: number;
61
+ }) => Promise<{
62
+ src: string;
63
+ getSamples: (ts: number, dur: number) => Promise<import("mediabunny").AudioSample[]>;
64
+ waitForCompletion: () => Promise<boolean>;
65
+ canSatisfyRequestedTime: (timestamp: number) => boolean;
66
+ logOpenFrames: () => void;
67
+ getCacheStats: () => {
68
+ count: number;
69
+ size: number;
70
+ };
71
+ getLastUsed: () => number;
72
+ prepareForDeletion: () => void;
73
+ startTimestamp: number;
74
+ clearBeforeThreshold: (threshold: number) => void;
75
+ getOldestTimestamp: () => number;
76
+ getNewestTimestamp: () => number | null;
77
+ }>;
78
+ getCacheStats: () => {
79
+ count: number;
80
+ totalSize: number;
81
+ };
82
+ getIteratorMostInThePast: () => {
83
+ src: string;
84
+ getSamples: (ts: number, dur: number) => Promise<import("mediabunny").AudioSample[]>;
85
+ waitForCompletion: () => Promise<boolean>;
86
+ canSatisfyRequestedTime: (timestamp: number) => boolean;
87
+ logOpenFrames: () => void;
88
+ getCacheStats: () => {
89
+ count: number;
90
+ size: number;
91
+ };
92
+ getLastUsed: () => number;
93
+ prepareForDeletion: () => void;
94
+ startTimestamp: number;
95
+ clearBeforeThreshold: (threshold: number) => void;
96
+ getOldestTimestamp: () => number;
97
+ getNewestTimestamp: () => number | null;
98
+ } | null;
99
+ logOpenFrames: () => void;
100
+ deleteDuplicateIterators: (logLevel: "error" | "info" | "trace" | "verbose" | "warn") => void;
101
+ clearAll: () => void;
102
+ dispose: () => void;
103
+ };
104
+ getTotalCacheStats: () => {
105
+ count: number;
106
+ totalSize: number;
107
+ };
108
+ isDisposed: () => boolean;
109
+ queueFrameExtraction: <T>(extract: () => Promise<T>) => Promise<T>;
110
+ queueAudioExtraction: <T>(extract: () => Promise<T>) => Promise<T>;
111
+ dispose: (logLevel: "error" | "info" | "trace" | "verbose" | "warn") => void;
112
+ };
19
113
  }) => Promise<ExtractFrameViaBroadcastChannelResult>;
@@ -1,18 +1,20 @@
1
1
  import { type MediaRequestInit } from './request-init';
2
- import type { GetSink } from './video-extraction/get-frames-since-keyframe';
3
- export declare const sinkPromises: Record<string, Promise<GetSink>>;
4
2
  export declare const getSinkCacheKey: ({ src, credentials, requestInit, }: {
5
3
  src: string;
6
4
  credentials: RequestCredentials | undefined;
7
5
  requestInit: MediaRequestInit | undefined;
8
6
  }) => string;
9
- export declare const getSink: (src: string, logLevel: "error" | "info" | "trace" | "verbose" | "warn", credentials: RequestCredentials | undefined, requestInit: MediaRequestInit | undefined) => Promise<{
10
- getVideo: () => Promise<import("./video-extraction/get-frames-since-keyframe").VideoSinkResult>;
11
- getAudio: (index: number | null) => Promise<import("./video-extraction/get-frames-since-keyframe").AudioSinkResult>;
12
- actualMatroskaTimestamps: {
13
- observeTimestamp: (startTime: number) => void;
14
- getRealTimestamp: (observedTimestamp: number) => number | null;
15
- };
16
- isMatroska: boolean;
17
- getDuration: () => Promise<number>;
18
- }>;
7
+ export declare const makeSinkManager: () => {
8
+ getSink: (src: string, logLevel: "error" | "info" | "trace" | "verbose" | "warn", credentials: RequestCredentials | undefined, requestInit: MediaRequestInit | undefined) => Promise<{
9
+ getVideo: () => Promise<import("./video-extraction/get-frames-since-keyframe").VideoSinkResult>;
10
+ getAudio: (index: number | null) => Promise<import("./video-extraction/get-frames-since-keyframe").AudioSinkResult>;
11
+ actualMatroskaTimestamps: {
12
+ observeTimestamp: (startTime: number) => void;
13
+ getRealTimestamp: (observedTimestamp: number) => number | null;
14
+ };
15
+ isMatroska: boolean;
16
+ getDuration: () => Promise<number>;
17
+ }>;
18
+ dispose: () => void;
19
+ };
20
+ export type SinkManager = ReturnType<typeof makeSinkManager>;
@@ -19,7 +19,7 @@ export type ExtractFrameViaBroadcastChannelResult = {
19
19
  } | {
20
20
  type: 'unknown-container-format';
21
21
  };
22
- export declare const extractFrameViaBroadcastChannel: ({ src, timeInSeconds, logLevel, durationInSeconds, playbackRate, includeAudio, includeVideo, isClientSideRendering, loop, audioStreamIndex, trimAfter, trimBefore, fps, maxCacheSize, credentials, requestInit, }: {
22
+ export declare const extractFrameViaBroadcastChannel: ({ src, timeInSeconds, logLevel, durationInSeconds, playbackRate, includeAudio, includeVideo, isClientSideRendering, loop, audioStreamIndex, trimAfter, trimBefore, fps, maxCacheSize, credentials, requestInit, mediaCache, }: {
23
23
  src: string;
24
24
  timeInSeconds: number;
25
25
  durationInSeconds: number;
@@ -36,4 +36,98 @@ export declare const extractFrameViaBroadcastChannel: ({ src, timeInSeconds, log
36
36
  maxCacheSize: number;
37
37
  credentials: RequestCredentials | undefined;
38
38
  requestInit?: MediaRequestInit | undefined;
39
+ mediaCache: {
40
+ sinkManager: {
41
+ getSink: (src: string, logLevel: "error" | "info" | "trace" | "verbose" | "warn", credentials: RequestCredentials | undefined, requestInit: MediaRequestInit | undefined) => Promise<{
42
+ getVideo: () => Promise<import("./get-frames-since-keyframe").VideoSinkResult>;
43
+ getAudio: (index: number | null) => Promise<import("./get-frames-since-keyframe").AudioSinkResult>;
44
+ actualMatroskaTimestamps: {
45
+ observeTimestamp: (startTime: number) => void;
46
+ getRealTimestamp: (observedTimestamp: number) => number | null;
47
+ };
48
+ isMatroska: boolean;
49
+ getDuration: () => Promise<number>;
50
+ }>;
51
+ dispose: () => void;
52
+ };
53
+ keyframeManager: {
54
+ requestKeyframeBank: ({ timestamp, videoSampleSink, src, logLevel, maxCacheSize, fps, }: {
55
+ timestamp: number;
56
+ videoSampleSink: import("mediabunny").VideoSampleSink;
57
+ src: string;
58
+ logLevel: "error" | "info" | "trace" | "verbose" | "warn";
59
+ maxCacheSize: number;
60
+ fps: number;
61
+ }) => Promise<import("./keyframe-bank").KeyframeBank | null>;
62
+ getCacheStats: () => {
63
+ count: number;
64
+ totalSize: number;
65
+ };
66
+ clearAll: (logLevel: "error" | "info" | "trace" | "verbose" | "warn") => void;
67
+ dispose: (logLevel: "error" | "info" | "trace" | "verbose" | "warn") => void;
68
+ };
69
+ audioManager: {
70
+ getIterator: ({ src, timeInSeconds, audioSampleSink, isMatroska, actualMatroskaTimestamps, logLevel, maxCacheSize, }: {
71
+ src: string;
72
+ timeInSeconds: number;
73
+ audioSampleSink: import("mediabunny").AudioSampleSink;
74
+ isMatroska: boolean;
75
+ actualMatroskaTimestamps: {
76
+ observeTimestamp: (startTime: number) => void;
77
+ getRealTimestamp: (observedTimestamp: number) => number | null;
78
+ };
79
+ logLevel: "error" | "info" | "trace" | "verbose" | "warn";
80
+ maxCacheSize: number;
81
+ }) => Promise<{
82
+ src: string;
83
+ getSamples: (ts: number, dur: number) => Promise<import("mediabunny").AudioSample[]>;
84
+ waitForCompletion: () => Promise<boolean>;
85
+ canSatisfyRequestedTime: (timestamp: number) => boolean;
86
+ logOpenFrames: () => void;
87
+ getCacheStats: () => {
88
+ count: number;
89
+ size: number;
90
+ };
91
+ getLastUsed: () => number;
92
+ prepareForDeletion: () => void;
93
+ startTimestamp: number;
94
+ clearBeforeThreshold: (threshold: number) => void;
95
+ getOldestTimestamp: () => number;
96
+ getNewestTimestamp: () => number | null;
97
+ }>;
98
+ getCacheStats: () => {
99
+ count: number;
100
+ totalSize: number;
101
+ };
102
+ getIteratorMostInThePast: () => {
103
+ src: string;
104
+ getSamples: (ts: number, dur: number) => Promise<import("mediabunny").AudioSample[]>;
105
+ waitForCompletion: () => Promise<boolean>;
106
+ canSatisfyRequestedTime: (timestamp: number) => boolean;
107
+ logOpenFrames: () => void;
108
+ getCacheStats: () => {
109
+ count: number;
110
+ size: number;
111
+ };
112
+ getLastUsed: () => number;
113
+ prepareForDeletion: () => void;
114
+ startTimestamp: number;
115
+ clearBeforeThreshold: (threshold: number) => void;
116
+ getOldestTimestamp: () => number;
117
+ getNewestTimestamp: () => number | null;
118
+ } | null;
119
+ logOpenFrames: () => void;
120
+ deleteDuplicateIterators: (logLevel: "error" | "info" | "trace" | "verbose" | "warn") => void;
121
+ clearAll: () => void;
122
+ dispose: () => void;
123
+ };
124
+ getTotalCacheStats: () => {
125
+ count: number;
126
+ totalSize: number;
127
+ };
128
+ isDisposed: () => boolean;
129
+ queueFrameExtraction: <T>(extract: () => Promise<T>) => Promise<T>;
130
+ queueAudioExtraction: <T>(extract: () => Promise<T>) => Promise<T>;
131
+ dispose: (logLevel: "error" | "info" | "trace" | "verbose" | "warn") => void;
132
+ };
39
133
  }) => Promise<ExtractFrameViaBroadcastChannelResult>;
@@ -1,4 +1,5 @@
1
1
  import { type LogLevel } from 'remotion';
2
+ import type { MediaCache } from '../caches';
2
3
  import type { MediaRequestInit } from '../request-init';
3
4
  type ExtractFrameResult = {
4
5
  type: 'success';
@@ -31,6 +32,7 @@ type ExtractFrameParams = {
31
32
  maxCacheSize: number;
32
33
  credentials: RequestCredentials | undefined;
33
34
  requestInit?: MediaRequestInit;
35
+ mediaCache: MediaCache;
34
36
  };
35
37
  export declare const extractFrame: (params: ExtractFrameParams) => Promise<ExtractFrameResult>;
36
38
  export {};
@@ -8,15 +8,18 @@ type AudioSinks = {
8
8
  };
9
9
  export type AudioSinkResult = AudioSinks | 'no-audio-track' | 'cannot-decode-audio' | 'unknown-container-format' | 'network-error';
10
10
  export type VideoSinkResult = VideoSinks | 'no-video-track' | 'cannot-decode' | 'cannot-decode-prores' | 'cannot-decode-alpha' | 'unknown-container-format' | 'network-error';
11
- export declare const getSinks: (src: string, logLevel: "error" | "info" | "trace" | "verbose" | "warn", credentials: RequestCredentials | undefined, requestInit?: MediaRequestInit | undefined) => Promise<{
12
- getVideo: () => Promise<VideoSinkResult>;
13
- getAudio: (index: number | null) => Promise<AudioSinkResult>;
14
- actualMatroskaTimestamps: {
15
- observeTimestamp: (startTime: number) => void;
16
- getRealTimestamp: (observedTimestamp: number) => number | null;
17
- };
18
- isMatroska: boolean;
19
- getDuration: () => Promise<number>;
20
- }>;
21
- export type GetSink = Awaited<ReturnType<typeof getSinks>>;
11
+ export declare const makeSinks: (src: string, logLevel: "error" | "info" | "trace" | "verbose" | "warn", credentials: RequestCredentials | undefined, requestInit?: MediaRequestInit | undefined) => {
12
+ promise: Promise<{
13
+ getVideo: () => Promise<VideoSinkResult>;
14
+ getAudio: (index: number | null) => Promise<AudioSinkResult>;
15
+ actualMatroskaTimestamps: {
16
+ observeTimestamp: (startTime: number) => void;
17
+ getRealTimestamp: (observedTimestamp: number) => number | null;
18
+ };
19
+ isMatroska: boolean;
20
+ getDuration: () => Promise<number>;
21
+ }>;
22
+ dispose: () => void;
23
+ };
24
+ export type GetSink = Awaited<ReturnType<typeof makeSinks>['promise']>;
22
25
  export {};
@@ -1,6 +1,11 @@
1
1
  import type { VideoSampleSink } from 'mediabunny';
2
2
  import { type KeyframeBank } from './keyframe-bank';
3
- export declare const makeKeyframeManager: () => {
3
+ export declare const makeKeyframeManager: ({ getTotalCacheStats, }: {
4
+ getTotalCacheStats: () => {
5
+ count: number;
6
+ totalSize: number;
7
+ };
8
+ }) => {
4
9
  requestKeyframeBank: ({ timestamp, videoSampleSink, src, logLevel, maxCacheSize, fps, }: {
5
10
  timestamp: number;
6
11
  videoSampleSink: VideoSampleSink;
@@ -8,11 +13,12 @@ export declare const makeKeyframeManager: () => {
8
13
  logLevel: "error" | "info" | "trace" | "verbose" | "warn";
9
14
  maxCacheSize: number;
10
15
  fps: number;
11
- }) => Promise<KeyframeBank>;
16
+ }) => Promise<KeyframeBank | null>;
12
17
  getCacheStats: () => {
13
18
  count: number;
14
19
  totalSize: number;
15
20
  };
16
21
  clearAll: (logLevel: "error" | "info" | "trace" | "verbose" | "warn") => void;
22
+ dispose: (logLevel: "error" | "info" | "trace" | "verbose" | "warn") => void;
17
23
  };
18
24
  export type KeyframeManager = Awaited<ReturnType<typeof makeKeyframeManager>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/media",
3
- "version": "4.0.506",
3
+ "version": "4.0.507",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "module": "dist/esm/index.mjs",
@@ -23,7 +23,7 @@
23
23
  },
24
24
  "dependencies": {
25
25
  "mediabunny": "1.50.8",
26
- "remotion": "4.0.506",
26
+ "remotion": "4.0.507",
27
27
  "zod": "4.4.3"
28
28
  },
29
29
  "peerDependencies": {
@@ -31,8 +31,8 @@
31
31
  "react-dom": ">=16.8.0"
32
32
  },
33
33
  "devDependencies": {
34
- "@remotion/eslint-config-internal": "4.0.506",
35
- "@remotion/player": "4.0.506",
34
+ "@remotion/eslint-config-internal": "4.0.507",
35
+ "@remotion/player": "4.0.507",
36
36
  "@vitest/browser-webdriverio": "4.0.9",
37
37
  "eslint": "9.19.0",
38
38
  "react": "19.2.3",