node-av 2.0.0 → 2.4.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.
- package/README.md +18 -5
- package/binding.gyp +12 -0
- package/dist/api/bitstream-filter.d.ts +132 -0
- package/dist/api/bitstream-filter.js +198 -0
- package/dist/api/bitstream-filter.js.map +1 -1
- package/dist/api/decoder.d.ts +194 -0
- package/dist/api/decoder.js +313 -0
- package/dist/api/decoder.js.map +1 -1
- package/dist/api/encoder.d.ts +263 -0
- package/dist/api/encoder.js +427 -0
- package/dist/api/encoder.js.map +1 -1
- package/dist/api/filter-presets.d.ts +92 -0
- package/dist/api/filter-presets.js +92 -0
- package/dist/api/filter-presets.js.map +1 -1
- package/dist/api/filter.d.ts +234 -9
- package/dist/api/filter.js +372 -9
- package/dist/api/filter.js.map +1 -1
- package/dist/api/hardware.d.ts +17 -0
- package/dist/api/hardware.js +28 -17
- package/dist/api/hardware.js.map +1 -1
- package/dist/api/io-stream.d.ts +6 -0
- package/dist/api/io-stream.js +2 -0
- package/dist/api/io-stream.js.map +1 -1
- package/dist/api/media-input.d.ts +214 -1
- package/dist/api/media-input.js +341 -0
- package/dist/api/media-input.js.map +1 -1
- package/dist/api/media-output.d.ts +132 -1
- package/dist/api/media-output.js +339 -0
- package/dist/api/media-output.js.map +1 -1
- package/dist/api/pipeline.d.ts +73 -8
- package/dist/api/pipeline.js +61 -0
- package/dist/api/pipeline.js.map +1 -1
- package/dist/api/types.d.ts +7 -0
- package/dist/api/utils.js +2 -0
- package/dist/api/utils.js.map +1 -1
- package/dist/lib/audio-fifo.d.ts +103 -0
- package/dist/lib/audio-fifo.js +109 -0
- package/dist/lib/audio-fifo.js.map +1 -1
- package/dist/lib/binding.d.ts +1 -0
- package/dist/lib/binding.js +32 -7
- package/dist/lib/binding.js.map +1 -1
- package/dist/lib/bitstream-filter-context.d.ts +79 -0
- package/dist/lib/bitstream-filter-context.js +83 -0
- package/dist/lib/bitstream-filter-context.js.map +1 -1
- package/dist/lib/bitstream-filter.d.ts +2 -0
- package/dist/lib/bitstream-filter.js +2 -0
- package/dist/lib/bitstream-filter.js.map +1 -1
- package/dist/lib/codec-context.d.ts +168 -0
- package/dist/lib/codec-context.js +178 -0
- package/dist/lib/codec-context.js.map +1 -1
- package/dist/lib/codec-parameters.d.ts +3 -0
- package/dist/lib/codec-parameters.js +3 -0
- package/dist/lib/codec-parameters.js.map +1 -1
- package/dist/lib/codec-parser.d.ts +6 -0
- package/dist/lib/codec-parser.js +6 -0
- package/dist/lib/codec-parser.js.map +1 -1
- package/dist/lib/codec.d.ts +12 -0
- package/dist/lib/codec.js +12 -0
- package/dist/lib/codec.js.map +1 -1
- package/dist/lib/dictionary.d.ts +16 -0
- package/dist/lib/dictionary.js +16 -0
- package/dist/lib/dictionary.js.map +1 -1
- package/dist/lib/error.d.ts +8 -0
- package/dist/lib/error.js +9 -0
- package/dist/lib/error.js.map +1 -1
- package/dist/lib/filter-context.d.ts +100 -0
- package/dist/lib/filter-context.js +104 -0
- package/dist/lib/filter-context.js.map +1 -1
- package/dist/lib/filter-graph.d.ts +80 -0
- package/dist/lib/filter-graph.js +84 -0
- package/dist/lib/filter-graph.js.map +1 -1
- package/dist/lib/filter-inout.d.ts +1 -0
- package/dist/lib/filter-inout.js +1 -0
- package/dist/lib/filter-inout.js.map +1 -1
- package/dist/lib/filter.d.ts +2 -0
- package/dist/lib/filter.js +2 -0
- package/dist/lib/filter.js.map +1 -1
- package/dist/lib/format-context.d.ts +338 -2
- package/dist/lib/format-context.js +355 -3
- package/dist/lib/format-context.js.map +1 -1
- package/dist/lib/frame.d.ts +41 -0
- package/dist/lib/frame.js +43 -0
- package/dist/lib/frame.js.map +1 -1
- package/dist/lib/hardware-device-context.d.ts +8 -0
- package/dist/lib/hardware-device-context.js +8 -0
- package/dist/lib/hardware-device-context.js.map +1 -1
- package/dist/lib/hardware-frames-context.d.ts +55 -0
- package/dist/lib/hardware-frames-context.js +57 -0
- package/dist/lib/hardware-frames-context.js.map +1 -1
- package/dist/lib/input-format.d.ts +43 -3
- package/dist/lib/input-format.js +48 -0
- package/dist/lib/input-format.js.map +1 -1
- package/dist/lib/io-context.d.ts +218 -0
- package/dist/lib/io-context.js +234 -0
- package/dist/lib/io-context.js.map +1 -1
- package/dist/lib/log.d.ts +2 -0
- package/dist/lib/log.js +2 -0
- package/dist/lib/log.js.map +1 -1
- package/dist/lib/native-types.d.ts +39 -1
- package/dist/lib/option.d.ts +90 -0
- package/dist/lib/option.js +97 -0
- package/dist/lib/option.js.map +1 -1
- package/dist/lib/output-format.d.ts +4 -0
- package/dist/lib/output-format.js +4 -0
- package/dist/lib/output-format.js.map +1 -1
- package/dist/lib/packet.d.ts +7 -0
- package/dist/lib/packet.js +7 -0
- package/dist/lib/packet.js.map +1 -1
- package/dist/lib/rational.d.ts +1 -0
- package/dist/lib/rational.js +1 -0
- package/dist/lib/rational.js.map +1 -1
- package/dist/lib/software-resample-context.d.ts +64 -0
- package/dist/lib/software-resample-context.js +66 -0
- package/dist/lib/software-resample-context.js.map +1 -1
- package/dist/lib/software-scale-context.d.ts +98 -0
- package/dist/lib/software-scale-context.js +102 -0
- package/dist/lib/software-scale-context.js.map +1 -1
- package/dist/lib/stream.d.ts +1 -0
- package/dist/lib/stream.js +1 -0
- package/dist/lib/stream.js.map +1 -1
- package/dist/lib/utilities.d.ts +60 -0
- package/dist/lib/utilities.js +60 -0
- package/dist/lib/utilities.js.map +1 -1
- package/package.json +19 -17
package/dist/api/media-input.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { closeSync, openSync, readSync } from 'fs';
|
|
1
2
|
import { open } from 'fs/promises';
|
|
2
3
|
import { resolve } from 'path';
|
|
3
4
|
import { AVFLAG_NONE, AVMEDIA_TYPE_AUDIO, AVMEDIA_TYPE_VIDEO } from '../constants/constants.js';
|
|
@@ -48,6 +49,7 @@ export class MediaInput {
|
|
|
48
49
|
ioContext;
|
|
49
50
|
/**
|
|
50
51
|
* @param formatContext - Opened format context
|
|
52
|
+
*
|
|
51
53
|
* @internal
|
|
52
54
|
*/
|
|
53
55
|
constructor(formatContext) {
|
|
@@ -62,6 +64,7 @@ export class MediaInput {
|
|
|
62
64
|
* Direct mapping to av_probe_input_format().
|
|
63
65
|
*
|
|
64
66
|
* @param input - File path or buffer to probe
|
|
67
|
+
*
|
|
65
68
|
* @returns Format information or null if unrecognized
|
|
66
69
|
*
|
|
67
70
|
* @example
|
|
@@ -133,6 +136,89 @@ export class MediaInput {
|
|
|
133
136
|
return null;
|
|
134
137
|
}
|
|
135
138
|
}
|
|
139
|
+
/**
|
|
140
|
+
* Probe media format without fully opening the file synchronously.
|
|
141
|
+
* Synchronous version of probeFormat.
|
|
142
|
+
*
|
|
143
|
+
* Detects format by analyzing file headers and content.
|
|
144
|
+
* Useful for format validation before processing.
|
|
145
|
+
*
|
|
146
|
+
* Direct mapping to av_probe_input_format().
|
|
147
|
+
*
|
|
148
|
+
* @param input - File path or buffer to probe
|
|
149
|
+
*
|
|
150
|
+
* @returns Format information or null if unrecognized
|
|
151
|
+
*
|
|
152
|
+
* @example
|
|
153
|
+
* ```typescript
|
|
154
|
+
* const info = MediaInput.probeFormatSync('video.mp4');
|
|
155
|
+
* if (info) {
|
|
156
|
+
* console.log(`Format: ${info.format}`);
|
|
157
|
+
* console.log(`Confidence: ${info.confidence}%`);
|
|
158
|
+
* }
|
|
159
|
+
* ```
|
|
160
|
+
*
|
|
161
|
+
* @example
|
|
162
|
+
* ```typescript
|
|
163
|
+
* // Probe from buffer
|
|
164
|
+
* const buffer = fs.readFileSync('video.webm');
|
|
165
|
+
* const info = MediaInput.probeFormatSync(buffer);
|
|
166
|
+
* console.log(`MIME type: ${info?.mimeType}`);
|
|
167
|
+
* ```
|
|
168
|
+
*
|
|
169
|
+
* @see {@link probeFormat} For async version
|
|
170
|
+
*/
|
|
171
|
+
static probeFormatSync(input) {
|
|
172
|
+
try {
|
|
173
|
+
if (Buffer.isBuffer(input)) {
|
|
174
|
+
// Probe from buffer
|
|
175
|
+
const format = InputFormat.probe(input);
|
|
176
|
+
if (!format) {
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
return {
|
|
180
|
+
format: format.name ?? 'unknown',
|
|
181
|
+
longName: format.longName ?? undefined,
|
|
182
|
+
extensions: format.extensions ?? undefined,
|
|
183
|
+
mimeType: format.mimeType ?? undefined,
|
|
184
|
+
confidence: 100, // Direct probe always has high confidence
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
// For files, read first part and probe
|
|
189
|
+
let fd;
|
|
190
|
+
try {
|
|
191
|
+
fd = openSync(input, 'r');
|
|
192
|
+
// Read first 64KB for probing
|
|
193
|
+
const buffer = Buffer.alloc(65536);
|
|
194
|
+
const bytesRead = readSync(fd, buffer, 0, 65536, 0);
|
|
195
|
+
const probeBuffer = buffer.subarray(0, bytesRead);
|
|
196
|
+
const format = InputFormat.probe(probeBuffer, input);
|
|
197
|
+
if (!format) {
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
format: format.name ?? 'unknown',
|
|
202
|
+
longName: format.longName ?? undefined,
|
|
203
|
+
extensions: format.extensions ?? undefined,
|
|
204
|
+
mimeType: format.mimeType ?? undefined,
|
|
205
|
+
confidence: 90, // File-based probe with filename hint
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
// If file reading fails, return null
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
finally {
|
|
213
|
+
if (fd !== undefined)
|
|
214
|
+
closeSync(fd);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
136
222
|
static async open(input, options = {}) {
|
|
137
223
|
// Check if input is raw data
|
|
138
224
|
if (typeof input === 'object' && 'type' in input && ('width' in input || 'sampleRate' in input)) {
|
|
@@ -231,6 +317,92 @@ export class MediaInput {
|
|
|
231
317
|
}
|
|
232
318
|
}
|
|
233
319
|
}
|
|
320
|
+
static openSync(input, options = {}) {
|
|
321
|
+
// Check if input is raw data
|
|
322
|
+
if (typeof input === 'object' && 'type' in input && ('width' in input || 'sampleRate' in input)) {
|
|
323
|
+
// Build options for raw data
|
|
324
|
+
const rawOptions = {
|
|
325
|
+
bufferSize: options.bufferSize,
|
|
326
|
+
format: options.format ?? (input.type === 'video' ? 'rawvideo' : 's16le'),
|
|
327
|
+
options: {
|
|
328
|
+
...options.options,
|
|
329
|
+
},
|
|
330
|
+
};
|
|
331
|
+
if (input.type === 'video') {
|
|
332
|
+
rawOptions.options = {
|
|
333
|
+
...rawOptions.options,
|
|
334
|
+
video_size: `${input.width}x${input.height}`,
|
|
335
|
+
pixel_format: avGetPixFmtName(input.pixelFormat) ?? 'yuv420p',
|
|
336
|
+
framerate: new Rational(input.frameRate.num, input.frameRate.den).toString(),
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
rawOptions.options = {
|
|
341
|
+
...rawOptions.options,
|
|
342
|
+
sample_rate: input.sampleRate,
|
|
343
|
+
channels: input.channels,
|
|
344
|
+
sample_fmt: avGetSampleFmtName(input.sampleFormat) ?? 's16le',
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
// Open with the raw data source
|
|
348
|
+
return MediaInput.openSync(input.input, rawOptions);
|
|
349
|
+
}
|
|
350
|
+
// Original implementation for non-raw data
|
|
351
|
+
const formatContext = new FormatContext();
|
|
352
|
+
let ioContext;
|
|
353
|
+
let optionsDict = null;
|
|
354
|
+
let inputFormat = null;
|
|
355
|
+
try {
|
|
356
|
+
// Create options dictionary if options are provided
|
|
357
|
+
if (options.options) {
|
|
358
|
+
optionsDict = Dictionary.fromObject(options.options);
|
|
359
|
+
}
|
|
360
|
+
// Find input format if specified
|
|
361
|
+
if (options.format) {
|
|
362
|
+
inputFormat = InputFormat.findInputFormat(options.format);
|
|
363
|
+
if (!inputFormat) {
|
|
364
|
+
throw new Error(`Input format '${options.format}' not found`);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
if (typeof input === 'string') {
|
|
368
|
+
// File path or URL - resolve relative paths to absolute
|
|
369
|
+
// Check if it's a URL (starts with protocol://) or a file path
|
|
370
|
+
const isUrl = /^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//.test(input);
|
|
371
|
+
const resolvedInput = isUrl ? input : resolve(input);
|
|
372
|
+
const ret = formatContext.openInputSync(resolvedInput, inputFormat, optionsDict);
|
|
373
|
+
FFmpegError.throwIfError(ret, 'Failed to open input');
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
throw new TypeError('Invalid input type. Expected file path, URL, or Buffer');
|
|
377
|
+
}
|
|
378
|
+
// Find stream information
|
|
379
|
+
const ret = formatContext.findStreamInfoSync(null);
|
|
380
|
+
FFmpegError.throwIfError(ret, 'Failed to find stream info');
|
|
381
|
+
const mediaInput = new MediaInput(formatContext);
|
|
382
|
+
mediaInput.ioContext = ioContext;
|
|
383
|
+
// After successful creation, streams should be available
|
|
384
|
+
mediaInput._streams = formatContext.streams ?? [];
|
|
385
|
+
return mediaInput;
|
|
386
|
+
}
|
|
387
|
+
catch (error) {
|
|
388
|
+
// Clean up only on error
|
|
389
|
+
if (ioContext) {
|
|
390
|
+
// Clear the pb reference first
|
|
391
|
+
formatContext.pb = null;
|
|
392
|
+
// Free the IOContext
|
|
393
|
+
ioContext.freeContext();
|
|
394
|
+
}
|
|
395
|
+
// Clean up FormatContext
|
|
396
|
+
formatContext.closeInputSync();
|
|
397
|
+
throw error;
|
|
398
|
+
}
|
|
399
|
+
finally {
|
|
400
|
+
// Clean up options dictionary
|
|
401
|
+
if (optionsDict) {
|
|
402
|
+
optionsDict.free();
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
234
406
|
/**
|
|
235
407
|
* Get all streams in the media.
|
|
236
408
|
*
|
|
@@ -322,6 +494,7 @@ export class MediaInput {
|
|
|
322
494
|
* Returns undefined if stream doesn't exist.
|
|
323
495
|
*
|
|
324
496
|
* @param index - Video stream index (default: 0)
|
|
497
|
+
*
|
|
325
498
|
* @returns Video stream or undefined
|
|
326
499
|
*
|
|
327
500
|
* @example
|
|
@@ -352,6 +525,7 @@ export class MediaInput {
|
|
|
352
525
|
* Returns undefined if stream doesn't exist.
|
|
353
526
|
*
|
|
354
527
|
* @param index - Audio stream index (default: 0)
|
|
528
|
+
*
|
|
355
529
|
* @returns Audio stream or undefined
|
|
356
530
|
*
|
|
357
531
|
* @example
|
|
@@ -384,6 +558,7 @@ export class MediaInput {
|
|
|
384
558
|
* Direct mapping to av_find_best_stream().
|
|
385
559
|
*
|
|
386
560
|
* @param type - Media type to find
|
|
561
|
+
*
|
|
387
562
|
* @returns Best stream or undefined if not found
|
|
388
563
|
*
|
|
389
564
|
* @example
|
|
@@ -413,7 +588,9 @@ export class MediaInput {
|
|
|
413
588
|
* Direct mapping to av_read_frame().
|
|
414
589
|
*
|
|
415
590
|
* @param index - Optional stream index to filter
|
|
591
|
+
*
|
|
416
592
|
* @yields {Packet} Demuxed packets (must be freed by caller)
|
|
593
|
+
*
|
|
417
594
|
* @throws {Error} If packet cloning fails
|
|
418
595
|
*
|
|
419
596
|
* @example
|
|
@@ -468,6 +645,74 @@ export class MediaInput {
|
|
|
468
645
|
packet.free();
|
|
469
646
|
}
|
|
470
647
|
}
|
|
648
|
+
/**
|
|
649
|
+
* Read packets from media as generator synchronously.
|
|
650
|
+
* Synchronous version of packets.
|
|
651
|
+
*
|
|
652
|
+
* Yields demuxed packets for processing.
|
|
653
|
+
* Automatically handles packet memory management.
|
|
654
|
+
* Optionally filters packets by stream index.
|
|
655
|
+
*
|
|
656
|
+
* Direct mapping to av_read_frame().
|
|
657
|
+
*
|
|
658
|
+
* @param index - Optional stream index to filter
|
|
659
|
+
*
|
|
660
|
+
* @yields {Packet} Demuxed packets (must be freed by caller)
|
|
661
|
+
*
|
|
662
|
+
* @throws {Error} If packet cloning fails
|
|
663
|
+
*
|
|
664
|
+
* @example
|
|
665
|
+
* ```typescript
|
|
666
|
+
* // Read all packets
|
|
667
|
+
* for (const packet of input.packetsSync()) {
|
|
668
|
+
* console.log(`Packet: stream=${packet.streamIndex}, pts=${packet.pts}`);
|
|
669
|
+
* packet.free();
|
|
670
|
+
* }
|
|
671
|
+
* ```
|
|
672
|
+
*
|
|
673
|
+
* @example
|
|
674
|
+
* ```typescript
|
|
675
|
+
* // Read only video packets
|
|
676
|
+
* const videoStream = input.video();
|
|
677
|
+
* for (const packet of input.packetsSync(videoStream.index)) {
|
|
678
|
+
* // Process video packet
|
|
679
|
+
* packet.free();
|
|
680
|
+
* }
|
|
681
|
+
* ```
|
|
682
|
+
*
|
|
683
|
+
* @see {@link packets} For async version
|
|
684
|
+
*/
|
|
685
|
+
*packetsSync(index) {
|
|
686
|
+
const packet = new Packet();
|
|
687
|
+
packet.alloc();
|
|
688
|
+
try {
|
|
689
|
+
while (true) {
|
|
690
|
+
const ret = this.formatContext.readFrameSync(packet);
|
|
691
|
+
if (ret < 0) {
|
|
692
|
+
// End of file or error
|
|
693
|
+
break;
|
|
694
|
+
}
|
|
695
|
+
if (index === undefined || packet.streamIndex === index) {
|
|
696
|
+
// Clone the packet for the user
|
|
697
|
+
// This creates a new Packet object that shares the same data buffer
|
|
698
|
+
// through reference counting. The data won't be freed until both
|
|
699
|
+
// the original and the clone are unreferenced.
|
|
700
|
+
const cloned = packet.clone();
|
|
701
|
+
if (!cloned) {
|
|
702
|
+
throw new Error('Failed to clone packet (out of memory)');
|
|
703
|
+
}
|
|
704
|
+
yield cloned;
|
|
705
|
+
}
|
|
706
|
+
// Unreference the original packet's data buffer
|
|
707
|
+
// This allows us to reuse the packet object for the next readFrame()
|
|
708
|
+
// The data itself is still alive because the clone has a reference
|
|
709
|
+
packet.unref();
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
finally {
|
|
713
|
+
packet.free();
|
|
714
|
+
}
|
|
715
|
+
}
|
|
471
716
|
/**
|
|
472
717
|
* Seek to timestamp in media.
|
|
473
718
|
*
|
|
@@ -477,8 +722,11 @@ export class MediaInput {
|
|
|
477
722
|
* Direct mapping to av_seek_frame().
|
|
478
723
|
*
|
|
479
724
|
* @param timestamp - Target position in seconds
|
|
725
|
+
*
|
|
480
726
|
* @param streamIndex - Stream index or -1 for global (default: -1)
|
|
727
|
+
*
|
|
481
728
|
* @param flags - Seek flags (default: AVFLAG_NONE)
|
|
729
|
+
*
|
|
482
730
|
* @returns 0 on success, negative on error
|
|
483
731
|
*
|
|
484
732
|
* @example
|
|
@@ -503,6 +751,45 @@ export class MediaInput {
|
|
|
503
751
|
const ts = BigInt(Math.floor(timestamp * 1000000));
|
|
504
752
|
return this.formatContext.seekFrame(streamIndex, ts, flags);
|
|
505
753
|
}
|
|
754
|
+
/**
|
|
755
|
+
* Seek to timestamp in media synchronously.
|
|
756
|
+
* Synchronous version of seek.
|
|
757
|
+
*
|
|
758
|
+
* Seeks to the specified position in seconds.
|
|
759
|
+
* Can seek in specific stream or globally.
|
|
760
|
+
*
|
|
761
|
+
* Direct mapping to av_seek_frame().
|
|
762
|
+
*
|
|
763
|
+
* @param timestamp - Target position in seconds
|
|
764
|
+
*
|
|
765
|
+
* @param streamIndex - Stream index or -1 for global (default: -1)
|
|
766
|
+
*
|
|
767
|
+
* @param flags - Seek flags (default: AVFLAG_NONE)
|
|
768
|
+
*
|
|
769
|
+
* @returns 0 on success, negative on error
|
|
770
|
+
*
|
|
771
|
+
* @example
|
|
772
|
+
* ```typescript
|
|
773
|
+
* // Seek to 30 seconds
|
|
774
|
+
* const ret = input.seekSync(30);
|
|
775
|
+
* FFmpegError.throwIfError(ret, 'seek failed');
|
|
776
|
+
* ```
|
|
777
|
+
*
|
|
778
|
+
* @example
|
|
779
|
+
* ```typescript
|
|
780
|
+
* import { AVSEEK_FLAG_BACKWARD } from 'node-av/constants';
|
|
781
|
+
*
|
|
782
|
+
* // Seek to keyframe before 60 seconds
|
|
783
|
+
* input.seekSync(60, -1, AVSEEK_FLAG_BACKWARD);
|
|
784
|
+
* ```
|
|
785
|
+
*
|
|
786
|
+
* @see {@link seek} For async version
|
|
787
|
+
*/
|
|
788
|
+
seekSync(timestamp, streamIndex = -1, flags = AVFLAG_NONE) {
|
|
789
|
+
// Convert seconds to AV_TIME_BASE
|
|
790
|
+
const ts = BigInt(Math.floor(timestamp * 1000000));
|
|
791
|
+
return this.formatContext.seekFrameSync(streamIndex, ts, flags);
|
|
792
|
+
}
|
|
506
793
|
/**
|
|
507
794
|
* Close media input and free resources.
|
|
508
795
|
*
|
|
@@ -537,6 +824,41 @@ export class MediaInput {
|
|
|
537
824
|
this.ioContext = undefined;
|
|
538
825
|
}
|
|
539
826
|
}
|
|
827
|
+
/**
|
|
828
|
+
* Close media input and free resources synchronously.
|
|
829
|
+
* Synchronous version of close.
|
|
830
|
+
*
|
|
831
|
+
* Releases format context and I/O context.
|
|
832
|
+
* Safe to call multiple times.
|
|
833
|
+
* Automatically called by Symbol.dispose.
|
|
834
|
+
*
|
|
835
|
+
* Direct mapping to avformat_close_input().
|
|
836
|
+
*
|
|
837
|
+
* @example
|
|
838
|
+
* ```typescript
|
|
839
|
+
* const input = MediaInput.openSync('video.mp4');
|
|
840
|
+
* try {
|
|
841
|
+
* // Use input
|
|
842
|
+
* } finally {
|
|
843
|
+
* input.closeSync();
|
|
844
|
+
* }
|
|
845
|
+
* ```
|
|
846
|
+
*
|
|
847
|
+
* @see {@link close} For async version
|
|
848
|
+
*/
|
|
849
|
+
closeSync() {
|
|
850
|
+
// IMPORTANT: Clear pb reference FIRST to prevent use-after-free
|
|
851
|
+
if (this.ioContext) {
|
|
852
|
+
this.formatContext.pb = null;
|
|
853
|
+
}
|
|
854
|
+
// Close FormatContext
|
|
855
|
+
this.formatContext.closeInputSync();
|
|
856
|
+
// NOW we can safely free the IOContext
|
|
857
|
+
if (this.ioContext) {
|
|
858
|
+
this.ioContext.freeContext();
|
|
859
|
+
this.ioContext = undefined;
|
|
860
|
+
}
|
|
861
|
+
}
|
|
540
862
|
/**
|
|
541
863
|
* Get underlying format context.
|
|
542
864
|
*
|
|
@@ -568,5 +890,24 @@ export class MediaInput {
|
|
|
568
890
|
async [Symbol.asyncDispose]() {
|
|
569
891
|
await this.close();
|
|
570
892
|
}
|
|
893
|
+
/**
|
|
894
|
+
* Dispose of media input synchronously.
|
|
895
|
+
*
|
|
896
|
+
* Implements Disposable interface for automatic cleanup.
|
|
897
|
+
* Equivalent to calling closeSync().
|
|
898
|
+
*
|
|
899
|
+
* @example
|
|
900
|
+
* ```typescript
|
|
901
|
+
* {
|
|
902
|
+
* using input = MediaInput.openSync('video.mp4');
|
|
903
|
+
* // Process media...
|
|
904
|
+
* } // Automatically closed
|
|
905
|
+
* ```
|
|
906
|
+
*
|
|
907
|
+
* @see {@link closeSync} For manual cleanup
|
|
908
|
+
*/
|
|
909
|
+
[Symbol.dispose]() {
|
|
910
|
+
this.closeSync();
|
|
911
|
+
}
|
|
571
912
|
}
|
|
572
913
|
//# sourceMappingURL=media-input.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media-input.js","sourceRoot":"","sources":["../../src/api/media-input.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"media-input.js","sourceRoot":"","sources":["../../src/api/media-input.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,7 +59,7 @@ export interface StreamDescription {
|
|
|
59
59
|
* @see {@link Encoder} For encoding frames to packets
|
|
60
60
|
* @see {@link FormatContext} For low-level API
|
|
61
61
|
*/
|
|
62
|
-
export declare class MediaOutput implements AsyncDisposable {
|
|
62
|
+
export declare class MediaOutput implements AsyncDisposable, Disposable {
|
|
63
63
|
private formatContext;
|
|
64
64
|
private streams;
|
|
65
65
|
private ioContext?;
|
|
@@ -81,7 +81,9 @@ export declare class MediaOutput implements AsyncDisposable {
|
|
|
81
81
|
* Direct mapping to avformat_alloc_output_context2() and avio_open2().
|
|
82
82
|
*
|
|
83
83
|
* @param target - File path, URL, or I/O callbacks
|
|
84
|
+
*
|
|
84
85
|
* @param options - Output configuration options
|
|
86
|
+
*
|
|
85
87
|
* @returns Opened media output instance
|
|
86
88
|
*
|
|
87
89
|
* @throws {Error} If format required for custom I/O
|
|
@@ -126,6 +128,43 @@ export declare class MediaOutput implements AsyncDisposable {
|
|
|
126
128
|
* @see {@link IOOutputCallbacks} For custom I/O interface
|
|
127
129
|
*/
|
|
128
130
|
static open(target: string | IOOutputCallbacks, options?: MediaOutputOptions): Promise<MediaOutput>;
|
|
131
|
+
/**
|
|
132
|
+
* Open media output for writing synchronously.
|
|
133
|
+
* Synchronous version of open.
|
|
134
|
+
*
|
|
135
|
+
* Creates and configures output context for muxing.
|
|
136
|
+
* Automatically creates directories for file output.
|
|
137
|
+
* Supports files, URLs, and custom I/O callbacks.
|
|
138
|
+
*
|
|
139
|
+
* Direct mapping to avformat_alloc_output_context2() and avio_open2().
|
|
140
|
+
*
|
|
141
|
+
* @param target - File path, URL, or I/O callbacks
|
|
142
|
+
*
|
|
143
|
+
* @param options - Output configuration options
|
|
144
|
+
*
|
|
145
|
+
* @returns Opened media output instance
|
|
146
|
+
*
|
|
147
|
+
* @throws {Error} If format required for custom I/O
|
|
148
|
+
*
|
|
149
|
+
* @throws {FFmpegError} If allocation or opening fails
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* ```typescript
|
|
153
|
+
* // Create file output
|
|
154
|
+
* using output = MediaOutput.openSync('output.mp4');
|
|
155
|
+
* ```
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* ```typescript
|
|
159
|
+
* // Create output with specific format
|
|
160
|
+
* using output = MediaOutput.openSync('output.ts', {
|
|
161
|
+
* format: 'mpegts'
|
|
162
|
+
* });
|
|
163
|
+
* ```
|
|
164
|
+
*
|
|
165
|
+
* @see {@link open} For async version
|
|
166
|
+
*/
|
|
167
|
+
static openSync(target: string | IOOutputCallbacks, options?: MediaOutputOptions): MediaOutput;
|
|
129
168
|
/**
|
|
130
169
|
* Add a stream to the output.
|
|
131
170
|
*
|
|
@@ -140,8 +179,11 @@ export declare class MediaOutput implements AsyncDisposable {
|
|
|
140
179
|
* Direct mapping to avformat_new_stream().
|
|
141
180
|
*
|
|
142
181
|
* @param source - Encoder or stream to add
|
|
182
|
+
*
|
|
143
183
|
* @param options - Stream configuration options
|
|
184
|
+
*
|
|
144
185
|
* @param options.timeBase - Optional custom timebase for the stream
|
|
186
|
+
*
|
|
145
187
|
* @returns Stream index for packet writing
|
|
146
188
|
*
|
|
147
189
|
* @throws {Error} If called after packets have been written or output closed
|
|
@@ -183,7 +225,9 @@ export declare class MediaOutput implements AsyncDisposable {
|
|
|
183
225
|
* Direct mapping to avformat_write_header() (on first packet) and av_interleaved_write_frame().
|
|
184
226
|
*
|
|
185
227
|
* @param packet - Packet to write
|
|
228
|
+
*
|
|
186
229
|
* @param streamIndex - Target stream index
|
|
230
|
+
*
|
|
187
231
|
* @throws {Error} If stream invalid or encoder not initialized
|
|
188
232
|
*
|
|
189
233
|
* @throws {FFmpegError} If write fails
|
|
@@ -212,6 +256,54 @@ export declare class MediaOutput implements AsyncDisposable {
|
|
|
212
256
|
* @see {@link addStream} For adding streams
|
|
213
257
|
*/
|
|
214
258
|
writePacket(packet: Packet, streamIndex: number): Promise<void>;
|
|
259
|
+
/**
|
|
260
|
+
* Write a packet to the output synchronously.
|
|
261
|
+
* Synchronous version of writePacket.
|
|
262
|
+
*
|
|
263
|
+
* Writes muxed packet to the specified stream.
|
|
264
|
+
* Automatically handles:
|
|
265
|
+
* - Stream initialization on first packet (lazy initialization)
|
|
266
|
+
* - Codec parameter configuration from encoder or input stream
|
|
267
|
+
* - Header writing on first packet
|
|
268
|
+
* - Timestamp rescaling between source and output timebases
|
|
269
|
+
*
|
|
270
|
+
* For encoder sources, the encoder must have processed at least one frame
|
|
271
|
+
* before packets can be written (encoder must be initialized).
|
|
272
|
+
*
|
|
273
|
+
* Direct mapping to avformat_write_header() (on first packet) and av_interleaved_write_frame().
|
|
274
|
+
*
|
|
275
|
+
* @param packet - Packet to write
|
|
276
|
+
*
|
|
277
|
+
* @param streamIndex - Target stream index
|
|
278
|
+
*
|
|
279
|
+
* @throws {Error} If stream invalid or encoder not initialized
|
|
280
|
+
*
|
|
281
|
+
* @throws {FFmpegError} If write fails
|
|
282
|
+
*
|
|
283
|
+
* @example
|
|
284
|
+
* ```typescript
|
|
285
|
+
* // Write encoded packet - header written automatically on first packet
|
|
286
|
+
* const packet = encoder.encodeSync(frame);
|
|
287
|
+
* if (packet) {
|
|
288
|
+
* output.writePacketSync(packet, videoIdx);
|
|
289
|
+
* packet.free();
|
|
290
|
+
* }
|
|
291
|
+
* ```
|
|
292
|
+
*
|
|
293
|
+
* @example
|
|
294
|
+
* ```typescript
|
|
295
|
+
* // Stream copy with packet processing
|
|
296
|
+
* for (const packet of input.packetsSync()) {
|
|
297
|
+
* if (packet.streamIndex === inputVideoIdx) {
|
|
298
|
+
* output.writePacketSync(packet, outputVideoIdx);
|
|
299
|
+
* }
|
|
300
|
+
* packet.free();
|
|
301
|
+
* }
|
|
302
|
+
* ```
|
|
303
|
+
*
|
|
304
|
+
* @see {@link writePacket} For async version
|
|
305
|
+
*/
|
|
306
|
+
writePacketSync(packet: Packet, streamIndex: number): void;
|
|
215
307
|
/**
|
|
216
308
|
* Close media output and free resources.
|
|
217
309
|
*
|
|
@@ -233,6 +325,28 @@ export declare class MediaOutput implements AsyncDisposable {
|
|
|
233
325
|
* @see {@link Symbol.asyncDispose} For automatic cleanup
|
|
234
326
|
*/
|
|
235
327
|
close(): Promise<void>;
|
|
328
|
+
/**
|
|
329
|
+
* Close media output and free resources synchronously.
|
|
330
|
+
* Synchronous version of close.
|
|
331
|
+
*
|
|
332
|
+
* Automatically writes trailer if header was written.
|
|
333
|
+
* Closes the output file and releases all resources.
|
|
334
|
+
* Safe to call multiple times.
|
|
335
|
+
* Automatically called by Symbol.dispose.
|
|
336
|
+
*
|
|
337
|
+
* @example
|
|
338
|
+
* ```typescript
|
|
339
|
+
* const output = MediaOutput.openSync('output.mp4');
|
|
340
|
+
* try {
|
|
341
|
+
* // Use output - trailer written automatically on close
|
|
342
|
+
* } finally {
|
|
343
|
+
* output.closeSync();
|
|
344
|
+
* }
|
|
345
|
+
* ```
|
|
346
|
+
*
|
|
347
|
+
* @see {@link close} For async version
|
|
348
|
+
*/
|
|
349
|
+
closeSync(): void;
|
|
236
350
|
/**
|
|
237
351
|
* Get underlying format context.
|
|
238
352
|
*
|
|
@@ -260,4 +374,21 @@ export declare class MediaOutput implements AsyncDisposable {
|
|
|
260
374
|
* @see {@link close} For manual cleanup
|
|
261
375
|
*/
|
|
262
376
|
[Symbol.asyncDispose](): Promise<void>;
|
|
377
|
+
/**
|
|
378
|
+
* Dispose of media output synchronously.
|
|
379
|
+
*
|
|
380
|
+
* Implements Disposable interface for automatic cleanup.
|
|
381
|
+
* Equivalent to calling closeSync().
|
|
382
|
+
*
|
|
383
|
+
* @example
|
|
384
|
+
* ```typescript
|
|
385
|
+
* {
|
|
386
|
+
* using output = MediaOutput.openSync('output.mp4');
|
|
387
|
+
* // Use output...
|
|
388
|
+
* } // Automatically closed
|
|
389
|
+
* ```
|
|
390
|
+
*
|
|
391
|
+
* @see {@link closeSync} For manual cleanup
|
|
392
|
+
*/
|
|
393
|
+
[Symbol.dispose](): void;
|
|
263
394
|
}
|