node-av 3.1.3 → 4.0.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 +65 -52
- package/binding.gyp +4 -0
- package/dist/api/audio-frame-buffer.d.ts +201 -0
- package/dist/api/audio-frame-buffer.js +275 -0
- package/dist/api/audio-frame-buffer.js.map +1 -0
- package/dist/api/bitstream-filter.d.ts +319 -78
- package/dist/api/bitstream-filter.js +680 -151
- package/dist/api/bitstream-filter.js.map +1 -1
- package/dist/api/constants.d.ts +44 -0
- package/dist/api/constants.js +45 -0
- package/dist/api/constants.js.map +1 -0
- package/dist/api/data/test_av1.ivf +0 -0
- package/dist/api/data/test_mjpeg.mjpeg +0 -0
- package/dist/api/data/test_vp8.ivf +0 -0
- package/dist/api/data/test_vp9.ivf +0 -0
- package/dist/api/decoder.d.ts +279 -17
- package/dist/api/decoder.js +998 -209
- package/dist/api/decoder.js.map +1 -1
- package/dist/api/{media-input.d.ts → demuxer.d.ts} +294 -44
- package/dist/api/demuxer.js +1968 -0
- package/dist/api/demuxer.js.map +1 -0
- package/dist/api/encoder.d.ts +308 -50
- package/dist/api/encoder.js +1133 -111
- package/dist/api/encoder.js.map +1 -1
- package/dist/api/filter-presets.d.ts +12 -5
- package/dist/api/filter-presets.js +21 -7
- package/dist/api/filter-presets.js.map +1 -1
- package/dist/api/filter.d.ts +406 -40
- package/dist/api/filter.js +966 -139
- package/dist/api/filter.js.map +1 -1
- package/dist/api/{fmp4.d.ts → fmp4-stream.d.ts} +141 -140
- package/dist/api/fmp4-stream.js +539 -0
- package/dist/api/fmp4-stream.js.map +1 -0
- package/dist/api/hardware.d.ts +58 -6
- package/dist/api/hardware.js +127 -11
- package/dist/api/hardware.js.map +1 -1
- package/dist/api/index.d.ts +6 -4
- package/dist/api/index.js +14 -8
- package/dist/api/index.js.map +1 -1
- package/dist/api/io-stream.d.ts +3 -3
- package/dist/api/io-stream.js +5 -4
- package/dist/api/io-stream.js.map +1 -1
- package/dist/api/{media-output.d.ts → muxer.d.ts} +274 -60
- package/dist/api/muxer.js +1934 -0
- package/dist/api/muxer.js.map +1 -0
- package/dist/api/pipeline.d.ts +77 -29
- package/dist/api/pipeline.js +435 -425
- package/dist/api/pipeline.js.map +1 -1
- package/dist/api/rtp-stream.d.ts +312 -0
- package/dist/api/rtp-stream.js +630 -0
- package/dist/api/rtp-stream.js.map +1 -0
- package/dist/api/types.d.ts +476 -55
- package/dist/api/utilities/async-queue.d.ts +91 -0
- package/dist/api/utilities/async-queue.js +162 -0
- package/dist/api/utilities/async-queue.js.map +1 -0
- package/dist/api/utilities/audio-sample.d.ts +1 -1
- package/dist/api/utilities/image.d.ts +1 -1
- package/dist/api/utilities/index.d.ts +2 -0
- package/dist/api/utilities/index.js +4 -0
- package/dist/api/utilities/index.js.map +1 -1
- package/dist/api/utilities/media-type.d.ts +1 -1
- package/dist/api/utilities/pixel-format.d.ts +1 -1
- package/dist/api/utilities/sample-format.d.ts +1 -1
- package/dist/api/utilities/scheduler.d.ts +169 -0
- package/dist/api/utilities/scheduler.js +136 -0
- package/dist/api/utilities/scheduler.js.map +1 -0
- package/dist/api/utilities/streaming.d.ts +74 -15
- package/dist/api/utilities/streaming.js +170 -12
- package/dist/api/utilities/streaming.js.map +1 -1
- package/dist/api/utilities/timestamp.d.ts +1 -1
- package/dist/api/webrtc-stream.d.ts +288 -0
- package/dist/api/webrtc-stream.js +440 -0
- package/dist/api/webrtc-stream.js.map +1 -0
- package/dist/constants/constants.d.ts +51 -1
- package/dist/constants/constants.js +47 -1
- package/dist/constants/constants.js.map +1 -1
- package/dist/constants/encoders.d.ts +2 -1
- package/dist/constants/encoders.js +4 -3
- package/dist/constants/encoders.js.map +1 -1
- package/dist/constants/hardware.d.ts +26 -0
- package/dist/constants/hardware.js +27 -0
- package/dist/constants/hardware.js.map +1 -0
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.js +1 -0
- package/dist/constants/index.js.map +1 -1
- package/dist/lib/binding.d.ts +19 -8
- package/dist/lib/binding.js.map +1 -1
- package/dist/lib/codec-context.d.ts +87 -0
- package/dist/lib/codec-context.js +125 -4
- package/dist/lib/codec-context.js.map +1 -1
- package/dist/lib/codec-parameters.d.ts +183 -1
- package/dist/lib/codec-parameters.js +209 -0
- package/dist/lib/codec-parameters.js.map +1 -1
- package/dist/lib/codec-parser.d.ts +23 -0
- package/dist/lib/codec-parser.js +25 -0
- package/dist/lib/codec-parser.js.map +1 -1
- package/dist/lib/codec.d.ts +26 -4
- package/dist/lib/codec.js +35 -0
- package/dist/lib/codec.js.map +1 -1
- package/dist/lib/dictionary.js +1 -0
- package/dist/lib/dictionary.js.map +1 -1
- package/dist/lib/error.js +1 -1
- package/dist/lib/error.js.map +1 -1
- package/dist/lib/filter-context.d.ts +52 -11
- package/dist/lib/filter-context.js +56 -12
- package/dist/lib/filter-context.js.map +1 -1
- package/dist/lib/filter-graph.d.ts +9 -0
- package/dist/lib/filter-graph.js +13 -0
- package/dist/lib/filter-graph.js.map +1 -1
- package/dist/lib/filter.d.ts +21 -0
- package/dist/lib/filter.js +28 -0
- package/dist/lib/filter.js.map +1 -1
- package/dist/lib/format-context.d.ts +48 -14
- package/dist/lib/format-context.js +76 -7
- package/dist/lib/format-context.js.map +1 -1
- package/dist/lib/frame.d.ts +168 -0
- package/dist/lib/frame.js +212 -0
- package/dist/lib/frame.js.map +1 -1
- package/dist/lib/hardware-device-context.d.ts +3 -2
- package/dist/lib/hardware-device-context.js.map +1 -1
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.js +2 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/input-format.d.ts +21 -0
- package/dist/lib/input-format.js +42 -2
- package/dist/lib/input-format.js.map +1 -1
- package/dist/lib/native-types.d.ts +48 -26
- package/dist/lib/option.d.ts +25 -13
- package/dist/lib/option.js +28 -0
- package/dist/lib/option.js.map +1 -1
- package/dist/lib/output-format.d.ts +22 -1
- package/dist/lib/output-format.js +28 -0
- package/dist/lib/output-format.js.map +1 -1
- package/dist/lib/packet.d.ts +35 -0
- package/dist/lib/packet.js +52 -2
- package/dist/lib/packet.js.map +1 -1
- package/dist/lib/stream.d.ts +126 -0
- package/dist/lib/stream.js +188 -5
- package/dist/lib/stream.js.map +1 -1
- package/dist/lib/sync-queue.d.ts +179 -0
- package/dist/lib/sync-queue.js +197 -0
- package/dist/lib/sync-queue.js.map +1 -0
- package/dist/lib/types.d.ts +27 -1
- package/dist/lib/utilities.d.ts +281 -53
- package/dist/lib/utilities.js +298 -55
- package/dist/lib/utilities.js.map +1 -1
- package/package.json +20 -19
- package/dist/api/fmp4.js +0 -710
- package/dist/api/fmp4.js.map +0 -1
- package/dist/api/media-input.js +0 -1075
- package/dist/api/media-input.js.map +0 -1
- package/dist/api/media-output.js +0 -1040
- package/dist/api/media-output.js.map +0 -1
- package/dist/api/webrtc.d.ts +0 -664
- package/dist/api/webrtc.js +0 -1132
- package/dist/api/webrtc.js.map +0 -1
package/dist/lib/utilities.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { FF_HWDEVICE_TYPE_NONE } from '../constants/hardware.js';
|
|
1
2
|
import { bindings } from './binding.js';
|
|
2
3
|
import { FFmpegError } from './error.js';
|
|
3
4
|
/**
|
|
@@ -199,81 +200,50 @@ export function avGetCodecName(codecId) {
|
|
|
199
200
|
return bindings.avGetCodecName(codecId);
|
|
200
201
|
}
|
|
201
202
|
/**
|
|
202
|
-
* Get
|
|
203
|
+
* Get RFC 6381 codec string from codec parameters.
|
|
203
204
|
*
|
|
204
|
-
* Generates codec strings for MPEG-DASH manifests following RFC 6381.
|
|
205
|
-
* Uses FFmpeg's
|
|
206
|
-
*
|
|
207
|
-
* Supported codecs:
|
|
208
|
-
* - **WebM codecs**: VP8, VP9 (detailed), Vorbis, Opus, FLAC
|
|
209
|
-
* - **H.264** (avc1): `avc1.PPCCLL` (profile, constraints, level)
|
|
210
|
-
* - **HEVC** (hvc1/hev1): Base tag only (`hvc1` or `hev1`) - no profile details
|
|
211
|
-
* - **AV1** (av01): `av01.P.LLT.BB...` (profile, level, tier, bitdepth, etc.)
|
|
212
|
-
* - **AAC** (mp4a): `mp4a.OT.AOT` (object type, audio object type)
|
|
213
|
-
*
|
|
214
|
-
* Note: For HLS with detailed HEVC codec strings, use {@link avGetCodecStringHls}.
|
|
215
|
-
*
|
|
216
|
-
* @param codecpar - Codec parameters
|
|
217
|
-
*
|
|
218
|
-
* @returns DASH codec string, or null if cannot be determined
|
|
219
|
-
*
|
|
220
|
-
* @example
|
|
221
|
-
* ```typescript
|
|
222
|
-
* import { avGetCodecStringDash } from 'node-av/lib';
|
|
223
|
-
*
|
|
224
|
-
* // Get codec string from DASH output stream
|
|
225
|
-
* const stream = dashOutput.video();
|
|
226
|
-
* const codecString = avGetCodecStringDash(stream.codecpar);
|
|
227
|
-
* console.log(codecString); // "hev1" for HEVC, "avc1.42c01e" for H.264
|
|
228
|
-
*
|
|
229
|
-
* // Use for DASH manifest
|
|
230
|
-
* const mimeType = `video/mp4; codecs="${codecString}"`;
|
|
231
|
-
* ```
|
|
232
|
-
*
|
|
233
|
-
* @see [RFC 6381](https://tools.ietf.org/html/rfc6381) - RFC 6381: Codecs Parameter Specification
|
|
234
|
-
* @see [dashenc](https://ffmpeg.org/doxygen/trunk/dashenc_8c_source.html#l00345) - FFmpeg dashenc.c implementation
|
|
235
|
-
*/
|
|
236
|
-
export function avGetCodecStringDash(codecpar) {
|
|
237
|
-
return bindings.avGetCodecStringDash(codecpar.getNative());
|
|
238
|
-
}
|
|
239
|
-
/**
|
|
240
|
-
* Get HLS codec string from codec parameters.
|
|
241
|
-
*
|
|
242
|
-
* Generates codec strings for HLS playlists. Uses FFmpeg's hlsenc.c implementation.
|
|
243
|
-
* Provides detailed HEVC codec strings with profile, tier, level, and constraints.
|
|
205
|
+
* Generates codec strings for MPEG-DASH and HLS manifests following RFC 6381.
|
|
206
|
+
* Uses FFmpeg's centralized ff_make_codec_str() implementation (libavformat/codecstring.c).
|
|
244
207
|
*
|
|
245
208
|
* Supported codecs:
|
|
209
|
+
* - **WebM codecs**: VP8, VP9 (with detailed profile/level), Vorbis, Opus, FLAC
|
|
246
210
|
* - **H.264** (avc1): `avc1.PPCCLL` (profile, constraints, level)
|
|
247
211
|
* - **HEVC** (hvc1): `hvc1.P.PC.TL.C` (profile, profile_compatibility, tier+level, constraints)
|
|
248
|
-
* - **
|
|
212
|
+
* - **AV1** (av01): `av01.P.LLT.BB...` (profile, level, tier, bitdepth, color info)
|
|
213
|
+
* - **AAC**: `mp4a.40.AOT` (audio object type)
|
|
249
214
|
* - **MP2**: `mp4a.40.33`
|
|
250
215
|
* - **MP3**: `mp4a.40.34`
|
|
251
216
|
* - **AC-3**: `ac-3`
|
|
252
217
|
* - **E-AC-3**: `ec-3`
|
|
253
|
-
*
|
|
254
|
-
* Note: For DASH manifests, use {@link avGetCodecStringDash} instead.
|
|
218
|
+
* - **MPEG-4 Visual**: `mp4v.20` (profile/level not implemented)
|
|
255
219
|
*
|
|
256
220
|
* @param codecpar - Codec parameters
|
|
257
221
|
*
|
|
258
|
-
* @
|
|
222
|
+
* @param frameRate - Optional frame rate for VP9 level calculation (only used for VP9)
|
|
223
|
+
*
|
|
224
|
+
* @returns RFC 6381 codec string, or null if codec not supported
|
|
259
225
|
*
|
|
260
226
|
* @example
|
|
261
227
|
* ```typescript
|
|
262
|
-
* import {
|
|
228
|
+
* import { avGetCodecString } from 'node-av/lib';
|
|
229
|
+
*
|
|
230
|
+
* // Get codec string for DASH/HLS manifest
|
|
231
|
+
* const stream = output.video();
|
|
232
|
+
* const codecString = avGetCodecString(stream.codecpar);
|
|
233
|
+
* console.log(codecString); // "hvc1.1.6.L93.B0" for HEVC, "avc1.42c01e" for H.264
|
|
263
234
|
*
|
|
264
|
-
* //
|
|
265
|
-
* const
|
|
266
|
-
*
|
|
267
|
-
* console.log(codecString); // "hvc1.1.6.L93.B0" - detailed HEVC profile info
|
|
235
|
+
* // VP9 with frame rate for accurate level
|
|
236
|
+
* const codecStringVP9 = avGetCodecString(stream.codecpar, { num: 30, den: 1 });
|
|
237
|
+
* console.log(codecStringVP9); // "vp09.00.30.08" - detailed VP9 string
|
|
268
238
|
*
|
|
269
|
-
* // Use for HLS
|
|
270
|
-
* const
|
|
239
|
+
* // Use for DASH/HLS manifest
|
|
240
|
+
* const mimeType = `video/mp4; codecs="${codecString}"`;
|
|
271
241
|
* ```
|
|
272
242
|
*
|
|
273
|
-
* @see [
|
|
243
|
+
* @see [codecstring.c](https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/codecstring.c) - FFmpeg implementation
|
|
274
244
|
*/
|
|
275
|
-
export function
|
|
276
|
-
return bindings.
|
|
245
|
+
export function avGetCodecString(codecpar, frameRate) {
|
|
246
|
+
return bindings.avGetCodecString(codecpar.getNative(), frameRate);
|
|
277
247
|
}
|
|
278
248
|
/**
|
|
279
249
|
* Get DASH MIME type for codec parameters.
|
|
@@ -377,6 +347,57 @@ export function avGetPixFmtFromName(name) {
|
|
|
377
347
|
export function avIsHardwarePixelFormat(pixFmt) {
|
|
378
348
|
return bindings.avIsHardwarePixelFormat(pixFmt);
|
|
379
349
|
}
|
|
350
|
+
/**
|
|
351
|
+
* Get hardware device type name.
|
|
352
|
+
*
|
|
353
|
+
* Returns the string name for a hardware device type enum value.
|
|
354
|
+
*
|
|
355
|
+
* Direct mapping to av_hwdevice_get_type_name().
|
|
356
|
+
*
|
|
357
|
+
* @param type - Hardware device type enum
|
|
358
|
+
*
|
|
359
|
+
* @returns Device type name (e.g. "videotoolbox", "cuda"), or null if unknown
|
|
360
|
+
*
|
|
361
|
+
* @example
|
|
362
|
+
* ```typescript
|
|
363
|
+
* import { AV_HWDEVICE_TYPE_VIDEOTOOLBOX, AV_HWDEVICE_TYPE_CUDA } from 'node-av/constants';
|
|
364
|
+
*
|
|
365
|
+
* const name1 = avGetHardwareDeviceTypeName(AV_HWDEVICE_TYPE_VIDEOTOOLBOX); // Returns "videotoolbox"
|
|
366
|
+
* const name2 = avGetHardwareDeviceTypeName(AV_HWDEVICE_TYPE_CUDA); // Returns "cuda"
|
|
367
|
+
* ```
|
|
368
|
+
*
|
|
369
|
+
* @see [av_hwdevice_get_type_name](https://ffmpeg.org/doxygen/7.1/hwcontext_8h.html#afb2b99a15f3fdde25a2fd19353ac5a67) - FFmpeg Doxygen
|
|
370
|
+
*/
|
|
371
|
+
export function avGetHardwareDeviceTypeName(type) {
|
|
372
|
+
const name = bindings.avGetHardwareDeviceTypeName(type);
|
|
373
|
+
return name ?? FF_HWDEVICE_TYPE_NONE;
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Get hardware device type from name.
|
|
377
|
+
*
|
|
378
|
+
* Looks up the hardware device type enum from its string name.
|
|
379
|
+
* Returns AV_HWDEVICE_TYPE_NONE if the name is not recognized.
|
|
380
|
+
*
|
|
381
|
+
* Direct mapping to av_hwdevice_find_type_by_name().
|
|
382
|
+
*
|
|
383
|
+
* @param name - Hardware device type name (e.g. "videotoolbox", "cuda")
|
|
384
|
+
*
|
|
385
|
+
* @returns Hardware device type enum, or AV_HWDEVICE_TYPE_NONE if not found
|
|
386
|
+
*
|
|
387
|
+
* @example
|
|
388
|
+
* ```typescript
|
|
389
|
+
* import { avGetHardwareDeviceTypeFromName } from 'node-av/lib';
|
|
390
|
+
*
|
|
391
|
+
* const type1 = avGetHardwareDeviceTypeFromName("videotoolbox"); // Returns AV_HWDEVICE_TYPE_VIDEOTOOLBOX
|
|
392
|
+
* const type2 = avGetHardwareDeviceTypeFromName("cuda"); // Returns AV_HWDEVICE_TYPE_CUDA
|
|
393
|
+
* const none = avGetHardwareDeviceTypeFromName("invalid"); // Returns AV_HWDEVICE_TYPE_NONE
|
|
394
|
+
* ```
|
|
395
|
+
*
|
|
396
|
+
* @see [av_hwdevice_find_type_by_name](https://ffmpeg.org/doxygen/7.1/hwcontext_8h.html#a541943ddced791765349645a30adfa4d) - FFmpeg Doxygen
|
|
397
|
+
*/
|
|
398
|
+
export function avGetHardwareDeviceTypeFromName(name) {
|
|
399
|
+
return bindings.avGetHardwareDeviceTypeFromName(name);
|
|
400
|
+
}
|
|
380
401
|
/**
|
|
381
402
|
* Get media type string.
|
|
382
403
|
*
|
|
@@ -747,6 +768,228 @@ export function avUsleep(usec) {
|
|
|
747
768
|
export function avRescaleRnd(a, b, c, rnd) {
|
|
748
769
|
return bindings.avRescaleRnd(a, b, c, rnd);
|
|
749
770
|
}
|
|
771
|
+
/**
|
|
772
|
+
* Rescale a timestamp while preserving accuracy with coarse input timebases.
|
|
773
|
+
*
|
|
774
|
+
* Used for audio streamcopy to maintain accuracy when input timebase is coarse.
|
|
775
|
+
* Direct mapping to av_rescale_delta().
|
|
776
|
+
*
|
|
777
|
+
* @param inTb - Input timebase
|
|
778
|
+
*
|
|
779
|
+
* @param inTs - Input timestamp
|
|
780
|
+
*
|
|
781
|
+
* @param fsTb - Duration timebase (e.g., {1, sampleRate})
|
|
782
|
+
*
|
|
783
|
+
* @param duration - Duration in fsTb units
|
|
784
|
+
*
|
|
785
|
+
* @param lastRef - Reference object with `value` property (modified by function)
|
|
786
|
+
*
|
|
787
|
+
* @param lastRef.value - Last output timestamp (bigint)
|
|
788
|
+
*
|
|
789
|
+
* @param outTb - Output timebase
|
|
790
|
+
*
|
|
791
|
+
* @returns Rescaled timestamp
|
|
792
|
+
*
|
|
793
|
+
* @example
|
|
794
|
+
* ```typescript
|
|
795
|
+
* const inTb = { num: 1, den: 48000 };
|
|
796
|
+
* const inTs = 1000000n;
|
|
797
|
+
* const fsTb = { num: 1, den: 44100 };
|
|
798
|
+
* const duration = 1024;
|
|
799
|
+
* const lastRef = { value: 0n };
|
|
800
|
+
* const outTb = { num: 1, den: 96000 };
|
|
801
|
+
*
|
|
802
|
+
* const rescaled = avRescaleDelta(inTb, inTs, fsTb, duration, lastRef, outTb);
|
|
803
|
+
* ```
|
|
804
|
+
*
|
|
805
|
+
* @see [av_rescale_delta](https://ffmpeg.org/doxygen/7.1/group__lavu__math.html) - FFmpeg Doxygen
|
|
806
|
+
*/
|
|
807
|
+
export function avRescaleDelta(inTb, inTs, fsTb, duration, lastRef, outTb) {
|
|
808
|
+
return bindings.avRescaleDelta(inTb, inTs, fsTb, duration, lastRef, outTb);
|
|
809
|
+
}
|
|
810
|
+
/**
|
|
811
|
+
* Multiply two rational numbers.
|
|
812
|
+
*
|
|
813
|
+
* Multiplies two rational numbers using FFmpeg's av_mul_q() which normalizes the result.
|
|
814
|
+
* This is more accurate than manual multiplication as it reduces the fraction.
|
|
815
|
+
*
|
|
816
|
+
* Direct mapping to av_mul_q().
|
|
817
|
+
*
|
|
818
|
+
* @param a - First rational number
|
|
819
|
+
*
|
|
820
|
+
* @param b - Second rational number
|
|
821
|
+
*
|
|
822
|
+
* @returns Product of a and b as a normalized rational
|
|
823
|
+
*
|
|
824
|
+
* @example
|
|
825
|
+
* ```typescript
|
|
826
|
+
* // Multiply framerate by 2
|
|
827
|
+
* const framerate = { num: 25, den: 1 };
|
|
828
|
+
* const doubled = avMulQ(framerate, { num: 2, den: 1 });
|
|
829
|
+
* // Returns { num: 50, den: 1 }
|
|
830
|
+
*
|
|
831
|
+
* // Calculate field rate for interlaced video
|
|
832
|
+
* const fieldRate = avMulQ(framerate, { num: 2, den: 1 });
|
|
833
|
+
* ```
|
|
834
|
+
*
|
|
835
|
+
* @see [av_mul_q](https://ffmpeg.org/doxygen/trunk/group__lavu__math__rational.html#ga89c0e84e30e2f90196e11fc254e4fc3f) - FFmpeg Doxygen
|
|
836
|
+
*/
|
|
837
|
+
export function avMulQ(a, b) {
|
|
838
|
+
return bindings.avMulQ(a, b);
|
|
839
|
+
}
|
|
840
|
+
/**
|
|
841
|
+
* Invert a rational number.
|
|
842
|
+
*
|
|
843
|
+
* Returns the reciprocal of a rational number using FFmpeg's av_inv_q().
|
|
844
|
+
* Swaps numerator and denominator: (a/b) becomes (b/a).
|
|
845
|
+
*
|
|
846
|
+
* Direct mapping to av_inv_q().
|
|
847
|
+
*
|
|
848
|
+
* @param q - Rational number to invert
|
|
849
|
+
*
|
|
850
|
+
* @returns Inverted rational (reciprocal)
|
|
851
|
+
*
|
|
852
|
+
* @example
|
|
853
|
+
* ```typescript
|
|
854
|
+
* // Convert framerate to frame duration
|
|
855
|
+
* const framerate = { num: 25, den: 1 }; // 25 fps
|
|
856
|
+
* const frameDuration = avInvQ(framerate); // 1/25 seconds
|
|
857
|
+
* // Returns { num: 1, den: 25 }
|
|
858
|
+
*
|
|
859
|
+
* // Get timebase from framerate
|
|
860
|
+
* const timebase = avInvQ({ num: 30000, den: 1001 }); // NTSC
|
|
861
|
+
* // Returns { num: 1001, den: 30000 }
|
|
862
|
+
* ```
|
|
863
|
+
*
|
|
864
|
+
* @see [av_inv_q](https://ffmpeg.org/doxygen/trunk/group__lavu__math__rational.html#ga587a784cb48299feea51d7dbbc6cc38c) - FFmpeg Doxygen
|
|
865
|
+
*/
|
|
866
|
+
export function avInvQ(q) {
|
|
867
|
+
return bindings.avInvQ(q);
|
|
868
|
+
}
|
|
869
|
+
/**
|
|
870
|
+
* Add two rational numbers.
|
|
871
|
+
*
|
|
872
|
+
* Adds two rational numbers using FFmpeg's av_add_q() which normalizes the result.
|
|
873
|
+
* This is more accurate than manual addition as it reduces the fraction.
|
|
874
|
+
*
|
|
875
|
+
* Direct mapping to av_add_q().
|
|
876
|
+
*
|
|
877
|
+
* @param a - First rational number
|
|
878
|
+
*
|
|
879
|
+
* @param b - Second rational number
|
|
880
|
+
*
|
|
881
|
+
* @returns Sum of a and b as a normalized rational
|
|
882
|
+
*
|
|
883
|
+
* @example
|
|
884
|
+
* ```typescript
|
|
885
|
+
* // Add two fractions
|
|
886
|
+
* const a = { num: 1, den: 2 }; // 1/2
|
|
887
|
+
* const b = { num: 1, den: 4 }; // 1/4
|
|
888
|
+
* const sum = avAddQ(a, b); // 3/4
|
|
889
|
+
* // Returns { num: 3, den: 4 }
|
|
890
|
+
*
|
|
891
|
+
* // Add timestamps with different timebases
|
|
892
|
+
* const ts1 = { num: 1000, den: 30000 };
|
|
893
|
+
* const ts2 = { num: 500, den: 30000 };
|
|
894
|
+
* const total = avAddQ(ts1, ts2);
|
|
895
|
+
* // Returns { num: 1, den: 20 } (normalized from 1500/30000)
|
|
896
|
+
* ```
|
|
897
|
+
*
|
|
898
|
+
* @see [av_add_q](https://ffmpeg.org/doxygen/trunk/group__lavu__math__rational.html#gac4af1feb227bd1095fc2cab42d933f52) - FFmpeg Doxygen
|
|
899
|
+
*/
|
|
900
|
+
export function avAddQ(a, b) {
|
|
901
|
+
return bindings.avAddQ(a, b);
|
|
902
|
+
}
|
|
903
|
+
/**
|
|
904
|
+
* Calculate greatest common divisor.
|
|
905
|
+
*
|
|
906
|
+
* Computes the GCD of two integers using FFmpeg's av_gcd().
|
|
907
|
+
* Uses the Euclidean algorithm for efficient computation.
|
|
908
|
+
*
|
|
909
|
+
* Direct mapping to av_gcd().
|
|
910
|
+
*
|
|
911
|
+
* @param a - First integer
|
|
912
|
+
*
|
|
913
|
+
* @param b - Second integer
|
|
914
|
+
*
|
|
915
|
+
* @returns Greatest common divisor of a and b
|
|
916
|
+
*
|
|
917
|
+
* @example
|
|
918
|
+
* ```typescript
|
|
919
|
+
* const gcd = avGcd(48000, 44100);
|
|
920
|
+
* console.log(gcd); // 300
|
|
921
|
+
*
|
|
922
|
+
* // Used for calculating LCM
|
|
923
|
+
* const lcm = (a * b) / avGcd(a, b);
|
|
924
|
+
* ```
|
|
925
|
+
*
|
|
926
|
+
* @see [av_gcd](https://ffmpeg.org/doxygen/trunk/group__lavu__math.html#ga0e8419780352de538c1c15098cb1a587) - FFmpeg Doxygen
|
|
927
|
+
*/
|
|
928
|
+
export function avGcd(a, b) {
|
|
929
|
+
return bindings.avGcd(a, b);
|
|
930
|
+
}
|
|
931
|
+
/**
|
|
932
|
+
* Rescale timestamp with specified rounding mode.
|
|
933
|
+
*
|
|
934
|
+
* Rescales a timestamp from one time base to another with specific rounding behavior.
|
|
935
|
+
* More control than avRescaleQ() which uses default rounding.
|
|
936
|
+
*
|
|
937
|
+
* Direct mapping to av_rescale_q_rnd().
|
|
938
|
+
*
|
|
939
|
+
* @param a - Timestamp to rescale
|
|
940
|
+
*
|
|
941
|
+
* @param bq - Source time base
|
|
942
|
+
*
|
|
943
|
+
* @param cq - Destination time base
|
|
944
|
+
*
|
|
945
|
+
* @param rnd - Rounding mode (AV_ROUND_ZERO, AV_ROUND_INF, AV_ROUND_DOWN, AV_ROUND_UP, AV_ROUND_NEAR_INF)
|
|
946
|
+
*
|
|
947
|
+
* @returns Rescaled timestamp
|
|
948
|
+
*
|
|
949
|
+
* @example
|
|
950
|
+
* ```typescript
|
|
951
|
+
* import { AV_ROUND_UP, AV_ROUND_DOWN } from 'node-av/constants';
|
|
952
|
+
*
|
|
953
|
+
* const pts = 1000n;
|
|
954
|
+
* const srcTb = { num: 1, den: 48000 };
|
|
955
|
+
* const dstTb = { num: 1, den: 90000 };
|
|
956
|
+
*
|
|
957
|
+
* // Round up for safer comparisons
|
|
958
|
+
* const ptsUp = avRescaleQRnd(pts, srcTb, dstTb, AV_ROUND_UP);
|
|
959
|
+
*
|
|
960
|
+
* // Round down for conservative timestamps
|
|
961
|
+
* const ptsDown = avRescaleQRnd(pts, srcTb, dstTb, AV_ROUND_DOWN);
|
|
962
|
+
* ```
|
|
963
|
+
*
|
|
964
|
+
* @see [av_rescale_q_rnd](https://ffmpeg.org/doxygen/trunk/group__lavu__math.html#ga60044a302e86b5c2d8b19a81c8179f30) - FFmpeg Doxygen
|
|
965
|
+
*/
|
|
966
|
+
export function avRescaleQRnd(a, bq, cq, rnd) {
|
|
967
|
+
return bindings.avRescaleQRnd(a, bq, cq, rnd);
|
|
968
|
+
}
|
|
969
|
+
/**
|
|
970
|
+
* Get the duration of a single audio frame in samples.
|
|
971
|
+
*
|
|
972
|
+
* Returns the number of samples per audio frame for codecs with constant frame size,
|
|
973
|
+
* or calculates it based on frame bytes for variable frame size codecs.
|
|
974
|
+
*
|
|
975
|
+
* Direct mapping to av_get_audio_frame_duration2().
|
|
976
|
+
*
|
|
977
|
+
* @param codecpar - Codec parameters
|
|
978
|
+
*
|
|
979
|
+
* @param frameBytes - Size of the frame in bytes
|
|
980
|
+
*
|
|
981
|
+
* @returns Number of samples in the frame, or 0 if unknown
|
|
982
|
+
*
|
|
983
|
+
* @example
|
|
984
|
+
* ```typescript
|
|
985
|
+
* const frameDuration = avGetAudioFrameDuration2(codecpar, frameBytes);
|
|
986
|
+
* ```
|
|
987
|
+
*
|
|
988
|
+
* @see [av_get_audio_frame_duration2](https://ffmpeg.org/doxygen/7.1/group__lavc__misc.html) - FFmpeg Doxygen
|
|
989
|
+
*/
|
|
990
|
+
export function avGetAudioFrameDuration2(codecpar, frameBytes) {
|
|
991
|
+
return bindings.avGetAudioFrameDuration2(codecpar.getNative(), frameBytes);
|
|
992
|
+
}
|
|
750
993
|
/**
|
|
751
994
|
* Allocate audio samples buffer.
|
|
752
995
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utilities.js","sourceRoot":"","sources":["../../src/lib/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"utilities.js","sourceRoot":"","sources":["../../src/lib/utilities.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-av",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "FFmpeg bindings for Node.js",
|
|
5
5
|
"author": "seydx (https://github.com/seydx/av)",
|
|
6
6
|
"type": "module",
|
|
@@ -42,11 +42,12 @@
|
|
|
42
42
|
"docs:build": "npm run predocs && rimraf docs/.vitepress/dist && vitepress build docs && cpy --flat docs/logo.png docs/.vitepress/dist",
|
|
43
43
|
"docs:preview": "npm run predocs && vitepress preview docs --port 5174",
|
|
44
44
|
"format": "prettier --write src/ --write test/ --write scripts/ --write examples/ --ignore-unknown --no-error-on-unmatched-pattern",
|
|
45
|
-
"generate": "npm run patch:ffmpeg && npm run generate:ffmpeg-version && npm run generate:constants && npm run generate:encoders && npm run generate:decoders && npm run generate:layouts",
|
|
45
|
+
"generate": "npm run patch:ffmpeg && npm run generate:ffmpeg-version && npm run generate:constants && npm run generate:encoders && npm run generate:decoders && npm run generate:hardware && npm run generate:layouts",
|
|
46
46
|
"generate:ffmpeg-version": "node scripts/generate-ffmpeg-version.js",
|
|
47
47
|
"generate:constants": "cross-env FFMPEG_DEV_PATH=externals/jellyfin-ffmpeg node scripts/generate-constants.js && prettier --write src/constants/constants.ts",
|
|
48
48
|
"generate:encoders": "cross-env FFMPEG_DEV_PATH=externals/jellyfin-ffmpeg node scripts/generate-encoders.js --with-patches && prettier --write src/constants/encoders.ts",
|
|
49
49
|
"generate:decoders": "cross-env FFMPEG_DEV_PATH=externals/jellyfin-ffmpeg node scripts/generate-decoders.js --with-patches && prettier --write src/constants/decoders.ts",
|
|
50
|
+
"generate:hardware": "cross-env FFMPEG_DEV_PATH=externals/jellyfin-ffmpeg node scripts/generate-hardware.js --with-patches && prettier --write src/constants/hardware.ts",
|
|
50
51
|
"generate:layouts": "cross-env FFMPEG_DEV_PATH=externals/jellyfin-ffmpeg node scripts/generate-channel-layouts.js && prettier --write src/constants/channel-layouts.ts",
|
|
51
52
|
"install": "node install/check.js",
|
|
52
53
|
"install-updates": "npm i --save",
|
|
@@ -67,40 +68,40 @@
|
|
|
67
68
|
"werift": "^0.22.2"
|
|
68
69
|
},
|
|
69
70
|
"optionalDependencies": {
|
|
70
|
-
"@seydx/node-av-darwin-arm64": "^
|
|
71
|
-
"@seydx/node-av-darwin-x64": "^
|
|
72
|
-
"@seydx/node-av-linux-arm64": "^
|
|
73
|
-
"@seydx/node-av-linux-x64": "^
|
|
74
|
-
"@seydx/node-av-win32-arm64-mingw": "^
|
|
75
|
-
"@seydx/node-av-win32-arm64-msvc": "^
|
|
76
|
-
"@seydx/node-av-win32-x64-mingw": "^
|
|
77
|
-
"@seydx/node-av-win32-x64-msvc": "^
|
|
71
|
+
"@seydx/node-av-darwin-arm64": "^4.0.0",
|
|
72
|
+
"@seydx/node-av-darwin-x64": "^4.0.0",
|
|
73
|
+
"@seydx/node-av-linux-arm64": "^4.0.0",
|
|
74
|
+
"@seydx/node-av-linux-x64": "^4.0.0",
|
|
75
|
+
"@seydx/node-av-win32-arm64-mingw": "^4.0.0",
|
|
76
|
+
"@seydx/node-av-win32-arm64-msvc": "^4.0.0",
|
|
77
|
+
"@seydx/node-av-win32-x64-mingw": "^4.0.0",
|
|
78
|
+
"@seydx/node-av-win32-x64-msvc": "^4.0.0"
|
|
78
79
|
},
|
|
79
80
|
"devDependencies": {
|
|
80
81
|
"@stylistic/eslint-plugin": "^5.5.0",
|
|
81
|
-
"@types/node": "^24.
|
|
82
|
+
"@types/node": "^24.10.1",
|
|
82
83
|
"@types/node-abi": "^3.0.3",
|
|
83
84
|
"@types/semver": "^7.7.1",
|
|
84
85
|
"@types/unzipper": "^0.10.11",
|
|
85
86
|
"@types/ws": "^8.18.1",
|
|
86
|
-
"@typescript-eslint/parser": "^8.46.
|
|
87
|
+
"@typescript-eslint/parser": "^8.46.4",
|
|
87
88
|
"concurrently": "^9.2.1",
|
|
88
89
|
"cpy-cli": "^6.0.0",
|
|
89
90
|
"cross-env": "^10.1.0",
|
|
90
|
-
"eslint": "^9.
|
|
91
|
-
"eslint-plugin-jsdoc": "^61.
|
|
92
|
-
"globals": "^16.
|
|
91
|
+
"eslint": "^9.39.1",
|
|
92
|
+
"eslint-plugin-jsdoc": "^61.2.0",
|
|
93
|
+
"globals": "^16.5.0",
|
|
93
94
|
"node-addon-api": "^8.5.0",
|
|
94
|
-
"node-gyp": "^
|
|
95
|
+
"node-gyp": "^12.0.0",
|
|
95
96
|
"prettier": "^3.6.2",
|
|
96
|
-
"rimraf": "^6.0
|
|
97
|
-
"sharp": "^0.34.
|
|
97
|
+
"rimraf": "^6.1.0",
|
|
98
|
+
"sharp": "^0.34.5",
|
|
98
99
|
"tsx": "^4.20.6",
|
|
99
100
|
"typedoc": "^0.28.14",
|
|
100
101
|
"typedoc-plugin-markdown": "^4.9.0",
|
|
101
102
|
"typedoc-vitepress-theme": "^1.1.2",
|
|
102
103
|
"typescript": "^5.9.3",
|
|
103
|
-
"typescript-eslint": "^8.46.
|
|
104
|
+
"typescript-eslint": "^8.46.4",
|
|
104
105
|
"updates": "^16.9.1",
|
|
105
106
|
"vitepress": "^2.0.0-alpha.12",
|
|
106
107
|
"ws": "^8.18.3"
|