@remotion/media 4.0.402 → 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 (77) 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 +34 -17
  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 +524 -476
  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 +2 -4
  26. package/dist/video-extraction/get-frames-since-keyframe.d.ts +2 -12
  27. package/dist/video-extraction/keyframe-bank.d.ts +14 -12
  28. package/dist/video-extraction/keyframe-manager.d.ts +7 -9
  29. package/dist/video-iterator-manager.d.ts +4 -5
  30. package/package.json +8 -7
  31. package/dist/audio/allow-wait.js +0 -15
  32. package/dist/audio/audio-for-preview.js +0 -304
  33. package/dist/audio/audio-for-rendering.js +0 -194
  34. package/dist/audio/audio-preview-iterator.js +0 -176
  35. package/dist/audio/audio.js +0 -20
  36. package/dist/audio/props.js +0 -1
  37. package/dist/audio-extraction/audio-cache.js +0 -66
  38. package/dist/audio-extraction/audio-iterator.js +0 -132
  39. package/dist/audio-extraction/audio-manager.js +0 -113
  40. package/dist/audio-extraction/extract-audio.js +0 -132
  41. package/dist/audio-iterator-manager.js +0 -228
  42. package/dist/browser-can-use-webgl2.js +0 -13
  43. package/dist/caches.js +0 -61
  44. package/dist/calculate-playbacktime.js +0 -4
  45. package/dist/convert-audiodata/apply-volume.js +0 -17
  46. package/dist/convert-audiodata/combine-audiodata.js +0 -23
  47. package/dist/convert-audiodata/convert-audiodata.js +0 -73
  48. package/dist/convert-audiodata/resample-audiodata.js +0 -94
  49. package/dist/debug-overlay/preview-overlay.js +0 -44
  50. package/dist/extract-frame-and-audio.js +0 -101
  51. package/dist/get-sink.js +0 -15
  52. package/dist/get-time-in-seconds.js +0 -40
  53. package/dist/helpers/round-to-4-digits.js +0 -4
  54. package/dist/index.js +0 -12
  55. package/dist/is-type-of-error.js +0 -20
  56. package/dist/looped-frame.js +0 -10
  57. package/dist/media-player.js +0 -445
  58. package/dist/nonce-manager.js +0 -13
  59. package/dist/prewarm-iterator-for-looping.js +0 -56
  60. package/dist/render-timestamp-range.js +0 -9
  61. package/dist/show-in-timeline.js +0 -31
  62. package/dist/use-media-in-timeline.js +0 -103
  63. package/dist/video/props.js +0 -1
  64. package/dist/video/video-for-preview.js +0 -329
  65. package/dist/video/video-for-rendering.js +0 -263
  66. package/dist/video/video-preview-iterator.js +0 -122
  67. package/dist/video/video.js +0 -35
  68. package/dist/video-extraction/add-broadcast-channel-listener.js +0 -125
  69. package/dist/video-extraction/extract-frame-via-broadcast-channel.js +0 -113
  70. package/dist/video-extraction/extract-frame.js +0 -85
  71. package/dist/video-extraction/get-allocation-size.js +0 -6
  72. package/dist/video-extraction/get-frames-since-keyframe.js +0 -108
  73. package/dist/video-extraction/keyframe-bank.js +0 -159
  74. package/dist/video-extraction/keyframe-manager.js +0 -206
  75. package/dist/video-extraction/remember-actual-matroska-timestamps.js +0 -19
  76. package/dist/video-extraction/rotate-frame.js +0 -34
  77. 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,19 +1,17 @@
1
- import { type LogLevel } from 'remotion';
2
- export declare const SAFE_BACK_WINDOW_IN_SECONDS = 1;
1
+ export declare const SAFE_WINDOW_OF_MONOTONICITY = 0.2;
3
2
  export declare const keyframeManager: {
4
- requestKeyframeBank: ({ packetSink, timestamp, videoSampleSink, src, logLevel, maxCacheSize, }: {
5
- packetSink: import("mediabunny").EncodedPacketSink;
3
+ requestKeyframeBank: ({ timestamp, videoSampleSink, src, logLevel, maxCacheSize, }: {
6
4
  timestamp: number;
7
5
  videoSampleSink: import("mediabunny").VideoSampleSink;
8
6
  src: string;
9
- logLevel: LogLevel;
7
+ logLevel: "error" | "info" | "trace" | "verbose" | "warn";
10
8
  maxCacheSize: number;
11
- }) => Promise<import("./video-extraction/keyframe-bank").KeyframeBank | "has-alpha" | null>;
12
- getCacheStats: () => Promise<{
9
+ }) => Promise<import("./video-extraction/keyframe-bank").KeyframeBank>;
10
+ getCacheStats: () => {
13
11
  count: number;
14
12
  totalSize: number;
15
- }>;
16
- clearAll: (logLevel: LogLevel) => Promise<void>;
13
+ };
14
+ clearAll: (logLevel: "error" | "info" | "trace" | "verbose" | "warn") => void;
17
15
  };
18
16
  export declare const audioManager: {
19
17
  getIterator: ({ src, timeInSeconds, audioSampleSink, isMatroska, actualMatroskaTimestamps, logLevel, maxCacheSize, }: {
@@ -21,10 +19,29 @@ export declare const audioManager: {
21
19
  timeInSeconds: number;
22
20
  audioSampleSink: import("mediabunny").AudioSampleSink;
23
21
  isMatroska: boolean;
24
- actualMatroskaTimestamps: import("./video-extraction/remember-actual-matroska-timestamps").RememberActualMatroskaTimestamps;
25
- logLevel: LogLevel;
22
+ actualMatroskaTimestamps: {
23
+ observeTimestamp: (startTime: number) => void;
24
+ getRealTimestamp: (observedTimestamp: number) => number | null;
25
+ };
26
+ logLevel: "error" | "info" | "trace" | "verbose" | "warn";
26
27
  maxCacheSize: number;
27
- }) => 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
+ }>;
28
45
  getCacheStats: () => {
29
46
  count: number;
30
47
  totalSize: number;
@@ -47,11 +64,11 @@ export declare const audioManager: {
47
64
  getNewestTimestamp: () => number | null;
48
65
  } | null;
49
66
  logOpenFrames: () => void;
50
- deleteDuplicateIterators: (logLevel: LogLevel) => void;
67
+ deleteDuplicateIterators: (logLevel: "error" | "info" | "trace" | "verbose" | "warn") => void;
51
68
  };
52
- export declare const getTotalCacheStats: () => Promise<{
69
+ export declare const getTotalCacheStats: () => {
53
70
  count: number;
54
71
  totalSize: number;
55
- }>;
56
- export declare const getMaxVideoCacheSize: (logLevel: LogLevel) => number;
57
- 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;