@remotion/media 4.0.403 → 4.0.404

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 (76) hide show
  1. package/dist/audio/audio-for-preview.d.ts +2 -0
  2. package/dist/audio/audio-preview-iterator.d.ts +8 -3
  3. package/dist/audio/props.d.ts +2 -0
  4. package/dist/audio-extraction/audio-iterator.d.ts +5 -4
  5. package/dist/audio-extraction/audio-manager.d.ts +23 -7
  6. package/dist/audio-extraction/extract-audio.d.ts +2 -4
  7. package/dist/audio-iterator-manager.d.ts +2 -2
  8. package/dist/caches.d.ts +29 -11
  9. package/dist/convert-audiodata/apply-volume.d.ts +1 -1
  10. package/dist/convert-audiodata/resample-audiodata.d.ts +2 -2
  11. package/dist/debug-overlay/preview-overlay.d.ts +83 -5
  12. package/dist/esm/index.mjs +180 -146
  13. package/dist/extract-frame-and-audio.d.ts +1 -2
  14. package/dist/get-sink.d.ts +1 -2
  15. package/dist/index.d.ts +2 -1
  16. package/dist/media-player.d.ts +1 -1
  17. package/dist/on-error.d.ts +12 -0
  18. package/dist/show-in-timeline.d.ts +2 -2
  19. package/dist/use-media-in-timeline.d.ts +2 -2
  20. package/dist/video/props.d.ts +5 -0
  21. package/dist/video/video-for-preview.d.ts +2 -0
  22. package/dist/video/video-for-rendering.d.ts +2 -0
  23. package/dist/video/video-preview-iterator.d.ts +7 -2
  24. package/dist/video-extraction/extract-frame-via-broadcast-channel.d.ts +1 -2
  25. package/dist/video-extraction/extract-frame.d.ts +1 -3
  26. package/dist/video-extraction/keyframe-bank.d.ts +2 -2
  27. package/dist/video-extraction/keyframe-manager.d.ts +2 -3
  28. package/dist/video-iterator-manager.d.ts +4 -5
  29. package/package.json +8 -7
  30. package/dist/audio/allow-wait.js +0 -15
  31. package/dist/audio/audio-for-preview.js +0 -302
  32. package/dist/audio/audio-for-rendering.js +0 -196
  33. package/dist/audio/audio-preview-iterator.js +0 -176
  34. package/dist/audio/audio.js +0 -20
  35. package/dist/audio/props.js +0 -1
  36. package/dist/audio-extraction/audio-cache.js +0 -66
  37. package/dist/audio-extraction/audio-iterator.js +0 -132
  38. package/dist/audio-extraction/audio-manager.js +0 -121
  39. package/dist/audio-extraction/extract-audio.js +0 -132
  40. package/dist/audio-iterator-manager.js +0 -228
  41. package/dist/browser-can-use-webgl2.js +0 -13
  42. package/dist/caches.js +0 -61
  43. package/dist/calculate-playbacktime.js +0 -4
  44. package/dist/convert-audiodata/apply-volume.js +0 -17
  45. package/dist/convert-audiodata/combine-audiodata.js +0 -23
  46. package/dist/convert-audiodata/convert-audiodata.js +0 -73
  47. package/dist/convert-audiodata/resample-audiodata.js +0 -94
  48. package/dist/debug-overlay/preview-overlay.js +0 -44
  49. package/dist/extract-frame-and-audio.js +0 -86
  50. package/dist/get-sink.js +0 -15
  51. package/dist/get-time-in-seconds.js +0 -40
  52. package/dist/helpers/round-to-4-digits.js +0 -4
  53. package/dist/index.js +0 -12
  54. package/dist/is-type-of-error.js +0 -20
  55. package/dist/looped-frame.js +0 -10
  56. package/dist/media-player.js +0 -445
  57. package/dist/nonce-manager.js +0 -13
  58. package/dist/prewarm-iterator-for-looping.js +0 -56
  59. package/dist/render-timestamp-range.js +0 -9
  60. package/dist/show-in-timeline.js +0 -31
  61. package/dist/use-media-in-timeline.js +0 -103
  62. package/dist/video/props.js +0 -1
  63. package/dist/video/video-for-preview.js +0 -329
  64. package/dist/video/video-for-rendering.js +0 -263
  65. package/dist/video/video-preview-iterator.js +0 -122
  66. package/dist/video/video.js +0 -33
  67. package/dist/video-extraction/add-broadcast-channel-listener.js +0 -125
  68. package/dist/video-extraction/extract-frame-via-broadcast-channel.js +0 -113
  69. package/dist/video-extraction/extract-frame.js +0 -84
  70. package/dist/video-extraction/get-allocation-size.js +0 -6
  71. package/dist/video-extraction/get-frames-since-keyframe.js +0 -105
  72. package/dist/video-extraction/keyframe-bank.js +0 -200
  73. package/dist/video-extraction/keyframe-manager.js +0 -201
  74. package/dist/video-extraction/remember-actual-matroska-timestamps.js +0 -19
  75. package/dist/video-extraction/rotate-frame.js +0 -34
  76. package/dist/video-iterator-manager.js +0 -109
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import type { LogLevel, LoopVolumeCurveBehavior, VolumeProp } from 'remotion';
3
+ import { type MediaOnError } from '../on-error';
3
4
  import type { FallbackHtml5AudioProps } from './props';
4
5
  type InnerAudioProps = {
5
6
  readonly loop?: boolean;
@@ -25,6 +26,7 @@ type InnerAudioProps = {
25
26
  readonly toneFrequency?: number;
26
27
  readonly audioStreamIndex?: number;
27
28
  readonly fallbackHtml5AudioProps?: FallbackHtml5AudioProps;
29
+ readonly onError?: MediaOnError;
28
30
  };
29
31
  export declare const AudioForPreview: React.FC<InnerAudioProps>;
30
32
  export {};
@@ -1,5 +1,4 @@
1
1
  import type { WrappedAudioBuffer } from 'mediabunny';
2
- import type { PrewarmedAudioIteratorCache } from '../prewarm-iterator-for-looping';
3
2
  import { type AllowWait } from './allow-wait';
4
3
  export declare const HEALTHY_BUFFER_THRESHOLD_SECONDS = 1;
5
4
  export type QueuedNode = {
@@ -7,7 +6,13 @@ export type QueuedNode = {
7
6
  timestamp: number;
8
7
  buffer: AudioBuffer;
9
8
  };
10
- export declare const makeAudioIterator: (startFromSecond: number, cache: PrewarmedAudioIteratorCache) => {
9
+ export declare const makeAudioIterator: (startFromSecond: number, cache: {
10
+ prewarmIteratorForLooping: ({ timeToSeek }: {
11
+ timeToSeek: number;
12
+ }) => void;
13
+ makeIteratorOrUsePrewarmed: (timeToSeek: number) => AsyncGenerator<WrappedAudioBuffer, void, unknown>;
14
+ destroy: () => void;
15
+ }) => {
11
16
  destroy: () => void;
12
17
  getNext: () => Promise<IteratorResult<WrappedAudioBuffer, void>>;
13
18
  isDestroyed: () => boolean;
@@ -37,4 +42,4 @@ export type AudioIterator = ReturnType<typeof makeAudioIterator>;
37
42
  export declare const isAlreadyQueued: (time: number, queuedPeriod: {
38
43
  from: number;
39
44
  until: number;
40
- } | undefined | null) => boolean;
45
+ } | null | undefined) => boolean;
@@ -1,4 +1,5 @@
1
1
  import type { LogLevel, LoopVolumeCurveBehavior, VolumeProp } from 'remotion';
2
+ import type { MediaOnError } from '../on-error';
2
3
  export type FallbackHtml5AudioProps = {
3
4
  crossOrigin?: '' | 'anonymous' | 'use-credentials' | undefined;
4
5
  onError?: (err: Error) => void;
@@ -30,4 +31,5 @@ export type AudioProps = {
30
31
  toneFrequency?: number;
31
32
  delayRenderRetries?: number;
32
33
  delayRenderTimeoutInMilliseconds?: number;
34
+ onError?: MediaOnError;
33
35
  };
@@ -1,13 +1,14 @@
1
1
  import type { AudioSample, AudioSampleSink } from 'mediabunny';
2
- import { type LogLevel } from 'remotion';
3
- import type { RememberActualMatroskaTimestamps } from '../video-extraction/remember-actual-matroska-timestamps';
4
2
  export declare const makeAudioIterator: ({ audioSampleSink, isMatroska, startTimestamp, src, actualMatroskaTimestamps, logLevel, }: {
5
3
  audioSampleSink: AudioSampleSink;
6
4
  isMatroska: boolean;
7
5
  startTimestamp: number;
8
6
  src: string;
9
- actualMatroskaTimestamps: RememberActualMatroskaTimestamps;
10
- logLevel: LogLevel;
7
+ actualMatroskaTimestamps: {
8
+ observeTimestamp: (startTime: number) => void;
9
+ getRealTimestamp: (observedTimestamp: number) => number | null;
10
+ };
11
+ logLevel: "error" | "info" | "trace" | "verbose" | "warn";
11
12
  }) => {
12
13
  src: string;
13
14
  getSamples: (ts: number, dur: number) => Promise<AudioSample[]>;
@@ -1,17 +1,33 @@
1
1
  import type { AudioSampleSink } from 'mediabunny';
2
- import { type LogLevel } from 'remotion';
3
- import type { RememberActualMatroskaTimestamps } from '../video-extraction/remember-actual-matroska-timestamps';
4
- import type { AudioSampleIterator } from './audio-iterator';
5
2
  export declare const makeAudioManager: () => {
6
3
  getIterator: ({ src, timeInSeconds, audioSampleSink, isMatroska, actualMatroskaTimestamps, logLevel, maxCacheSize, }: {
7
4
  src: string;
8
5
  timeInSeconds: number;
9
6
  audioSampleSink: AudioSampleSink;
10
7
  isMatroska: boolean;
11
- actualMatroskaTimestamps: RememberActualMatroskaTimestamps;
12
- logLevel: LogLevel;
8
+ actualMatroskaTimestamps: {
9
+ observeTimestamp: (startTime: number) => void;
10
+ getRealTimestamp: (observedTimestamp: number) => number | null;
11
+ };
12
+ logLevel: "error" | "info" | "trace" | "verbose" | "warn";
13
13
  maxCacheSize: number;
14
- }) => Promise<AudioSampleIterator>;
14
+ }) => Promise<{
15
+ src: string;
16
+ getSamples: (ts: number, dur: number) => Promise<import("mediabunny").AudioSample[]>;
17
+ waitForCompletion: () => Promise<boolean>;
18
+ canSatisfyRequestedTime: (timestamp: number) => boolean;
19
+ logOpenFrames: () => void;
20
+ getCacheStats: () => {
21
+ count: number;
22
+ size: number;
23
+ };
24
+ getLastUsed: () => number;
25
+ prepareForDeletion: () => void;
26
+ startTimestamp: number;
27
+ clearBeforeThreshold: (threshold: number) => void;
28
+ getOldestTimestamp: () => number;
29
+ getNewestTimestamp: () => number | null;
30
+ }>;
15
31
  getCacheStats: () => {
16
32
  count: number;
17
33
  totalSize: number;
@@ -34,5 +50,5 @@ export declare const makeAudioManager: () => {
34
50
  getNewestTimestamp: () => number | null;
35
51
  } | null;
36
52
  logOpenFrames: () => void;
37
- deleteDuplicateIterators: (logLevel: LogLevel) => void;
53
+ deleteDuplicateIterators: (logLevel: "error" | "info" | "trace" | "verbose" | "warn") => void;
38
54
  };
@@ -1,6 +1,5 @@
1
1
  import { type LogLevel } from 'remotion';
2
2
  import type { PcmS16AudioData } from '../convert-audiodata/convert-audiodata';
3
- type ExtractAudioReturnType = Awaited<ReturnType<typeof extractAudioInternal>>;
4
3
  type ExtractAudioParams = {
5
4
  src: string;
6
5
  timeInSeconds: number;
@@ -14,9 +13,8 @@ type ExtractAudioParams = {
14
13
  fps: number;
15
14
  maxCacheSize: number;
16
15
  };
17
- declare const extractAudioInternal: ({ src, timeInSeconds: unloopedTimeInSeconds, durationInSeconds: durationNotYetApplyingPlaybackRate, logLevel, loop, playbackRate, audioStreamIndex, trimBefore, trimAfter, fps, maxCacheSize, }: ExtractAudioParams) => Promise<{
16
+ export declare const extractAudio: (params: ExtractAudioParams) => Promise<"cannot-decode" | "network-error" | "unknown-container-format" | {
18
17
  data: PcmS16AudioData | null;
19
18
  durationInSeconds: number | null;
20
- } | "cannot-decode" | "unknown-container-format" | "network-error">;
21
- export declare const extractAudio: (params: ExtractAudioParams) => Promise<ExtractAudioReturnType>;
19
+ }>;
22
20
  export {};
@@ -1,5 +1,5 @@
1
1
  import type { InputAudioTrack, WrappedAudioBuffer } from 'mediabunny';
2
- import type { useBufferState } from 'remotion';
2
+ import type { UseBufferState } from 'remotion';
3
3
  import type { Nonce } from './nonce-manager';
4
4
  export declare const audioIteratorManager: ({ audioTrack, delayPlaybackHandleIfNotPremounting, sharedAudioContext, getIsLooping, getEndTime, getStartTime, updatePlaybackTime, }: {
5
5
  audioTrack: InputAudioTrack;
@@ -57,7 +57,7 @@ export declare const audioIteratorManager: ({ audioTrack, delayPlaybackHandleIfN
57
57
  fps: number;
58
58
  playbackRate: number;
59
59
  getIsPlaying: () => boolean;
60
- bufferState: ReturnType<typeof useBufferState>;
60
+ bufferState: UseBufferState;
61
61
  scheduleAudioNode: (node: AudioBufferSourceNode, mediaTimestamp: number) => void;
62
62
  }) => Promise<void>;
63
63
  getAudioIteratorsCreated: () => number;
package/dist/caches.d.ts CHANGED
@@ -1,18 +1,17 @@
1
- import { type LogLevel } from 'remotion';
2
1
  export declare const SAFE_WINDOW_OF_MONOTONICITY = 0.2;
3
2
  export declare const keyframeManager: {
4
3
  requestKeyframeBank: ({ timestamp, videoSampleSink, src, logLevel, maxCacheSize, }: {
5
4
  timestamp: number;
6
5
  videoSampleSink: import("mediabunny").VideoSampleSink;
7
6
  src: string;
8
- logLevel: LogLevel;
7
+ logLevel: "error" | "info" | "trace" | "verbose" | "warn";
9
8
  maxCacheSize: number;
10
9
  }) => Promise<import("./video-extraction/keyframe-bank").KeyframeBank>;
11
10
  getCacheStats: () => {
12
11
  count: number;
13
12
  totalSize: number;
14
13
  };
15
- clearAll: (logLevel: LogLevel) => void;
14
+ clearAll: (logLevel: "error" | "info" | "trace" | "verbose" | "warn") => void;
16
15
  };
17
16
  export declare const audioManager: {
18
17
  getIterator: ({ src, timeInSeconds, audioSampleSink, isMatroska, actualMatroskaTimestamps, logLevel, maxCacheSize, }: {
@@ -20,10 +19,29 @@ export declare const audioManager: {
20
19
  timeInSeconds: number;
21
20
  audioSampleSink: import("mediabunny").AudioSampleSink;
22
21
  isMatroska: boolean;
23
- actualMatroskaTimestamps: import("./video-extraction/remember-actual-matroska-timestamps").RememberActualMatroskaTimestamps;
24
- logLevel: LogLevel;
22
+ actualMatroskaTimestamps: {
23
+ observeTimestamp: (startTime: number) => void;
24
+ getRealTimestamp: (observedTimestamp: number) => number | null;
25
+ };
26
+ logLevel: "error" | "info" | "trace" | "verbose" | "warn";
25
27
  maxCacheSize: number;
26
- }) => Promise<import("./audio-extraction/audio-iterator").AudioSampleIterator>;
28
+ }) => Promise<{
29
+ src: string;
30
+ getSamples: (ts: number, dur: number) => Promise<import("mediabunny").AudioSample[]>;
31
+ waitForCompletion: () => Promise<boolean>;
32
+ canSatisfyRequestedTime: (timestamp: number) => boolean;
33
+ logOpenFrames: () => void;
34
+ getCacheStats: () => {
35
+ count: number;
36
+ size: number;
37
+ };
38
+ getLastUsed: () => number;
39
+ prepareForDeletion: () => void;
40
+ startTimestamp: number;
41
+ clearBeforeThreshold: (threshold: number) => void;
42
+ getOldestTimestamp: () => number;
43
+ getNewestTimestamp: () => number | null;
44
+ }>;
27
45
  getCacheStats: () => {
28
46
  count: number;
29
47
  totalSize: number;
@@ -46,11 +64,11 @@ export declare const audioManager: {
46
64
  getNewestTimestamp: () => number | null;
47
65
  } | null;
48
66
  logOpenFrames: () => void;
49
- deleteDuplicateIterators: (logLevel: LogLevel) => void;
67
+ deleteDuplicateIterators: (logLevel: "error" | "info" | "trace" | "verbose" | "warn") => void;
50
68
  };
51
- export declare const getTotalCacheStats: () => Promise<{
69
+ export declare const getTotalCacheStats: () => {
52
70
  count: number;
53
71
  totalSize: number;
54
- }>;
55
- export declare const getMaxVideoCacheSize: (logLevel: LogLevel) => number;
56
- export declare const useMaxMediaCacheSize: (logLevel: LogLevel) => number;
72
+ };
73
+ export declare const getMaxVideoCacheSize: (logLevel: "error" | "info" | "trace" | "verbose" | "warn") => number;
74
+ export declare const useMaxMediaCacheSize: (logLevel: "error" | "info" | "trace" | "verbose" | "warn") => number;
@@ -1 +1 @@
1
- export declare const applyVolume: (array: Int16Array, volume: number) => void;
1
+ export declare const applyVolume: (array: Int16Array<ArrayBufferLike>, volume: number) => void;
@@ -2,8 +2,8 @@ export declare const TARGET_NUMBER_OF_CHANNELS = 2;
2
2
  export declare const TARGET_SAMPLE_RATE = 48000;
3
3
  export declare const resampleAudioData: ({ srcNumberOfChannels, sourceChannels, destination, targetFrames, chunkSize, }: {
4
4
  srcNumberOfChannels: number;
5
- sourceChannels: Int16Array;
6
- destination: Int16Array;
5
+ sourceChannels: Int16Array<ArrayBufferLike>;
6
+ destination: Int16Array<ArrayBufferLike>;
7
7
  targetFrames: number;
8
8
  chunkSize: number;
9
9
  }) => void;
@@ -1,11 +1,89 @@
1
- import type { AudioIteratorManager } from '../audio-iterator-manager';
2
- import type { VideoIteratorManager } from '../video-iterator-manager';
3
1
  export declare const drawPreviewOverlay: ({ context, audioTime, audioContextState, audioSyncAnchor, playing, audioIteratorManager, videoIteratorManager, }: {
4
- context: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D;
2
+ context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D;
5
3
  audioTime: number | null;
6
4
  audioContextState: AudioContextState | null;
7
5
  audioSyncAnchor: number;
8
6
  playing: boolean;
9
- audioIteratorManager: AudioIteratorManager | null;
10
- videoIteratorManager: VideoIteratorManager | null;
7
+ audioIteratorManager: {
8
+ startAudioIterator: ({ nonce, playbackRate, startFromSecond, getIsPlaying, scheduleAudioNode, }: {
9
+ startFromSecond: number;
10
+ nonce: import("../nonce-manager").Nonce;
11
+ playbackRate: number;
12
+ getIsPlaying: () => boolean;
13
+ scheduleAudioNode: (node: AudioBufferSourceNode, mediaTimestamp: number) => void;
14
+ }) => Promise<void>;
15
+ resumeScheduledAudioChunks: ({ playbackRate, scheduleAudioNode, }: {
16
+ playbackRate: number;
17
+ scheduleAudioNode: (node: AudioBufferSourceNode, mediaTimestamp: number) => void;
18
+ }) => void;
19
+ pausePlayback: () => void;
20
+ getAudioBufferIterator: () => {
21
+ destroy: () => void;
22
+ getNext: () => Promise<IteratorResult<import("mediabunny").WrappedAudioBuffer, void>>;
23
+ isDestroyed: () => boolean;
24
+ addQueuedAudioNode: (node: AudioBufferSourceNode, timestamp: number, buffer: AudioBuffer) => void;
25
+ removeQueuedAudioNode: (node: AudioBufferSourceNode) => void;
26
+ getAndClearAudioChunksForAfterResuming: () => {
27
+ buffer: AudioBuffer;
28
+ timestamp: number;
29
+ }[];
30
+ getQueuedPeriod: () => {
31
+ from: number;
32
+ until: number;
33
+ } | null;
34
+ tryToSatisfySeek: (time: number, allowWait: import("../audio/allow-wait").AllowWait | null, onBufferScheduled: (buffer: import("mediabunny").WrappedAudioBuffer) => void) => Promise<{
35
+ type: "not-satisfied";
36
+ reason: string;
37
+ } | {
38
+ type: "ended";
39
+ } | {
40
+ type: "satisfied";
41
+ }>;
42
+ addChunkForAfterResuming: (buffer: AudioBuffer, timestamp: number) => void;
43
+ moveQueuedChunksToPauseQueue: () => void;
44
+ getNumberOfChunksAfterResuming: () => number;
45
+ } | null;
46
+ destroyIterator: () => void;
47
+ seek: ({ newTime, nonce, fps, playbackRate, getIsPlaying, scheduleAudioNode, bufferState, }: {
48
+ newTime: number;
49
+ nonce: import("../nonce-manager").Nonce;
50
+ fps: number;
51
+ playbackRate: number;
52
+ getIsPlaying: () => boolean;
53
+ bufferState: import("remotion").UseBufferState;
54
+ scheduleAudioNode: (node: AudioBufferSourceNode, mediaTimestamp: number) => void;
55
+ }) => Promise<void>;
56
+ getAudioIteratorsCreated: () => number;
57
+ setMuted: (newMuted: boolean) => void;
58
+ setVolume: (volume: number) => void;
59
+ scheduleAudioChunk: ({ buffer, mediaTimestamp, playbackRate, scheduleAudioNode, }: {
60
+ buffer: AudioBuffer;
61
+ mediaTimestamp: number;
62
+ playbackRate: number;
63
+ scheduleAudioNode: (node: AudioBufferSourceNode, mediaTimestamp: number) => void;
64
+ }) => void;
65
+ } | null;
66
+ videoIteratorManager: {
67
+ startVideoIterator: (timeToSeek: number, nonce: import("../nonce-manager").Nonce) => Promise<void>;
68
+ getVideoIteratorsCreated: () => number;
69
+ seek: ({ newTime, nonce }: {
70
+ newTime: number;
71
+ nonce: import("../nonce-manager").Nonce;
72
+ }) => Promise<void>;
73
+ destroy: () => void;
74
+ getVideoFrameIterator: () => {
75
+ destroy: () => void;
76
+ getNext: () => Promise<IteratorResult<import("mediabunny").WrappedCanvas, void>>;
77
+ isDestroyed: () => boolean;
78
+ tryToSatisfySeek: (time: number) => Promise<{
79
+ type: "not-satisfied";
80
+ reason: string;
81
+ } | {
82
+ type: "satisfied";
83
+ frame: import("mediabunny").WrappedCanvas;
84
+ }>;
85
+ } | null;
86
+ drawFrame: (frame: import("mediabunny").WrappedCanvas) => void;
87
+ getFramesRendered: () => number;
88
+ } | null;
11
89
  }) => void;