@remotion/media 4.0.431 → 4.0.432

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 (65) hide show
  1. package/dist/audio/audio-for-preview.d.ts +1 -0
  2. package/dist/audio/audio-preview-iterator.d.ts +16 -9
  3. package/dist/audio/props.d.ts +1 -0
  4. package/dist/audio-iterator-manager.d.ts +24 -13
  5. package/dist/debug-overlay/preview-overlay.d.ts +24 -14
  6. package/dist/esm/index.mjs +755 -537
  7. package/dist/make-iterator-with-priming.d.ts +6 -0
  8. package/dist/media-player.d.ts +12 -7
  9. package/dist/prewarm-iterator-for-looping.d.ts +3 -2
  10. package/dist/set-global-time-anchor.d.ts +11 -0
  11. package/dist/shared-audio-context-for-media-player.d.ts +8 -0
  12. package/dist/use-common-effects.d.ts +32 -0
  13. package/dist/video/props.d.ts +1 -0
  14. package/dist/video/video-for-preview.d.ts +1 -0
  15. package/package.json +4 -4
  16. package/dist/audio/allow-wait.d.ts +0 -6
  17. package/dist/audio/allow-wait.js +0 -15
  18. package/dist/audio/audio-for-preview.js +0 -304
  19. package/dist/audio/audio-for-rendering.js +0 -194
  20. package/dist/audio/audio-preview-iterator.js +0 -176
  21. package/dist/audio/audio.js +0 -20
  22. package/dist/audio/props.js +0 -1
  23. package/dist/audio-extraction/audio-cache.js +0 -66
  24. package/dist/audio-extraction/audio-iterator.js +0 -132
  25. package/dist/audio-extraction/audio-manager.js +0 -113
  26. package/dist/audio-extraction/extract-audio.js +0 -132
  27. package/dist/audio-iterator-manager.js +0 -228
  28. package/dist/browser-can-use-webgl2.js +0 -13
  29. package/dist/caches.js +0 -61
  30. package/dist/calculate-playbacktime.js +0 -4
  31. package/dist/convert-audiodata/apply-volume.js +0 -17
  32. package/dist/convert-audiodata/combine-audiodata.js +0 -23
  33. package/dist/convert-audiodata/convert-audiodata.js +0 -73
  34. package/dist/convert-audiodata/resample-audiodata.js +0 -94
  35. package/dist/debug-overlay/preview-overlay.js +0 -42
  36. package/dist/extract-frame-and-audio.js +0 -101
  37. package/dist/get-sink.js +0 -15
  38. package/dist/get-time-in-seconds.js +0 -40
  39. package/dist/helpers/round-to-4-digits.js +0 -4
  40. package/dist/index.js +0 -12
  41. package/dist/is-network-error.d.ts +0 -6
  42. package/dist/is-network-error.js +0 -17
  43. package/dist/is-type-of-error.js +0 -20
  44. package/dist/looped-frame.js +0 -10
  45. package/dist/media-player.js +0 -431
  46. package/dist/nonce-manager.js +0 -13
  47. package/dist/prewarm-iterator-for-looping.js +0 -56
  48. package/dist/render-timestamp-range.js +0 -9
  49. package/dist/show-in-timeline.js +0 -31
  50. package/dist/use-media-in-timeline.js +0 -103
  51. package/dist/video/props.js +0 -1
  52. package/dist/video/video-for-preview.js +0 -331
  53. package/dist/video/video-for-rendering.js +0 -263
  54. package/dist/video/video-preview-iterator.js +0 -122
  55. package/dist/video/video.js +0 -35
  56. package/dist/video-extraction/add-broadcast-channel-listener.js +0 -125
  57. package/dist/video-extraction/extract-frame-via-broadcast-channel.js +0 -113
  58. package/dist/video-extraction/extract-frame.js +0 -85
  59. package/dist/video-extraction/get-allocation-size.js +0 -6
  60. package/dist/video-extraction/get-frames-since-keyframe.js +0 -108
  61. package/dist/video-extraction/keyframe-bank.js +0 -159
  62. package/dist/video-extraction/keyframe-manager.js +0 -206
  63. package/dist/video-extraction/remember-actual-matroska-timestamps.js +0 -19
  64. package/dist/video-extraction/rotate-frame.js +0 -34
  65. package/dist/video-iterator-manager.js +0 -109
@@ -25,6 +25,7 @@ type InnerAudioProps = {
25
25
  readonly toneFrequency?: number;
26
26
  readonly audioStreamIndex?: number;
27
27
  readonly fallbackHtml5AudioProps?: FallbackHtml5AudioProps;
28
+ readonly debugAudioScheduling?: boolean;
28
29
  readonly onError?: MediaOnError;
29
30
  };
30
31
  export declare const AudioForPreview: React.FC<InnerAudioProps>;
@@ -4,24 +4,31 @@ export type QueuedNode = {
4
4
  node: AudioBufferSourceNode;
5
5
  timestamp: number;
6
6
  buffer: AudioBuffer;
7
- maxDuration: number | null;
7
+ scheduledTime: number;
8
+ playbackRate: number;
8
9
  };
9
- export declare const makeAudioIterator: (startFromSecond: number, cache: {
10
- prewarmIteratorForLooping: ({ timeToSeek }: {
10
+ export declare const makeAudioIterator: (startFromSecond: number, maximumTimestamp: number, cache: {
11
+ prewarmIteratorForLooping: ({ timeToSeek, maximumTimestamp, }: {
11
12
  timeToSeek: number;
13
+ maximumTimestamp: number;
12
14
  }) => void;
13
- makeIteratorOrUsePrewarmed: (timeToSeek: number) => AsyncGenerator<WrappedAudioBuffer, void, unknown>;
14
- destroy: () => void;
15
- }) => {
15
+ makeIteratorOrUsePrewarmed: (timeToSeek: number, maximumTimestamp: number) => AsyncGenerator<WrappedAudioBuffer, void, unknown>;
16
16
  destroy: () => void;
17
+ }, debugAudioScheduling: boolean) => {
18
+ destroy: (audioContext: AudioContext) => void;
17
19
  getNext: () => Promise<IteratorResult<WrappedAudioBuffer, void>>;
18
20
  isDestroyed: () => boolean;
19
- addQueuedAudioNode: (node: AudioBufferSourceNode, timestamp: number, buffer: AudioBuffer, maxDuration: number | null) => void;
21
+ addQueuedAudioNode: ({ node, timestamp, buffer, scheduledTime, playbackRate, }: {
22
+ node: AudioBufferSourceNode;
23
+ timestamp: number;
24
+ buffer: AudioBuffer;
25
+ scheduledTime: number;
26
+ playbackRate: number;
27
+ }) => void;
20
28
  removeQueuedAudioNode: (node: AudioBufferSourceNode) => void;
21
29
  getAndClearAudioChunksForAfterResuming: () => {
22
30
  buffer: AudioBuffer;
23
31
  timestamp: number;
24
- maxDuration: number | null;
25
32
  }[];
26
33
  getQueuedPeriod: () => {
27
34
  from: number;
@@ -42,7 +49,7 @@ export declare const makeAudioIterator: (startFromSecond: number, cache: {
42
49
  } | {
43
50
  type: "max-reached";
44
51
  }>;
45
- addChunkForAfterResuming: (buffer: AudioBuffer, timestamp: number, maxDuration: number | null) => void;
52
+ addChunkForAfterResuming: (buffer: AudioBuffer, timestamp: number) => void;
46
53
  moveQueuedChunksToPauseQueue: () => void;
47
54
  getNumberOfChunksAfterResuming: () => number;
48
55
  };
@@ -31,5 +31,6 @@ export type AudioProps = {
31
31
  toneFrequency?: number;
32
32
  delayRenderRetries?: number;
33
33
  delayRenderTimeoutInMilliseconds?: number;
34
+ debugAudioScheduling?: boolean;
34
35
  onError?: MediaOnError;
35
36
  };
@@ -1,6 +1,8 @@
1
1
  import type { InputAudioTrack, WrappedAudioBuffer } from 'mediabunny';
2
+ import { type ScheduleAudioNodeResult } from 'remotion';
2
3
  import type { DelayPlaybackIfNotPremounting } from './delay-playback-if-not-premounting';
3
4
  import type { Nonce } from './nonce-manager';
5
+ type ScheduleAudioNode = (node: AudioBufferSourceNode, mediaTimestamp: number) => ScheduleAudioNodeResult;
4
6
  export declare const audioIteratorManager: ({ audioTrack, delayPlaybackHandleIfNotPremounting, sharedAudioContext, getIsLooping, getEndTime, getStartTime, initialMuted, drawDebugOverlay, }: {
5
7
  audioTrack: InputAudioTrack;
6
8
  delayPlaybackHandleIfNotPremounting: () => DelayPlaybackIfNotPremounting;
@@ -11,28 +13,35 @@ export declare const audioIteratorManager: ({ audioTrack, delayPlaybackHandleIfN
11
13
  initialMuted: boolean;
12
14
  drawDebugOverlay: () => void;
13
15
  }) => {
14
- startAudioIterator: ({ nonce, playbackRate, startFromSecond, getIsPlaying, scheduleAudioNode, }: {
16
+ startAudioIterator: ({ nonce, playbackRate, startFromSecond, getIsPlaying, scheduleAudioNode, debugAudioScheduling, }: {
15
17
  startFromSecond: number;
16
18
  nonce: Nonce;
17
19
  playbackRate: number;
18
20
  getIsPlaying: () => boolean;
19
- scheduleAudioNode: (node: AudioBufferSourceNode, mediaTimestamp: number, maxDuration: number | null) => void;
21
+ scheduleAudioNode: ScheduleAudioNode;
22
+ debugAudioScheduling: boolean;
20
23
  }) => Promise<void>;
21
- resumeScheduledAudioChunks: ({ playbackRate, scheduleAudioNode, }: {
24
+ resumeScheduledAudioChunks: ({ playbackRate, scheduleAudioNode, debugAudioScheduling, }: {
22
25
  playbackRate: number;
23
- scheduleAudioNode: (node: AudioBufferSourceNode, mediaTimestamp: number, maxDuration: number | null) => void;
26
+ scheduleAudioNode: ScheduleAudioNode;
27
+ debugAudioScheduling: boolean;
24
28
  }) => void;
25
29
  pausePlayback: () => void;
26
30
  getAudioBufferIterator: () => {
27
- destroy: () => void;
31
+ destroy: (audioContext: AudioContext) => void;
28
32
  getNext: () => Promise<IteratorResult<WrappedAudioBuffer, void>>;
29
33
  isDestroyed: () => boolean;
30
- addQueuedAudioNode: (node: AudioBufferSourceNode, timestamp: number, buffer: AudioBuffer, maxDuration: number | null) => void;
34
+ addQueuedAudioNode: ({ node, timestamp, buffer, scheduledTime, playbackRate, }: {
35
+ node: AudioBufferSourceNode;
36
+ timestamp: number;
37
+ buffer: AudioBuffer;
38
+ scheduledTime: number;
39
+ playbackRate: number;
40
+ }) => void;
31
41
  removeQueuedAudioNode: (node: AudioBufferSourceNode) => void;
32
42
  getAndClearAudioChunksForAfterResuming: () => {
33
43
  buffer: AudioBuffer;
34
44
  timestamp: number;
35
- maxDuration: number | null;
36
45
  }[];
37
46
  getQueuedPeriod: () => {
38
47
  from: number;
@@ -53,27 +62,29 @@ export declare const audioIteratorManager: ({ audioTrack, delayPlaybackHandleIfN
53
62
  } | {
54
63
  type: "max-reached";
55
64
  }>;
56
- addChunkForAfterResuming: (buffer: AudioBuffer, timestamp: number, maxDuration: number | null) => void;
65
+ addChunkForAfterResuming: (buffer: AudioBuffer, timestamp: number) => void;
57
66
  moveQueuedChunksToPauseQueue: () => void;
58
67
  getNumberOfChunksAfterResuming: () => number;
59
68
  } | null;
60
69
  destroyIterator: () => void;
61
- seek: ({ newTime, nonce, playbackRate, getIsPlaying, scheduleAudioNode, }: {
70
+ seek: ({ newTime, nonce, playbackRate, getIsPlaying, scheduleAudioNode, debugAudioScheduling, }: {
62
71
  newTime: number;
63
72
  nonce: Nonce;
64
73
  playbackRate: number;
65
74
  getIsPlaying: () => boolean;
66
- scheduleAudioNode: (node: AudioBufferSourceNode, mediaTimestamp: number, maxDuration: number | null) => void;
75
+ scheduleAudioNode: ScheduleAudioNode;
76
+ debugAudioScheduling: boolean;
67
77
  }) => Promise<void>;
68
78
  getAudioIteratorsCreated: () => number;
69
79
  setMuted: (newMuted: boolean) => void;
70
80
  setVolume: (volume: number) => void;
71
- scheduleAudioChunk: ({ buffer, mediaTimestamp, playbackRate, scheduleAudioNode, maxDuration, }: {
81
+ scheduleAudioChunk: ({ buffer, mediaTimestamp, playbackRate, scheduleAudioNode, debugAudioScheduling, }: {
72
82
  buffer: AudioBuffer;
73
83
  mediaTimestamp: number;
74
84
  playbackRate: number;
75
- scheduleAudioNode: (node: AudioBufferSourceNode, mediaTimestamp: number, maxDuration: number | null) => void;
76
- maxDuration: number | null;
85
+ scheduleAudioNode: ScheduleAudioNode;
86
+ debugAudioScheduling: boolean;
77
87
  }) => void;
78
88
  };
79
89
  export type AudioIteratorManager = ReturnType<typeof audioIteratorManager>;
90
+ export {};
@@ -2,31 +2,40 @@ export declare const drawPreviewOverlay: ({ context, audioTime, audioContextStat
2
2
  context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D;
3
3
  audioTime: number | null;
4
4
  audioContextState: AudioContextState | null;
5
- audioSyncAnchor: number;
5
+ audioSyncAnchor: {
6
+ value: number;
7
+ } | null;
6
8
  playing: boolean;
7
9
  audioIteratorManager: {
8
- startAudioIterator: ({ nonce, playbackRate, startFromSecond, getIsPlaying, scheduleAudioNode, }: {
10
+ startAudioIterator: ({ nonce, playbackRate, startFromSecond, getIsPlaying, scheduleAudioNode, debugAudioScheduling, }: {
9
11
  startFromSecond: number;
10
12
  nonce: import("../nonce-manager").Nonce;
11
13
  playbackRate: number;
12
14
  getIsPlaying: () => boolean;
13
- scheduleAudioNode: (node: AudioBufferSourceNode, mediaTimestamp: number, maxDuration: number | null) => void;
15
+ scheduleAudioNode: (node: AudioBufferSourceNode, mediaTimestamp: number) => import("remotion").ScheduleAudioNodeResult;
16
+ debugAudioScheduling: boolean;
14
17
  }) => Promise<void>;
15
- resumeScheduledAudioChunks: ({ playbackRate, scheduleAudioNode, }: {
18
+ resumeScheduledAudioChunks: ({ playbackRate, scheduleAudioNode, debugAudioScheduling, }: {
16
19
  playbackRate: number;
17
- scheduleAudioNode: (node: AudioBufferSourceNode, mediaTimestamp: number, maxDuration: number | null) => void;
20
+ scheduleAudioNode: (node: AudioBufferSourceNode, mediaTimestamp: number) => import("remotion").ScheduleAudioNodeResult;
21
+ debugAudioScheduling: boolean;
18
22
  }) => void;
19
23
  pausePlayback: () => void;
20
24
  getAudioBufferIterator: () => {
21
- destroy: () => void;
25
+ destroy: (audioContext: AudioContext) => void;
22
26
  getNext: () => Promise<IteratorResult<import("mediabunny").WrappedAudioBuffer, void>>;
23
27
  isDestroyed: () => boolean;
24
- addQueuedAudioNode: (node: AudioBufferSourceNode, timestamp: number, buffer: AudioBuffer, maxDuration: number | null) => void;
28
+ addQueuedAudioNode: ({ node, timestamp, buffer, scheduledTime, playbackRate, }: {
29
+ node: AudioBufferSourceNode;
30
+ timestamp: number;
31
+ buffer: AudioBuffer;
32
+ scheduledTime: number;
33
+ playbackRate: number;
34
+ }) => void;
25
35
  removeQueuedAudioNode: (node: AudioBufferSourceNode) => void;
26
36
  getAndClearAudioChunksForAfterResuming: () => {
27
37
  buffer: AudioBuffer;
28
38
  timestamp: number;
29
- maxDuration: number | null;
30
39
  }[];
31
40
  getQueuedPeriod: () => {
32
41
  from: number;
@@ -47,27 +56,28 @@ export declare const drawPreviewOverlay: ({ context, audioTime, audioContextStat
47
56
  } | {
48
57
  type: "max-reached";
49
58
  }>;
50
- addChunkForAfterResuming: (buffer: AudioBuffer, timestamp: number, maxDuration: number | null) => void;
59
+ addChunkForAfterResuming: (buffer: AudioBuffer, timestamp: number) => void;
51
60
  moveQueuedChunksToPauseQueue: () => void;
52
61
  getNumberOfChunksAfterResuming: () => number;
53
62
  } | null;
54
63
  destroyIterator: () => void;
55
- seek: ({ newTime, nonce, playbackRate, getIsPlaying, scheduleAudioNode, }: {
64
+ seek: ({ newTime, nonce, playbackRate, getIsPlaying, scheduleAudioNode, debugAudioScheduling, }: {
56
65
  newTime: number;
57
66
  nonce: import("../nonce-manager").Nonce;
58
67
  playbackRate: number;
59
68
  getIsPlaying: () => boolean;
60
- scheduleAudioNode: (node: AudioBufferSourceNode, mediaTimestamp: number, maxDuration: number | null) => void;
69
+ scheduleAudioNode: (node: AudioBufferSourceNode, mediaTimestamp: number) => import("remotion").ScheduleAudioNodeResult;
70
+ debugAudioScheduling: boolean;
61
71
  }) => Promise<void>;
62
72
  getAudioIteratorsCreated: () => number;
63
73
  setMuted: (newMuted: boolean) => void;
64
74
  setVolume: (volume: number) => void;
65
- scheduleAudioChunk: ({ buffer, mediaTimestamp, playbackRate, scheduleAudioNode, maxDuration, }: {
75
+ scheduleAudioChunk: ({ buffer, mediaTimestamp, playbackRate, scheduleAudioNode, debugAudioScheduling, }: {
66
76
  buffer: AudioBuffer;
67
77
  mediaTimestamp: number;
68
78
  playbackRate: number;
69
- scheduleAudioNode: (node: AudioBufferSourceNode, mediaTimestamp: number, maxDuration: number | null) => void;
70
- maxDuration: number | null;
79
+ scheduleAudioNode: (node: AudioBufferSourceNode, mediaTimestamp: number) => import("remotion").ScheduleAudioNodeResult;
80
+ debugAudioScheduling: boolean;
71
81
  }) => void;
72
82
  } | null;
73
83
  videoIteratorManager: {