node-av 5.2.0-beta.3 → 5.2.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 (95) hide show
  1. package/README.md +120 -66
  2. package/build_mac_local.sh +69 -0
  3. package/dist/api/bitstream-filter.d.ts +20 -1
  4. package/dist/api/bitstream-filter.js +11 -1
  5. package/dist/api/bitstream-filter.js.map +1 -1
  6. package/dist/api/decoder.d.ts +98 -2
  7. package/dist/api/decoder.js +17 -2
  8. package/dist/api/decoder.js.map +1 -1
  9. package/dist/api/demuxer.d.ts +233 -4
  10. package/dist/api/demuxer.js +184 -21
  11. package/dist/api/demuxer.js.map +1 -1
  12. package/dist/api/device.d.ts +586 -0
  13. package/dist/api/device.js +961 -0
  14. package/dist/api/device.js.map +1 -0
  15. package/dist/api/encoder.d.ts +101 -2
  16. package/dist/api/encoder.js +17 -2
  17. package/dist/api/encoder.js.map +1 -1
  18. package/dist/api/filter-complex.d.ts +54 -2
  19. package/dist/api/filter-complex.js +1 -1
  20. package/dist/api/filter-complex.js.map +1 -1
  21. package/dist/api/filter.d.ts +95 -1
  22. package/dist/api/filter.js +12 -2
  23. package/dist/api/filter.js.map +1 -1
  24. package/dist/api/fmp4-stream.d.ts +5 -4
  25. package/dist/api/fmp4-stream.js +19 -7
  26. package/dist/api/fmp4-stream.js.map +1 -1
  27. package/dist/api/hardware.d.ts +17 -1
  28. package/dist/api/hardware.js.map +1 -1
  29. package/dist/api/index.d.ts +12 -12
  30. package/dist/api/index.js +2 -0
  31. package/dist/api/index.js.map +1 -1
  32. package/dist/api/io-stream.d.ts +188 -6
  33. package/dist/api/io-stream.js +167 -16
  34. package/dist/api/io-stream.js.map +1 -1
  35. package/dist/api/muxer.d.ts +184 -26
  36. package/dist/api/muxer.js +79 -15
  37. package/dist/api/muxer.js.map +1 -1
  38. package/dist/api/pipeline.d.ts +75 -21
  39. package/dist/api/pipeline.js +40 -12
  40. package/dist/api/pipeline.js.map +1 -1
  41. package/dist/api/rtp-stream.d.ts +15 -4
  42. package/dist/api/rtp-stream.js +29 -7
  43. package/dist/api/rtp-stream.js.map +1 -1
  44. package/dist/api/utilities/index.d.ts +2 -2
  45. package/dist/api/utilities/index.js +2 -2
  46. package/dist/api/utilities/index.js.map +1 -1
  47. package/dist/api/webrtc-stream.d.ts +9 -9
  48. package/dist/api/webrtc-stream.js +26 -12
  49. package/dist/api/webrtc-stream.js.map +1 -1
  50. package/dist/constants/channel-layouts.d.ts +2 -0
  51. package/dist/constants/channel-layouts.js +22 -20
  52. package/dist/constants/channel-layouts.js.map +1 -1
  53. package/dist/constants/constants.d.ts +10 -5
  54. package/dist/constants/constants.js +13 -8
  55. package/dist/constants/constants.js.map +1 -1
  56. package/dist/constants/decoders.d.ts +1 -0
  57. package/dist/constants/decoders.js +2 -1
  58. package/dist/constants/decoders.js.map +1 -1
  59. package/dist/constants/encoders.d.ts +4 -2
  60. package/dist/constants/encoders.js +6 -4
  61. package/dist/constants/encoders.js.map +1 -1
  62. package/dist/lib/binding.d.ts +2 -1
  63. package/dist/lib/binding.js.map +1 -1
  64. package/dist/lib/codec.d.ts +10 -1
  65. package/dist/lib/codec.js.map +1 -1
  66. package/dist/lib/device.d.ts +291 -0
  67. package/dist/lib/device.js +324 -0
  68. package/dist/lib/device.js.map +1 -0
  69. package/dist/lib/filter.d.ts +8 -1
  70. package/dist/lib/filter.js.map +1 -1
  71. package/dist/lib/format-context.d.ts +17 -2
  72. package/dist/lib/format-context.js.map +1 -1
  73. package/dist/lib/frame-utils.d.ts +34 -1
  74. package/dist/lib/frame-utils.js.map +1 -1
  75. package/dist/lib/frame.d.ts +23 -1
  76. package/dist/lib/frame.js.map +1 -1
  77. package/dist/lib/index.d.ts +7 -6
  78. package/dist/lib/index.js +3 -1
  79. package/dist/lib/index.js.map +1 -1
  80. package/dist/lib/io-context.d.ts +16 -1
  81. package/dist/lib/io-context.js +17 -0
  82. package/dist/lib/io-context.js.map +1 -1
  83. package/dist/lib/log.d.ts +6 -1
  84. package/dist/lib/log.js.map +1 -1
  85. package/dist/lib/native-types.d.ts +62 -11
  86. package/dist/lib/native-types.js +0 -9
  87. package/dist/lib/native-types.js.map +1 -1
  88. package/dist/lib/types.d.ts +2 -118
  89. package/dist/lib/types.js +0 -6
  90. package/dist/lib/types.js.map +1 -1
  91. package/package.json +14 -14
  92. package/BENCHMARK.md +0 -113
  93. package/dist/api/types.d.ts +0 -829
  94. package/dist/api/types.js +0 -2
  95. package/dist/api/types.js.map +0 -1
@@ -1,5 +1,77 @@
1
+ import { Readable } from 'node:stream';
1
2
  import { IOContext } from '../lib/index.js';
2
- import type { DemuxerOptions, IOInputCallbacks } from './types.js';
3
+ import type { Writable } from 'node:stream';
4
+ import type { AVSeekWhence } from '../constants/index.js';
5
+ import type { DemuxerOptions } from './demuxer.js';
6
+ import type { MuxerOptions } from './muxer.js';
7
+ /**
8
+ * Custom I/O callbacks for implementing custom input sources.
9
+ *
10
+ */
11
+ export interface IOInputCallbacks {
12
+ /**
13
+ * Read callback - called when FFmpeg needs to read data.
14
+ *
15
+ * Can be synchronous or async (return a Promise).
16
+ *
17
+ * @param size - Number of bytes to read
18
+ *
19
+ * @returns Buffer with data, null for EOF, negative error code, or Promise resolving to same
20
+ */
21
+ read: (size: number) => Buffer | null | number | Promise<Buffer | null | number>;
22
+ /**
23
+ * Seek callback - called when FFmpeg needs to seek in the stream.
24
+ *
25
+ * Can be synchronous or async (return a Promise).
26
+ *
27
+ * @param offset - Offset to seek to
28
+ *
29
+ * @param whence - Seek origin (AVSEEK_SET, AVSEEK_CUR, AVSEEK_END, or AVSEEK_SIZE)
30
+ *
31
+ * @returns New position, negative error code, or Promise resolving to same
32
+ */
33
+ seek?: (offset: bigint, whence: AVSeekWhence) => bigint | number | Promise<bigint | number>;
34
+ }
35
+ /**
36
+ * Custom I/O callbacks for implementing custom output targets.
37
+ *
38
+ */
39
+ export interface IOOutputCallbacks {
40
+ /**
41
+ * Write callback - called when FFmpeg needs to write data.
42
+ *
43
+ * Can be synchronous or async (return a Promise).
44
+ * The buffer may be reused by FFmpeg after the callback completes,
45
+ * so copy it if you need to keep the data.
46
+ *
47
+ * @param buffer - Buffer containing data to write
48
+ *
49
+ * @returns Number of bytes written, void (assumes all bytes written), or Promise resolving to same
50
+ */
51
+ write: (buffer: Buffer) => number | void | Promise<number | void>;
52
+ /**
53
+ * Seek callback - called when FFmpeg needs to seek in the output.
54
+ *
55
+ * Can be synchronous or async (return a Promise).
56
+ *
57
+ * @param offset - Offset to seek to
58
+ *
59
+ * @param whence - Seek origin (AVSEEK_SET, AVSEEK_CUR, AVSEEK_END)
60
+ *
61
+ * @returns New position, negative error code, or Promise resolving to same
62
+ */
63
+ seek?: (offset: bigint, whence: AVSeekWhence) => bigint | number | Promise<bigint | number>;
64
+ /**
65
+ * Read callback - some formats may need to read back data.
66
+ *
67
+ * Can be synchronous or async (return a Promise).
68
+ *
69
+ * @param size - Number of bytes to read
70
+ *
71
+ * @returns Buffer with data, null for EOF, negative error code, or Promise resolving to same
72
+ */
73
+ read?: (size: number) => Buffer | null | number | Promise<Buffer | null | number>;
74
+ }
3
75
  /**
4
76
  * Factory for creating custom I/O contexts.
5
77
  *
@@ -90,6 +162,71 @@ export declare class IOStream {
90
162
  * ```
91
163
  */
92
164
  static create(callbacks: IOInputCallbacks, options?: DemuxerOptions): IOContext;
165
+ /**
166
+ * Create I/O context from a Node.js Readable stream.
167
+ *
168
+ * Creates an I/O context that reads from a Readable stream.
169
+ * Seeking is not supported for streams.
170
+ *
171
+ * @param stream - Node.js Readable stream
172
+ *
173
+ * @param options - I/O configuration options
174
+ *
175
+ * @returns Configured I/O context
176
+ *
177
+ * @example
178
+ * ```typescript
179
+ * const readable = fs.createReadStream('video.mkv');
180
+ * const ioContext = IOStream.create(readable, { format: 'matroska' });
181
+ * ```
182
+ */
183
+ static create(stream: Readable, options?: DemuxerOptions): IOContext;
184
+ /**
185
+ * Create I/O context for writing to a Node.js Writable stream.
186
+ *
187
+ * Creates a write-mode I/O context from a Writable stream with
188
+ * backpressure support and automatic buffer copying.
189
+ * Seeking is not supported for streams.
190
+ *
191
+ * @param stream - Node.js Writable stream
192
+ *
193
+ * @param options - Output configuration options
194
+ *
195
+ * @returns Configured I/O context
196
+ *
197
+ * @example
198
+ * ```typescript
199
+ * const writable = fs.createWriteStream('output.mkv');
200
+ * const ioContext = IOStream.createOutput(writable, { format: 'matroska' });
201
+ * ```
202
+ */
203
+ static createOutput(stream: Writable, options?: MuxerOptions): IOContext;
204
+ /**
205
+ * Create I/O context from custom output callbacks.
206
+ *
207
+ * Creates a write-mode I/O context using custom write, optional seek,
208
+ * and optional read callbacks.
209
+ *
210
+ * @param callbacks - I/O callbacks for write, seek, and read operations
211
+ *
212
+ * @param options - Output configuration options
213
+ *
214
+ * @returns Configured I/O context
215
+ *
216
+ * @throws {Error} If callbacks missing required write function
217
+ *
218
+ * @example
219
+ * ```typescript
220
+ * const chunks: Buffer[] = [];
221
+ * const ioContext = IOStream.createOutput({
222
+ * write: (buffer) => {
223
+ * chunks.push(Buffer.from(buffer));
224
+ * return buffer.length;
225
+ * }
226
+ * }, { format: 'matroska' });
227
+ * ```
228
+ */
229
+ static createOutput(callbacks: IOOutputCallbacks, options?: MuxerOptions): IOContext;
93
230
  /**
94
231
  * Create I/O context from buffer.
95
232
  *
@@ -106,10 +243,41 @@ export declare class IOStream {
106
243
  */
107
244
  private static createFromBuffer;
108
245
  /**
109
- * Create I/O context from callbacks.
246
+ * Create I/O context from a Node.js Readable stream.
247
+ *
248
+ * Sets up async read callbacks that buffer data from the stream.
249
+ * Seeking is not supported for streams.
250
+ *
251
+ * @param stream - Node.js Readable stream
252
+ *
253
+ * @param bufferSize - Internal buffer size
254
+ *
255
+ * @returns Configured I/O context
110
256
  *
111
- * Sets up custom I/O with user-provided callbacks.
112
- * Supports read and optional seek operations.
257
+ * @internal
258
+ */
259
+ private static createFromReadable;
260
+ /**
261
+ * Create I/O context for writing to a Node.js Writable stream.
262
+ *
263
+ * Sets up async write callbacks with backpressure support.
264
+ * The buffer is copied before writing since FFmpeg reuses its internal buffer.
265
+ *
266
+ * @param stream - Node.js Writable stream
267
+ *
268
+ * @param bufferSize - Internal buffer size
269
+ *
270
+ * @param maxPacketSize - Maximum packet size
271
+ *
272
+ * @returns Configured I/O context
273
+ *
274
+ * @internal
275
+ */
276
+ private static createForWritable;
277
+ /**
278
+ * Create I/O context from custom input callbacks.
279
+ *
280
+ * Sets up custom I/O with user-provided read and optional seek callbacks.
113
281
  *
114
282
  * @param callbacks - User I/O callbacks
115
283
  *
@@ -117,9 +285,23 @@ export declare class IOStream {
117
285
  *
118
286
  * @returns Configured I/O context
119
287
  *
120
- * @throws {Error} If read callback not provided
288
+ * @internal
289
+ */
290
+ private static createFromInputCallbacks;
291
+ /**
292
+ * Create I/O context from custom output callbacks.
293
+ *
294
+ * Sets up custom I/O with user-provided write, optional seek, and optional read callbacks.
295
+ *
296
+ * @param callbacks - User I/O callbacks
297
+ *
298
+ * @param bufferSize - Internal buffer size
299
+ *
300
+ * @param maxPacketSize - Maximum packet size
301
+ *
302
+ * @returns Configured I/O context
121
303
  *
122
304
  * @internal
123
305
  */
124
- private static createFromCallbacks;
306
+ private static createFromOutputCallbacks;
125
307
  }
@@ -1,6 +1,8 @@
1
+ import { once } from 'node:events';
2
+ import { Readable } from 'node:stream';
1
3
  import { AVSEEK_CUR, AVSEEK_END, AVSEEK_SET, AVSEEK_SIZE } from '../constants/constants.js';
2
4
  import { IOContext } from '../lib/index.js';
3
- import { IO_BUFFER_SIZE } from './constants.js';
5
+ import { IO_BUFFER_SIZE, MAX_PACKET_SIZE } from './constants.js';
4
6
  /**
5
7
  * Factory for creating custom I/O contexts.
6
8
  *
@@ -49,11 +51,27 @@ export class IOStream {
49
51
  if (Buffer.isBuffer(input)) {
50
52
  return this.createFromBuffer(input, bufferSize);
51
53
  }
54
+ // Handle Readable stream (must be before callbacks check since Readable has 'read')
55
+ if (input instanceof Readable) {
56
+ return this.createFromReadable(input, bufferSize);
57
+ }
52
58
  // Handle custom callbacks
53
59
  if (typeof input === 'object' && 'read' in input) {
54
- return this.createFromCallbacks(input, bufferSize);
60
+ return this.createFromInputCallbacks(input, bufferSize);
55
61
  }
56
- throw new TypeError('Invalid input type. Expected Buffer or IOInputCallbacks');
62
+ throw new TypeError('Invalid input type. Expected Buffer, Readable, or IOInputCallbacks');
63
+ }
64
+ static createOutput(output, options) {
65
+ const { bufferSize = IO_BUFFER_SIZE, maxPacketSize = MAX_PACKET_SIZE } = options ?? {};
66
+ // Handle Writable stream (must be before callbacks check since Writable has 'write')
67
+ if (typeof output === 'object' && 'writable' in output) {
68
+ return this.createForWritable(output, bufferSize, maxPacketSize);
69
+ }
70
+ // Handle custom callbacks
71
+ if (typeof output === 'object' && 'write' in output) {
72
+ return this.createFromOutputCallbacks(output, bufferSize, maxPacketSize);
73
+ }
74
+ throw new TypeError('Invalid output type. Expected Writable or IOOutputCallbacks');
57
75
  }
58
76
  /**
59
77
  * Create I/O context from buffer.
@@ -100,10 +118,129 @@ export class IOStream {
100
118
  return ioContext;
101
119
  }
102
120
  /**
103
- * Create I/O context from callbacks.
121
+ * Create I/O context from a Node.js Readable stream.
122
+ *
123
+ * Sets up async read callbacks that buffer data from the stream.
124
+ * Seeking is not supported for streams.
125
+ *
126
+ * @param stream - Node.js Readable stream
127
+ *
128
+ * @param bufferSize - Internal buffer size
129
+ *
130
+ * @returns Configured I/O context
131
+ *
132
+ * @internal
133
+ */
134
+ static createFromReadable(stream, bufferSize) {
135
+ let chunks = [];
136
+ let totalBuffered = 0;
137
+ let streamEnded = false;
138
+ let streamError = null;
139
+ let pendingResolve = null;
140
+ const wakeUp = () => {
141
+ if (pendingResolve) {
142
+ const resolve = pendingResolve;
143
+ pendingResolve = null;
144
+ resolve();
145
+ }
146
+ };
147
+ const removeListeners = () => {
148
+ stream.off('readable', onReadable);
149
+ stream.off('end', onEnd);
150
+ stream.off('error', onError);
151
+ stream.off('close', wakeUp);
152
+ };
153
+ const onReadable = () => wakeUp();
154
+ const onEnd = () => {
155
+ streamEnded = true;
156
+ wakeUp();
157
+ };
158
+ const onError = (err) => {
159
+ streamError = err;
160
+ wakeUp();
161
+ };
162
+ // Track state changes and wake up pending reads
163
+ stream.on('readable', onReadable);
164
+ stream.on('end', onEnd);
165
+ stream.on('error', onError);
166
+ stream.on('close', wakeUp);
167
+ const ioContext = new IOContext();
168
+ ioContext.allocContextWithCallbacks(bufferSize, 0, // read mode
169
+ async (size) => {
170
+ // Pull-based: read from stream on demand
171
+ while (totalBuffered < size && !streamEnded && !streamError && !stream.destroyed) {
172
+ // Try to read available data first
173
+ let chunk;
174
+ while ((chunk = stream.read()) !== null) {
175
+ chunks.push(chunk);
176
+ totalBuffered += chunk.length;
177
+ }
178
+ // If we have enough data, stop waiting
179
+ if (totalBuffered >= size)
180
+ break;
181
+ // If stream is done, stop waiting
182
+ if (streamEnded || streamError || stream.destroyed)
183
+ break;
184
+ // Wait for more data
185
+ await new Promise((resolve) => {
186
+ pendingResolve = resolve;
187
+ });
188
+ }
189
+ // No data available — EOF, remove listeners
190
+ if (totalBuffered === 0) {
191
+ removeListeners();
192
+ return null;
193
+ }
194
+ const concat = Buffer.concat(chunks);
195
+ const result = concat.subarray(0, Math.min(size, concat.length));
196
+ const remainder = concat.subarray(result.length);
197
+ chunks = remainder.length > 0 ? [remainder] : [];
198
+ totalBuffered = remainder.length;
199
+ // If stream is done and all data consumed, remove listeners
200
+ if (totalBuffered === 0 && (streamEnded || streamError || stream.destroyed)) {
201
+ removeListeners();
202
+ }
203
+ return result;
204
+ }, undefined, // no write
205
+ undefined);
206
+ return ioContext;
207
+ }
208
+ /**
209
+ * Create I/O context for writing to a Node.js Writable stream.
210
+ *
211
+ * Sets up async write callbacks with backpressure support.
212
+ * The buffer is copied before writing since FFmpeg reuses its internal buffer.
213
+ *
214
+ * @param stream - Node.js Writable stream
215
+ *
216
+ * @param bufferSize - Internal buffer size
217
+ *
218
+ * @param maxPacketSize - Maximum packet size
219
+ *
220
+ * @returns Configured I/O context
221
+ *
222
+ * @internal
223
+ */
224
+ static createForWritable(stream, bufferSize, maxPacketSize) {
225
+ const ioContext = new IOContext();
226
+ ioContext.allocContextWithCallbacks(bufferSize, 1, // write mode
227
+ undefined, // no read
228
+ async (buffer) => {
229
+ // Copy buffer — FFmpeg reuses the internal buffer after callback returns
230
+ const copy = Buffer.from(buffer);
231
+ if (!stream.write(copy)) {
232
+ // Backpressure: wait for drain
233
+ await once(stream, 'drain');
234
+ }
235
+ return copy.length;
236
+ }, undefined);
237
+ ioContext.maxPacketSize = maxPacketSize;
238
+ return ioContext;
239
+ }
240
+ /**
241
+ * Create I/O context from custom input callbacks.
104
242
  *
105
- * Sets up custom I/O with user-provided callbacks.
106
- * Supports read and optional seek operations.
243
+ * Sets up custom I/O with user-provided read and optional seek callbacks.
107
244
  *
108
245
  * @param callbacks - User I/O callbacks
109
246
  *
@@ -111,20 +248,34 @@ export class IOStream {
111
248
  *
112
249
  * @returns Configured I/O context
113
250
  *
114
- * @throws {Error} If read callback not provided
251
+ * @internal
252
+ */
253
+ static createFromInputCallbacks(callbacks, bufferSize) {
254
+ const ioContext = new IOContext();
255
+ ioContext.allocContextWithCallbacks(bufferSize, 0, // read mode
256
+ callbacks.read, undefined, callbacks.seek);
257
+ return ioContext;
258
+ }
259
+ /**
260
+ * Create I/O context from custom output callbacks.
261
+ *
262
+ * Sets up custom I/O with user-provided write, optional seek, and optional read callbacks.
263
+ *
264
+ * @param callbacks - User I/O callbacks
265
+ *
266
+ * @param bufferSize - Internal buffer size
267
+ *
268
+ * @param maxPacketSize - Maximum packet size
269
+ *
270
+ * @returns Configured I/O context
115
271
  *
116
272
  * @internal
117
273
  */
118
- static createFromCallbacks(callbacks, bufferSize) {
119
- // We only support read mode in the high-level API
120
- // Write mode would be needed for custom output, which we don't currently support
121
- if (!callbacks.read) {
122
- throw new Error('Read callback is required');
123
- }
274
+ static createFromOutputCallbacks(callbacks, bufferSize, maxPacketSize) {
124
275
  const ioContext = new IOContext();
125
- ioContext.allocContextWithCallbacks(bufferSize, 0, // Always read mode
126
- callbacks.read, undefined, // No write callback in high-level API
127
- callbacks.seek);
276
+ ioContext.allocContextWithCallbacks(bufferSize, 1, // write mode
277
+ callbacks.read, callbacks.write, callbacks.seek);
278
+ ioContext.maxPacketSize = maxPacketSize;
128
279
  return ioContext;
129
280
  }
130
281
  }
@@ -1 +1 @@
1
- {"version":3,"file":"io-stream.js","sourceRoot":"","sources":["../../src/api/io-stream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"io-stream.js","sourceRoot":"","sources":["../../src/api/io-stream.ts"],"names":[],"mappings":"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"}