Releases: seydx/node-av
Release list
v6.2.0-beta.7
⚠️ This is a pre-release version for testing. Install with:npm install node-av@beta
📋 All Changes since v6.1.1
- chore: bump version to 6.2.0-beta.7 (1581af4) - @seydx
- Fix RTPStream with pixel format handling for video scaling and codec selection (0259d42) - @seydx
- Fix fMP4Stream with pixel format handling for video scaling (ff578c9) - @seydx
- Update deps (1bbf951) - @seydx
- update ffmpeg (73c64b3) - @seydx
- chore: bump version to 6.2.0-beta.6 (5fa607b) - @seydx
- Update deps (4e6694b) - @seydx
- Update tests (9b5d07f) - @seydx
- Add bitrate control for video encoding in FMP4Stream (23cee7f) - @seydx
- Add permissions for build job in workflow (67ad931) - @seydx
- Update Changelog (4f5b277) - @seydx
- Update macOS runner to use macos-26 and enhance Xcode selection logic (d0f29f4) - @seydx
- Update Xcode version handling and add cache cleanup job for stale FFmpeg caches (3644b0e) - @seydx
- chore: bump version to 6.2.0-beta.5 (c23e621) - @seydx
- Update Readme (2bff8b8) - @seydx
- Update tests (c52b0f7) - @seydx
- Enhance concurrency handling in FormatContext by adding shared mutex for safe access during FFmpeg operations (aecef74) - @seydx
- Update bindings (324e7c6) - @seydx
- Enhance error handling to prevent JS calls when not allowed (7d9a845) - @seydx
- Improve error handling in device listing workers to prevent JS calls when not allowed (4e77c20) - @seydx
- Optimize stream handling in Decoder class to prevent memory issues (7ca06cc) - @seydx
- chore: bump version to 6.2.0-beta.4 (1306ab2) - @seydx
- Update deps (aed5a03) - @seydx
- Update Changelog (ada70d1) - @seydx
- Format (692c865) - @seydx
- Add SHA256 checksum generation for release archives and update NPM publish command with provenance (01025d7) - @seydx
- Add FFMPEG_MSVC_PREBUILT_TAG and enhance workflow for reproducible builds (30788c0) - @seydx
- Update tests (1ba5dfd) - @seydx
- Add async operation guards in Fifo and FilterGraph to prevent use-after-free errors during resource management (dc332ce) - @seydx
- Add async operation guards in SoftwareResampleContext to prevent use-after-free errors during context replacement and cleanup (29b2fb6) - @seydx
- Add async operation guards in SoftwareScaleContext to prevent use-after-free errors during context replacement (8b7a45d) - @seydx
- Enhance Scaler to manage async operations and prevent use-after-free errors during cleanup (e52e77e) - @seydx
- Refactor HardwareFramesContext to improve memory management and async operation handling (3c71a78) - @seydx
- Refactor HardwareDeviceContext to manage device references more safely and simplify ownership handling (2e460fd) - @seydx
- Add async operation guards to prevent use-after-free in Frame operations (55040cd) - @seydx
- Add async operation guard and improve context management in IOContext (fc7afef) - @seydx
- Enhance InputFormatProbeBufferWorker with improved error handling and async operation management (432dfa7) - @seydx
- Add synchronous seek method and enhance error handling in FormatContext (ff3167d) - @seydx
- Add async operation guards and validation for frame objects in FilterContext (f85bfd9) - @seydx
- Add async operation guards and validation for audio frames in CodecContext (fc96340) - @seydx
- Add async operation guard to Free method in BitStreamFilterContext (b05eff8) - @seydx
- Enhance AudioFifo class with buffer validation and async operation handling (bfe2a75) - @seydx
- Add PromiseWorker and AsyncOpCounter classes for asynchronous operation management (7a7b72b) - @seydx
- Refactor Packet class to improve memory management and preserve metadata during data assignment (0405bf4) - @seydx
- Fix memory allocation for attached picture (30fdc53) - @seydx
- Update typings (a8c1f80) - @seydx
- Refactor HardwareFramesContext to remove caching of device context wrapper (9557525) - @seydx
- Refactor Frame class to remove caching of hardware frames context (548a14b) - @seydx
- Refactor FormatContext to improve metadata handling and add synchronous seekFile method (f5b1ec9) - @seydx
- Cleanup (25ac36f) - @seydx
- Refactor Scaler to improve concurrency handling and memory management (b26e472) - @seydx
- Enhance Demuxer to handle multiple consumers and propagate read errors correctly (4706798) - @seydx
- Implement Mutex for serializing async operations in EncoderPool (135abe8) - @seydx
- Extend UnwrapNativeObject for safer object creation (970dda4) - @seydx
- Add GetInt64 method to AVOptionWrapper (529bb57) - @seydx
- Add thread-local constructor references to various binding classes (90d89b8) - @seydx
- Remove caching for hardware device context in FilterContext (90d6132) - @seydx
- Remove caching for hardware device and frames contexts in CodecContext (4eff83d) - @seydx
- Refactor Stream class to simplify metadata and attachedPic accessors, removing unnecessary caching (bd7efc6) - @seydx
- Enable COPY_OPAQUE flag in Decoder to ensure packet.opaque is copied to frame.opaque (8163167) - @seydx
- Enhance AsyncQueue to properly dispose items on closure to prevent resource leaks (29299e6) - @seydx
- Enhance FMP4Stream to improve box size handling, add maxQueuedFragments option, and ensure init segment consumers do not hang (d63837f) - @seydx
- Enhance pipeline processing to improve output handling and error propagation for multiple streams (51cbed8) - @seydx
- Refactor WhisperTranscriber to improve segment extraction and handle end-of-input flushing (090fd51) - @seydx
- Improve WebRTCStream to handle peer connection closure and renegotiation more gracefully (66c9bfa) - @seydx
- Refactor RTPStream to improve abort handling (6f010fe) - @seydx
- Enhance Muxer to handle write errors gracefully and improve resource management during cleanup (9aca43a) - @seydx
- Improve IOStream error handling and resource management during read/write operations (26510ca) - @seydx
- Fix timestamp rescaling to handle AV_NOPTS_VALUE correctly in FilterAPI (503af34) - @seydx
- Enhance Encoder to support better audio frame resampling and correct PTS handling (07476c4) - @seydx
- Refactor BitStreamFilterAPI to improve packet handling with retry logic for EAGAIN (7e54096) - @seydx
- Add pullPartial and pullPartialSync methods to AudioFrameBuffer for end-of-stream handling (a7667c8) - @seydx
- Update package and platform template to require Node.js version 22.18.0 or higher (169fb0a) - @seydx
- Add gyp consistency check script to ensure binding files are in sync (a7b26f0) - @seydx
- Refactor installation check logic to remove build from source functionality and improve error handling for missing prebuilt binaries (efbae2c) - @seydx
- Fix version pinning for platform binary packages (de928aa) - @seydx
- Enhance FFmpeg installation process with checksum verification and retry logic (c5a71f4) - @seydx
- Update deps (5661b6a) - @seydx
- chore: bump version to 6.2.0-beta.3 (add4ea1) - @seydx
- Improve ffmpeg download process with direct URL fallback (1ce95b3) - @seydx
- update (17e9d1a) - @seydx
- Release ffmpeg hash in workflow (0b0c130) - @seydx
- chore: bump version to 6.2.0-beta.2 (09817d0) - @seydx
- Update Changelog (8c4d452) - @seydx
- Update Readme (9c382e6) - @seydx
- Update timeBase setter to use IRational type (da73f1c) - @seydx
- Update typedoc (383551e) - @seydx
- chore: bump version to 6.2.0-beta.1 (5a041da) - @seydx
- New MediaFrameSource input for RTPStream/WebRTCStream/FMP4Stream — PiP over WebRTC & MSE, hw filter-complex graphs, FilterComplex EOF/teardown fixes (7dc7bdb) - @seydx
- Pin ffmpeg hash (9bb8152) - @seydx
- Update submodule (5990c18) - @seydx
- Update submodules (6908837) - @seydx
- Update submodules (70df374) - @seydx
- Bump js-yaml from 4.1.1 to 4.3.0 in /examples/electron/forge (#281) (eabc983) - @dependabot[bot]
📦 Packages
The following platform packages have been updated to v6.2.0-beta.7:
@seydx/node-av-darwin-arm64@6.2.0-beta.7@seydx/node-av-darwin-x64@6.2.0-beta.7@seydx/node-av-linux-arm64@6.2.0-beta.7@seydx/node-av-linux-x64@6.2.0-beta.7@seydx/node-av-win32-arm64-mingw@6.2.0-beta.7@seydx/node-av-win32-x64-mingw@6.2.0-beta.7@seydx/node-av-win32-arm64-msvc@6.2.0-beta.7@seydx/node-av-win32-x64-msvc@6.2.0-beta.7
v6.2.0-beta.6
⚠️ This is a pre-release version for testing. Install with:npm install node-av@beta
📋 All Changes since v6.1.1
- chore: bump version to 6.2.0-beta.6 (5fa607b) - @seydx
- Update deps (4e6694b) - @seydx
- Update tests (9b5d07f) - @seydx
- Add bitrate control for video encoding in FMP4Stream (23cee7f) - @seydx
- Add permissions for build job in workflow (67ad931) - @seydx
- Update Changelog (4f5b277) - @seydx
- Update macOS runner to use macos-26 and enhance Xcode selection logic (d0f29f4) - @seydx
- Update Xcode version handling and add cache cleanup job for stale FFmpeg caches (3644b0e) - @seydx
- chore: bump version to 6.2.0-beta.5 (c23e621) - @seydx
- Update Readme (2bff8b8) - @seydx
- Update tests (c52b0f7) - @seydx
- Enhance concurrency handling in FormatContext by adding shared mutex for safe access during FFmpeg operations (aecef74) - @seydx
- Update bindings (324e7c6) - @seydx
- Enhance error handling to prevent JS calls when not allowed (7d9a845) - @seydx
- Improve error handling in device listing workers to prevent JS calls when not allowed (4e77c20) - @seydx
- Optimize stream handling in Decoder class to prevent memory issues (7ca06cc) - @seydx
- chore: bump version to 6.2.0-beta.4 (1306ab2) - @seydx
- Update deps (aed5a03) - @seydx
- Update Changelog (ada70d1) - @seydx
- Format (692c865) - @seydx
- Add SHA256 checksum generation for release archives and update NPM publish command with provenance (01025d7) - @seydx
- Add FFMPEG_MSVC_PREBUILT_TAG and enhance workflow for reproducible builds (30788c0) - @seydx
- Update tests (1ba5dfd) - @seydx
- Add async operation guards in Fifo and FilterGraph to prevent use-after-free errors during resource management (dc332ce) - @seydx
- Add async operation guards in SoftwareResampleContext to prevent use-after-free errors during context replacement and cleanup (29b2fb6) - @seydx
- Add async operation guards in SoftwareScaleContext to prevent use-after-free errors during context replacement (8b7a45d) - @seydx
- Enhance Scaler to manage async operations and prevent use-after-free errors during cleanup (e52e77e) - @seydx
- Refactor HardwareFramesContext to improve memory management and async operation handling (3c71a78) - @seydx
- Refactor HardwareDeviceContext to manage device references more safely and simplify ownership handling (2e460fd) - @seydx
- Add async operation guards to prevent use-after-free in Frame operations (55040cd) - @seydx
- Add async operation guard and improve context management in IOContext (fc7afef) - @seydx
- Enhance InputFormatProbeBufferWorker with improved error handling and async operation management (432dfa7) - @seydx
- Add synchronous seek method and enhance error handling in FormatContext (ff3167d) - @seydx
- Add async operation guards and validation for frame objects in FilterContext (f85bfd9) - @seydx
- Add async operation guards and validation for audio frames in CodecContext (fc96340) - @seydx
- Add async operation guard to Free method in BitStreamFilterContext (b05eff8) - @seydx
- Enhance AudioFifo class with buffer validation and async operation handling (bfe2a75) - @seydx
- Add PromiseWorker and AsyncOpCounter classes for asynchronous operation management (7a7b72b) - @seydx
- Refactor Packet class to improve memory management and preserve metadata during data assignment (0405bf4) - @seydx
- Fix memory allocation for attached picture (30fdc53) - @seydx
- Update typings (a8c1f80) - @seydx
- Refactor HardwareFramesContext to remove caching of device context wrapper (9557525) - @seydx
- Refactor Frame class to remove caching of hardware frames context (548a14b) - @seydx
- Refactor FormatContext to improve metadata handling and add synchronous seekFile method (f5b1ec9) - @seydx
- Cleanup (25ac36f) - @seydx
- Refactor Scaler to improve concurrency handling and memory management (b26e472) - @seydx
- Enhance Demuxer to handle multiple consumers and propagate read errors correctly (4706798) - @seydx
- Implement Mutex for serializing async operations in EncoderPool (135abe8) - @seydx
- Extend UnwrapNativeObject for safer object creation (970dda4) - @seydx
- Add GetInt64 method to AVOptionWrapper (529bb57) - @seydx
- Add thread-local constructor references to various binding classes (90d89b8) - @seydx
- Remove caching for hardware device context in FilterContext (90d6132) - @seydx
- Remove caching for hardware device and frames contexts in CodecContext (4eff83d) - @seydx
- Refactor Stream class to simplify metadata and attachedPic accessors, removing unnecessary caching (bd7efc6) - @seydx
- Enable COPY_OPAQUE flag in Decoder to ensure packet.opaque is copied to frame.opaque (8163167) - @seydx
- Enhance AsyncQueue to properly dispose items on closure to prevent resource leaks (29299e6) - @seydx
- Enhance FMP4Stream to improve box size handling, add maxQueuedFragments option, and ensure init segment consumers do not hang (d63837f) - @seydx
- Enhance pipeline processing to improve output handling and error propagation for multiple streams (51cbed8) - @seydx
- Refactor WhisperTranscriber to improve segment extraction and handle end-of-input flushing (090fd51) - @seydx
- Improve WebRTCStream to handle peer connection closure and renegotiation more gracefully (66c9bfa) - @seydx
- Refactor RTPStream to improve abort handling (6f010fe) - @seydx
- Enhance Muxer to handle write errors gracefully and improve resource management during cleanup (9aca43a) - @seydx
- Improve IOStream error handling and resource management during read/write operations (26510ca) - @seydx
- Fix timestamp rescaling to handle AV_NOPTS_VALUE correctly in FilterAPI (503af34) - @seydx
- Enhance Encoder to support better audio frame resampling and correct PTS handling (07476c4) - @seydx
- Refactor BitStreamFilterAPI to improve packet handling with retry logic for EAGAIN (7e54096) - @seydx
- Add pullPartial and pullPartialSync methods to AudioFrameBuffer for end-of-stream handling (a7667c8) - @seydx
- Update package and platform template to require Node.js version 22.18.0 or higher (169fb0a) - @seydx
- Add gyp consistency check script to ensure binding files are in sync (a7b26f0) - @seydx
- Refactor installation check logic to remove build from source functionality and improve error handling for missing prebuilt binaries (efbae2c) - @seydx
- Fix version pinning for platform binary packages (de928aa) - @seydx
- Enhance FFmpeg installation process with checksum verification and retry logic (c5a71f4) - @seydx
- Update deps (5661b6a) - @seydx
- chore: bump version to 6.2.0-beta.3 (add4ea1) - @seydx
- Improve ffmpeg download process with direct URL fallback (1ce95b3) - @seydx
- update (17e9d1a) - @seydx
- Release ffmpeg hash in workflow (0b0c130) - @seydx
- chore: bump version to 6.2.0-beta.2 (09817d0) - @seydx
- Update Changelog (8c4d452) - @seydx
- Update Readme (9c382e6) - @seydx
- Update timeBase setter to use IRational type (da73f1c) - @seydx
- Update typedoc (383551e) - @seydx
- chore: bump version to 6.2.0-beta.1 (5a041da) - @seydx
- New MediaFrameSource input for RTPStream/WebRTCStream/FMP4Stream — PiP over WebRTC & MSE, hw filter-complex graphs, FilterComplex EOF/teardown fixes (7dc7bdb) - @seydx
- Pin ffmpeg hash (9bb8152) - @seydx
- Update submodule (5990c18) - @seydx
- Update submodules (6908837) - @seydx
- Update submodules (70df374) - @seydx
- Bump js-yaml from 4.1.1 to 4.3.0 in /examples/electron/forge (#281) (eabc983) - @dependabot[bot]
📦 Packages
The following platform packages have been updated to v6.2.0-beta.6:
@seydx/node-av-darwin-arm64@6.2.0-beta.6@seydx/node-av-darwin-x64@6.2.0-beta.6@seydx/node-av-linux-arm64@6.2.0-beta.6@seydx/node-av-linux-x64@6.2.0-beta.6@seydx/node-av-win32-arm64-mingw@6.2.0-beta.6@seydx/node-av-win32-x64-mingw@6.2.0-beta.6@seydx/node-av-win32-arm64-msvc@6.2.0-beta.6@seydx/node-av-win32-x64-msvc@6.2.0-beta.6
v6.2.0-beta.5
⚠️ This is a pre-release version for testing. Install with:npm install node-av@beta
📋 All Changes since v6.1.1
- Add permissions for build job in workflow (67ad931) - @seydx
- Update Changelog (4f5b277) - @seydx
- Update macOS runner to use macos-26 and enhance Xcode selection logic (d0f29f4) - @seydx
- Update Xcode version handling and add cache cleanup job for stale FFmpeg caches (3644b0e) - @seydx
- chore: bump version to 6.2.0-beta.5 (c23e621) - @seydx
- Update Readme (2bff8b8) - @seydx
- Update tests (c52b0f7) - @seydx
- Enhance concurrency handling in FormatContext by adding shared mutex for safe access during FFmpeg operations (aecef74) - @seydx
- Update bindings (324e7c6) - @seydx
- Enhance error handling to prevent JS calls when not allowed (7d9a845) - @seydx
- Improve error handling in device listing workers to prevent JS calls when not allowed (4e77c20) - @seydx
- Optimize stream handling in Decoder class to prevent memory issues (7ca06cc) - @seydx
- chore: bump version to 6.2.0-beta.4 (1306ab2) - @seydx
- Update deps (aed5a03) - @seydx
- Update Changelog (ada70d1) - @seydx
- Format (692c865) - @seydx
- Add SHA256 checksum generation for release archives and update NPM publish command with provenance (01025d7) - @seydx
- Add FFMPEG_MSVC_PREBUILT_TAG and enhance workflow for reproducible builds (30788c0) - @seydx
- Update tests (1ba5dfd) - @seydx
- Add async operation guards in Fifo and FilterGraph to prevent use-after-free errors during resource management (dc332ce) - @seydx
- Add async operation guards in SoftwareResampleContext to prevent use-after-free errors during context replacement and cleanup (29b2fb6) - @seydx
- Add async operation guards in SoftwareScaleContext to prevent use-after-free errors during context replacement (8b7a45d) - @seydx
- Enhance Scaler to manage async operations and prevent use-after-free errors during cleanup (e52e77e) - @seydx
- Refactor HardwareFramesContext to improve memory management and async operation handling (3c71a78) - @seydx
- Refactor HardwareDeviceContext to manage device references more safely and simplify ownership handling (2e460fd) - @seydx
- Add async operation guards to prevent use-after-free in Frame operations (55040cd) - @seydx
- Add async operation guard and improve context management in IOContext (fc7afef) - @seydx
- Enhance InputFormatProbeBufferWorker with improved error handling and async operation management (432dfa7) - @seydx
- Add synchronous seek method and enhance error handling in FormatContext (ff3167d) - @seydx
- Add async operation guards and validation for frame objects in FilterContext (f85bfd9) - @seydx
- Add async operation guards and validation for audio frames in CodecContext (fc96340) - @seydx
- Add async operation guard to Free method in BitStreamFilterContext (b05eff8) - @seydx
- Enhance AudioFifo class with buffer validation and async operation handling (bfe2a75) - @seydx
- Add PromiseWorker and AsyncOpCounter classes for asynchronous operation management (7a7b72b) - @seydx
- Refactor Packet class to improve memory management and preserve metadata during data assignment (0405bf4) - @seydx
- Fix memory allocation for attached picture (30fdc53) - @seydx
- Update typings (a8c1f80) - @seydx
- Refactor HardwareFramesContext to remove caching of device context wrapper (9557525) - @seydx
- Refactor Frame class to remove caching of hardware frames context (548a14b) - @seydx
- Refactor FormatContext to improve metadata handling and add synchronous seekFile method (f5b1ec9) - @seydx
- Cleanup (25ac36f) - @seydx
- Refactor Scaler to improve concurrency handling and memory management (b26e472) - @seydx
- Enhance Demuxer to handle multiple consumers and propagate read errors correctly (4706798) - @seydx
- Implement Mutex for serializing async operations in EncoderPool (135abe8) - @seydx
- Extend UnwrapNativeObject for safer object creation (970dda4) - @seydx
- Add GetInt64 method to AVOptionWrapper (529bb57) - @seydx
- Add thread-local constructor references to various binding classes (90d89b8) - @seydx
- Remove caching for hardware device context in FilterContext (90d6132) - @seydx
- Remove caching for hardware device and frames contexts in CodecContext (4eff83d) - @seydx
- Refactor Stream class to simplify metadata and attachedPic accessors, removing unnecessary caching (bd7efc6) - @seydx
- Enable COPY_OPAQUE flag in Decoder to ensure packet.opaque is copied to frame.opaque (8163167) - @seydx
- Enhance AsyncQueue to properly dispose items on closure to prevent resource leaks (29299e6) - @seydx
- Enhance FMP4Stream to improve box size handling, add maxQueuedFragments option, and ensure init segment consumers do not hang (d63837f) - @seydx
- Enhance pipeline processing to improve output handling and error propagation for multiple streams (51cbed8) - @seydx
- Refactor WhisperTranscriber to improve segment extraction and handle end-of-input flushing (090fd51) - @seydx
- Improve WebRTCStream to handle peer connection closure and renegotiation more gracefully (66c9bfa) - @seydx
- Refactor RTPStream to improve abort handling (6f010fe) - @seydx
- Enhance Muxer to handle write errors gracefully and improve resource management during cleanup (9aca43a) - @seydx
- Improve IOStream error handling and resource management during read/write operations (26510ca) - @seydx
- Fix timestamp rescaling to handle AV_NOPTS_VALUE correctly in FilterAPI (503af34) - @seydx
- Enhance Encoder to support better audio frame resampling and correct PTS handling (07476c4) - @seydx
- Refactor BitStreamFilterAPI to improve packet handling with retry logic for EAGAIN (7e54096) - @seydx
- Add pullPartial and pullPartialSync methods to AudioFrameBuffer for end-of-stream handling (a7667c8) - @seydx
- Update package and platform template to require Node.js version 22.18.0 or higher (169fb0a) - @seydx
- Add gyp consistency check script to ensure binding files are in sync (a7b26f0) - @seydx
- Refactor installation check logic to remove build from source functionality and improve error handling for missing prebuilt binaries (efbae2c) - @seydx
- Fix version pinning for platform binary packages (de928aa) - @seydx
- Enhance FFmpeg installation process with checksum verification and retry logic (c5a71f4) - @seydx
- Update deps (5661b6a) - @seydx
- chore: bump version to 6.2.0-beta.3 (add4ea1) - @seydx
- Improve ffmpeg download process with direct URL fallback (1ce95b3) - @seydx
- update (17e9d1a) - @seydx
- Release ffmpeg hash in workflow (0b0c130) - @seydx
- chore: bump version to 6.2.0-beta.2 (09817d0) - @seydx
- Update Changelog (8c4d452) - @seydx
- Update Readme (9c382e6) - @seydx
- Update timeBase setter to use IRational type (da73f1c) - @seydx
- Update typedoc (383551e) - @seydx
- chore: bump version to 6.2.0-beta.1 (5a041da) - @seydx
- New MediaFrameSource input for RTPStream/WebRTCStream/FMP4Stream — PiP over WebRTC & MSE, hw filter-complex graphs, FilterComplex EOF/teardown fixes (7dc7bdb) - @seydx
- Pin ffmpeg hash (9bb8152) - @seydx
- Update submodule (5990c18) - @seydx
- Update submodules (6908837) - @seydx
- Update submodules (70df374) - @seydx
- Bump js-yaml from 4.1.1 to 4.3.0 in /examples/electron/forge (#281) (eabc983) - @dependabot[bot]
📦 Packages
The following platform packages have been updated to v6.2.0-beta.5:
@seydx/node-av-darwin-arm64@6.2.0-beta.5@seydx/node-av-darwin-x64@6.2.0-beta.5@seydx/node-av-linux-arm64@6.2.0-beta.5@seydx/node-av-linux-x64@6.2.0-beta.5@seydx/node-av-win32-arm64-mingw@6.2.0-beta.5@seydx/node-av-win32-x64-mingw@6.2.0-beta.5@seydx/node-av-win32-arm64-msvc@6.2.0-beta.5@seydx/node-av-win32-x64-msvc@6.2.0-beta.5
v6.2.0-beta.4
⚠️ This is a pre-release version for testing. Install with:npm install node-av@beta
📋 All Changes since v6.1.1
- chore: bump version to 6.2.0-beta.4 (1306ab2) - @seydx
- Update deps (aed5a03) - @seydx
- Update Changelog (ada70d1) - @seydx
- Format (692c865) - @seydx
- Add SHA256 checksum generation for release archives and update NPM publish command with provenance (01025d7) - @seydx
- Add FFMPEG_MSVC_PREBUILT_TAG and enhance workflow for reproducible builds (30788c0) - @seydx
- Update tests (1ba5dfd) - @seydx
- Add async operation guards in Fifo and FilterGraph to prevent use-after-free errors during resource management (dc332ce) - @seydx
- Add async operation guards in SoftwareResampleContext to prevent use-after-free errors during context replacement and cleanup (29b2fb6) - @seydx
- Add async operation guards in SoftwareScaleContext to prevent use-after-free errors during context replacement (8b7a45d) - @seydx
- Enhance Scaler to manage async operations and prevent use-after-free errors during cleanup (e52e77e) - @seydx
- Refactor HardwareFramesContext to improve memory management and async operation handling (3c71a78) - @seydx
- Refactor HardwareDeviceContext to manage device references more safely and simplify ownership handling (2e460fd) - @seydx
- Add async operation guards to prevent use-after-free in Frame operations (55040cd) - @seydx
- Add async operation guard and improve context management in IOContext (fc7afef) - @seydx
- Enhance InputFormatProbeBufferWorker with improved error handling and async operation management (432dfa7) - @seydx
- Add synchronous seek method and enhance error handling in FormatContext (ff3167d) - @seydx
- Add async operation guards and validation for frame objects in FilterContext (f85bfd9) - @seydx
- Add async operation guards and validation for audio frames in CodecContext (fc96340) - @seydx
- Add async operation guard to Free method in BitStreamFilterContext (b05eff8) - @seydx
- Enhance AudioFifo class with buffer validation and async operation handling (bfe2a75) - @seydx
- Add PromiseWorker and AsyncOpCounter classes for asynchronous operation management (7a7b72b) - @seydx
- Refactor Packet class to improve memory management and preserve metadata during data assignment (0405bf4) - @seydx
- Fix memory allocation for attached picture (30fdc53) - @seydx
- Update typings (a8c1f80) - @seydx
- Refactor HardwareFramesContext to remove caching of device context wrapper (9557525) - @seydx
- Refactor Frame class to remove caching of hardware frames context (548a14b) - @seydx
- Refactor FormatContext to improve metadata handling and add synchronous seekFile method (f5b1ec9) - @seydx
- Cleanup (25ac36f) - @seydx
- Refactor Scaler to improve concurrency handling and memory management (b26e472) - @seydx
- Enhance Demuxer to handle multiple consumers and propagate read errors correctly (4706798) - @seydx
- Implement Mutex for serializing async operations in EncoderPool (135abe8) - @seydx
- Extend UnwrapNativeObject for safer object creation (970dda4) - @seydx
- Add GetInt64 method to AVOptionWrapper (529bb57) - @seydx
- Add thread-local constructor references to various binding classes (90d89b8) - @seydx
- Remove caching for hardware device context in FilterContext (90d6132) - @seydx
- Remove caching for hardware device and frames contexts in CodecContext (4eff83d) - @seydx
- Refactor Stream class to simplify metadata and attachedPic accessors, removing unnecessary caching (bd7efc6) - @seydx
- Enable COPY_OPAQUE flag in Decoder to ensure packet.opaque is copied to frame.opaque (8163167) - @seydx
- Enhance AsyncQueue to properly dispose items on closure to prevent resource leaks (29299e6) - @seydx
- Enhance FMP4Stream to improve box size handling, add maxQueuedFragments option, and ensure init segment consumers do not hang (d63837f) - @seydx
- Enhance pipeline processing to improve output handling and error propagation for multiple streams (51cbed8) - @seydx
- Refactor WhisperTranscriber to improve segment extraction and handle end-of-input flushing (090fd51) - @seydx
- Improve WebRTCStream to handle peer connection closure and renegotiation more gracefully (66c9bfa) - @seydx
- Refactor RTPStream to improve abort handling (6f010fe) - @seydx
- Enhance Muxer to handle write errors gracefully and improve resource management during cleanup (9aca43a) - @seydx
- Improve IOStream error handling and resource management during read/write operations (26510ca) - @seydx
- Fix timestamp rescaling to handle AV_NOPTS_VALUE correctly in FilterAPI (503af34) - @seydx
- Enhance Encoder to support better audio frame resampling and correct PTS handling (07476c4) - @seydx
- Refactor BitStreamFilterAPI to improve packet handling with retry logic for EAGAIN (7e54096) - @seydx
- Add pullPartial and pullPartialSync methods to AudioFrameBuffer for end-of-stream handling (a7667c8) - @seydx
- Update package and platform template to require Node.js version 22.18.0 or higher (169fb0a) - @seydx
- Add gyp consistency check script to ensure binding files are in sync (a7b26f0) - @seydx
- Refactor installation check logic to remove build from source functionality and improve error handling for missing prebuilt binaries (efbae2c) - @seydx
- Fix version pinning for platform binary packages (de928aa) - @seydx
- Enhance FFmpeg installation process with checksum verification and retry logic (c5a71f4) - @seydx
- Update deps (5661b6a) - @seydx
- chore: bump version to 6.2.0-beta.3 (add4ea1) - @seydx
- Improve ffmpeg download process with direct URL fallback (1ce95b3) - @seydx
- update (17e9d1a) - @seydx
- Release ffmpeg hash in workflow (0b0c130) - @seydx
- chore: bump version to 6.2.0-beta.2 (09817d0) - @seydx
- Update Changelog (8c4d452) - @seydx
- Update Readme (9c382e6) - @seydx
- Update timeBase setter to use IRational type (da73f1c) - @seydx
- Update typedoc (383551e) - @seydx
- chore: bump version to 6.2.0-beta.1 (5a041da) - @seydx
- New MediaFrameSource input for RTPStream/WebRTCStream/FMP4Stream — PiP over WebRTC & MSE, hw filter-complex graphs, FilterComplex EOF/teardown fixes (7dc7bdb) - @seydx
- Pin ffmpeg hash (9bb8152) - @seydx
- Update submodule (5990c18) - @seydx
- Update submodules (6908837) - @seydx
- Update submodules (70df374) - @seydx
- Bump js-yaml from 4.1.1 to 4.3.0 in /examples/electron/forge (#281) (eabc983) - @dependabot[bot]
📦 Packages
The following platform packages have been updated to v6.2.0-beta.4:
@seydx/node-av-darwin-arm64@6.2.0-beta.4@seydx/node-av-darwin-x64@6.2.0-beta.4@seydx/node-av-linux-arm64@6.2.0-beta.4@seydx/node-av-linux-x64@6.2.0-beta.4@seydx/node-av-win32-arm64-mingw@6.2.0-beta.4@seydx/node-av-win32-x64-mingw@6.2.0-beta.4@seydx/node-av-win32-arm64-msvc@6.2.0-beta.4@seydx/node-av-win32-x64-msvc@6.2.0-beta.4
v6.2.0-beta.3
⚠️ This is a pre-release version for testing. Install with:npm install node-av@beta
📋 All Changes since v6.1.1
- chore: bump version to 6.2.0-beta.3 (add4ea1) - @seydx
- Improve ffmpeg download process with direct URL fallback (1ce95b3) - @seydx
- update (17e9d1a) - @seydx
- Release ffmpeg hash in workflow (0b0c130) - @seydx
- chore: bump version to 6.2.0-beta.2 (09817d0) - @seydx
- Update Changelog (8c4d452) - @seydx
- Update Readme (9c382e6) - @seydx
- Update timeBase setter to use IRational type (da73f1c) - @seydx
- Update typedoc (383551e) - @seydx
- chore: bump version to 6.2.0-beta.1 (5a041da) - @seydx
- New MediaFrameSource input for RTPStream/WebRTCStream/FMP4Stream — PiP over WebRTC & MSE, hw filter-complex graphs, FilterComplex EOF/teardown fixes (7dc7bdb) - @seydx
- Pin ffmpeg hash (9bb8152) - @seydx
- Update submodule (5990c18) - @seydx
- Update submodules (6908837) - @seydx
- Update submodules (70df374) - @seydx
- Bump js-yaml from 4.1.1 to 4.3.0 in /examples/electron/forge (#281) (eabc983) - @dependabot[bot]
📦 Packages
The following platform packages have been updated to v6.2.0-beta.3:
@seydx/node-av-darwin-arm64@6.2.0-beta.3@seydx/node-av-darwin-x64@6.2.0-beta.3@seydx/node-av-linux-arm64@6.2.0-beta.3@seydx/node-av-linux-x64@6.2.0-beta.3@seydx/node-av-win32-arm64-mingw@6.2.0-beta.3@seydx/node-av-win32-x64-mingw@6.2.0-beta.3@seydx/node-av-win32-arm64-msvc@6.2.0-beta.3@seydx/node-av-win32-x64-msvc@6.2.0-beta.3
v6.1.1
Added
Demuxer.interrupt()aborts an in-progress blocking read (e.g.av_read_frameon a quiet RTSP/network source) without freeing the demuxer, so an active pipeline can drain and shut down beforeclose().PipelineControl.stop()now calls it on the source demuxer(s) automatically.
Fixed
RTPStream/FMP4Stream/pipeline().stop()could hang on teardown of a live source.stop()awaited the pipeline's completion before closing the input, but a blocking read on a quiet RTSP/network source only unblocks when the input is interrupted — so completion waited for the read while the read waited to be unblocked (deadlock).PipelineControl.stop()now interrupts the source demuxer's read (via the newDemuxer.interrupt()), so the pipeline drains and completion resolves before close. A related teardown deadlock in the per-stream backpressure loop (a full queue whose consumer had already stopped starved the other streams) is fixed too.- Aborting a
Demuxer'ssignalnow cancels an in-progress blocking read. The abort handler previously only flagged the read loop to stop, leaving the demux thread parked inav_read_frame()until data happened to arrive; it now interrupts the read so cancellation takes effect immediately.
📋 All Changes since v6.1.0
- chore: bump version to 6.1.1 (6c533d9) - @seydx
- Update Changelog (5522038) - @seydx
- Update deps (6ba4c83) - @seydx
- chore: bump version to 6.1.1-beta.1 (d5a0754) - @seydx
- Update Changelog (2a02df7) - @seydx
- Add support for interrupting Demuxer sources in PipelineControl to prevent blocking reads (eb9923c) - @seydx
- Add interrupt method to FormatContext for handling blocking I/O operations (6482790) - @seydx
- Enhance Demuxer with consumer management for packet queues and add interrupt method (565edfd) - @seydx
📦 Packages
The following platform packages have been updated to v6.1.1:
@seydx/node-av-darwin-arm64@6.1.1@seydx/node-av-darwin-x64@6.1.1@seydx/node-av-linux-arm64@6.1.1@seydx/node-av-linux-x64@6.1.1@seydx/node-av-win32-arm64-mingw@6.1.1@seydx/node-av-win32-x64-mingw@6.1.1@seydx/node-av-win32-arm64-msvc@6.1.1@seydx/node-av-win32-x64-msvc@6.1.1
v6.1.0
Added
-
Typed
context/graphfield bags and aconfigurehook onEncoder,Decoder,FilterAPI,FilterComplexAPI,MuxerandDemuxer.context(encoder/decoder/muxer) andgraph(filters) are typed bags of the writable fields on the underlying native object (e.g.context: { bitRate: '5M', gopSize: 60, colorPrimaries: AVCOL_PRI_BT2020 }); rate-control fields still accept'5M'-style strings.configure(ctx | graph | fmt)is a callback for what the bag cannot express — flags viasetFlags, methods, or setter-only forms such as a'hvc1'FourCC string for-tag:v hvc1. Both run right before the object is opened/finalized (avcodec_open2,avfilter_graph_config,avformat_write_header), the bag first; for the muxer after the source metadata/disposition are copied, so values set there take precedence. TheDemuxerexposes onlyconfigure(fmt), called afteravformat_open_input/avformat_find_stream_info.const encoder = await Encoder.create(FF_ENCODER_LIBX265, { decoder, context: { bitRate: '5M', gopSize: 60 }, // typed, declarative field bag configure: (ctx) => { ctx.codecTag = 'hvc1'; }, // imperative escape (-tag:v hvc1) });
-
HardwareContext.auto()accepts apreferoption to prioritise specific hardware type(s) over the platform default order, e.g.auto({ prefer: AV_HWDEVICE_TYPE_VAAPI })to pick VAAPI ahead of QSV on Intel. Preferred types are tested first (and kept only if available), then the usual platform fallback applies. -
Bitstream filter extradata is now reflected in the output parameters. Filters that adapt container framing (
aac_adtstoasc,extract_extradata,dump_extra,*_mp4toannexb) emit the resulting global headers as packet side data rather than onpar_out.BitStreamFilterAPI.outputCodecParametersnow folds that side data in, so a stream copy that relies on it (includingMuxer'sbsfoption) writes a header with the correct codec configuration.
Changed
- Synced FFmpeg with the latest master (~380 upstream commits) — numerous bug fixes, stability and performance improvements. Highlights relevant to node-av users:
- Security hardening — ~29 overflow / bounds fixes across decoders, demuxers and filters
- swscale PAL8 — palette video handled by the new ops scaler engine
- AMF — zero-copy host memory mapping, HDR/colour metadata propagation,
high_qualityencoder preset - NVENC — AV1 hierarchical B-frame reference mode
- D3D11VA — native P016 (10/16-bit YUV 4:2:0) hardware decoding on Windows
- ONNX Runtime DNN backend — GPU inference for ML-driven filters (super-resolution, denoise, …)
- Dolby Vision — RPU detection across all NALs (better DoVi interop)
- Fragmented-MP4 / DASH / HLS correctness fixes
- Faster decode/encode on x86 (H.264 AVX2 intra-prediction, me_cmp SSSE3), AArch64 NEON and RISC-V RVV
- Regenerated constants, encoders, and decoders from updated FFmpeg headers
Deprecated
- Raw codec/graph field options moved to the
context/graphbag.Encoder'sbitrate/minRate/maxRate/bufSize(→context: { bitRate, rcMinRate, rcMaxRate, rcBufferSize }, still accepting'5M'-style strings),gopSize,maxBFrames,threadCount,threadType;Decoder'sthreadCount/threadType; andFilterAPI/FilterComplexAPI'sthreads(→graph: { nbThreads }),scaleSwsOpts,audioResampleOpts. They still work — set them via the bag instead.
Fixed
- Rotation / HDR side data was lost when transcoding. The muxer copied a stream's
coded_side_data(display matrix / rotation, HDR mastering display & content light level) only on stream copy, not when re-encoding — so a portrait phone video would play sideways and HDR metadata would vanish after a transcode. The encoder output path now copies it too, matching the stream-copy behaviour. - Demuxer dropped packets under backpressure in multi-stream pipelines (#263). When a single demuxer fed two consumers draining at different rates (e.g. a slow video chain alongside a fast audio chain), the demux thread discarded packets for whichever stream's queue was momentarily full instead of waiting for it to drain. This lost video reference frames and corrupted decoding (
missing reference picture,mmco: unref short failure,co located POCs unavailable). The read loop now applies per-stream backpressure and is paced by the slowest consumer, so no packet is dropped. - worker_threads safety. Native class constructor references are now
thread_local, so node-av objects can be created and used across multiple worker threads without crashing. - Cross-compiled Windows installs selected the wrong toolchain (#260). A cross install (
npm install --os=win32 --cpu=x64) incorrectly picked the MinGW FFmpeg build; it now defaults to the standard MSVC build (pass--libc=mingwto override). See the new Cross-Platform Packaging section in the README. Scalerfailed on QSV hardware frames (Scaler: filter produced no frame). The Intel QSV scaler (vpp_qsv) buffers internally and does not emit a frame synchronously after a single input, so the scaler's process-one-receive-one path got nothing back. It now flushes the graph to drain the pending frame and rebuilds it for the next call. Zero-latency hardware scalers (scale_vaapi,scale_vt) are unaffected.
📋 All Changes since v6.0.0
- chore: bump version to 6.1.0 (a5f5d67) - @seydx
- Update Changelog (f84eec3) - @seydx
- Update deps (6360844) - @seydx
- chore: bump version to 6.1.0-beta.3 (b41a849) - @seydx
- Update Changelog (35c3f61) - @seydx
- Change preference order for hardware types in HardwareContext (4dbe3c6) - @seydx
- Add prefer option to HardwareContext.auto for prioritizing hardware types (4ac0e61) - @seydx
- Update FFmpeg (e6fba7b) - @seydx
- Update FFmpeg (dcd2363) - @seydx
- Update Changelog (9c3767a) - @seydx
- Update constants (4dc9e94) - @seydx
- Update FFmpeg (4785a60) - @seydx
- chore: bump version to 6.1.0-beta.2 (ef444b6) - @seydx
- update deps (1d3e0dd) - @seydx
- Update Changelog (cdd701d) - @seydx
- Update examples (cfe7813) - @seydx
- Improve Scaler class to handle frame processing edge cases and add graph eviction (447b889) - @seydx
- Update deps (71b1715) - @seydx
- Update typings and docs (3935eb0) - @seydx
- chore: bump version to 6.1.0-beta.1 (b4d903b) - @seydx
- Update release scripts (2fa426a) - @seydx
- Update Changelog (266c7de) - @seydx
- Update Examples (8d98e4d) - @seydx
- Add configuration callback for Demuxer options to customize format context (721e92c) - @seydx
- Add context configuration options for FilterAPI and enhance graph setup handling (0499d28) - @seydx
- Add context configuration options for Encoder and enhance codec context handling (f1cce59) - @seydx
- Add context configuration options for Decoder and enhance codec context handling (d2b2c5d) - @seydx
- Add context configuration options for Muxer and enhance coded side data handling (61133ef) - @seydx
- Init context options (8ea52c0) - @seydx
- chore: bump version to 6.0.1-beta.6 (570d8f1) - @seydx
- Update Changelog (a9ff3e3) - @seydx
- Update examples (398970e) - @seydx
- Update deps (3202621) - @seydx
- Fix demuxer to prevent packet drops under backpressure in multi-stream pipelines (#263) (c13fb91) - @seydx
- chore: bump version to 6.0.1-beta.5 (5bd2f85) - @seydx
- Improve error messaging for unsupported audio formats in Encoder (8098830) - @seydx
- chore: bump version to 6.0.1-beta.4 (7f873f8) - @seydx
- Improve pull-based reading logic for streams in IOStream (b5dbd97) - @seydx
- chore: bump version to 6.0.1-beta.3 (4854885) - @seydx
- Add Cross-Platform Packaging section to README and improve toolchain detection in utils (42cb1bc) - @seydx
- Update dependabot (5ecebfc) - @seydx
- chore: bump version to 6.0.1-beta.2 (8373d26) - @seydx
- Update deps (e71ad4b) - @seydx
- Add support for new extradata in filtered packets and update bsf tests (7d1acfa) - @seydx
- chore: bump version to 6.0.1-beta.1 (9064954) - @seydx
- Update deps (64a3c14) - @seydx
- Make class constructors thread_local for worker_threads safety (d66feba) - @seydx
- Add stale workflow (358674f) - @seydx
- Update copyright year and author email in LICENSE and package.json (2cf8741) - @seydx
- Fix type reference for sharp.Channels (2245476) - @seydx
- Add comments to Windows binary selection logic (73e4759) - @seydx
- Update deps (eca3717) - @seydx
- Update Readme (19326ae) - @seydx
- Update Socket Badge link in README.md (1846e17) - @seydx
- Add Socket Badge to README (a4954e5) - @seydx
📦 Packages
The following platform packages have been updated to v6.1.0:
@seydx/node-av-darwin-arm64@6.1.0@seydx/node-av-darwin-x64@6.1.0@seydx/node-av-linux-arm64@6.1.0@seydx/node-av-linux-x64@6.1.0@seydx/node-av-win32-arm64-mingw@6.1.0@seydx/node-av-win32-x64-mingw@6.1.0@seydx/node-av-win32-arm64-msvc@6.1.0@seydx/node-av-win32-x64-msvc@6.1.0
v6.0.0
Breaking Changes
WebRTC / RTP moved to the node-av/webrtc subpath
WebRTCStream, RTPStream, and the re-exported werift primitives (RTCPeerConnection, MediaStreamTrack, RtpPacket, RTCSessionDescription, RTCIceCandidate, RTCRtpCodecParameters, PeerConfig) are no longer exported from the main package. They now live under the dedicated node-av/webrtc entry point. This removes the werift dependency chain from the core import graph.
werift is now an optional dependency — only required when using node-av/webrtc.
Migration:
// Before
import { WebRTCStream, RTPStream, RTCPeerConnection } from 'node-av';
// After
import { WebRTCStream, RTPStream, RTCPeerConnection } from 'node-av/webrtc';FilterPreset thin wrappers replaced by the generic filter()
The hand-written single-filter convenience methods on FilterPreset (e.g. fps, rotate, fade, volume, drawtext, trim, concat, highpass, aresample, …) were removed in favor of the type-safe generic filter(name, options), which covers every FFmpeg filter with autocomplete and validation. The hardware-aware / auto-mapping methods (scale, crop, overlay, tonemap, deinterlace, format, aformat, whisper, …) and custom() remain.
Migration:
// Before
FilterPreset.chain().fps(30).drawtext('hi', { x: 10 }).build();
// After
FilterPreset.chain()
.filter('fps', { fps: 30 })
.filter('drawtext', { text: 'hi', x: 10 })
.build();Decoder hwaccelOutputFormat replaced by rescale
The hwaccelOutputFormat decoder option was removed in favor of the new rescale option (see Added), which both downloads hardware frames to system memory and guarantees the final pixel format/size in one step. Unlike hwaccelOutputFormat (whose value had to be a format the hardware could transfer to directly — typically nv12), rescale: { pixelFormat } accepts any pixel format and converts on the CPU after the download, so it actually delivers the format you ask for across both hardware- and software-decoded streams.
Migration:
// Before
const decoder = await Decoder.create(stream, { hardware: hw, hwaccelOutputFormat: AV_PIX_FMT_YUV420P });
// After
const decoder = await Decoder.create(stream, { hardware: hw, rescale: { pixelFormat: AV_PIX_FMT_YUV420P } });Added
Encoder audio auto-resampling (autoResample)
New autoResample option (default false) on Encoder.create()/createSync(). When enabled, the encoder transparently converts incoming audio to the nearest codec-supported sample rate, sample format, and channel layout — e.g. a 96 kHz microphone feeding libmp3lame (which only supports up to 48 kHz), or packed s16 feeding AAC (which needs planar fltp). When disabled, an unsupported input now raises a descriptive error naming the mismatch.
Encoder video auto pixel-format conversion (autoFormat)
New autoFormat option (default false) on Encoder.create()/createSync() — the video counterpart of autoResample. When enabled, the encoder transparently converts incoming video to a codec-supported pixel format via swscale — e.g. rgb24 or yuv444p feeding libx264. The target is chosen with avcodec_find_best_pix_fmt_of_list, so it keeps as much of the source as possible (an RGB input picks yuv444p over yuv420p) instead of always falling back to the codec's first format. Resolution is never changed (the encoder already adopts the frame's dimensions) and hardware frames are left untouched (their format is negotiated through the hardware frames context). When disabled, an unsupported input now raises a descriptive error naming the mismatch. Also adds the avcodecFindBestPixFmtOfList() utility.
Decoder audio output resampling (resample)
New resample option on Decoder.create()/createSync() — the audio mirror of the encoder's autoResample and of rescale for video. When set, decoded audio frames are transparently converted to the requested { sampleRate, sampleFormat, channelLayout } (any omitted field keeps the decoded value, and conversion is skipped when the source already matches). Unspecified PCM channel layouts are normalized to their canonical native layout automatically. Useful when a capture device delivers a rate you cannot control (e.g. avfoundation ignoring a microphone sample-rate request) and every downstream stage should still receive the rate you asked for. Also adds the avChannelLayoutDefault() utility.
Decoder video output rescaling (rescale)
New rescale option on Decoder.create()/createSync() — the video mirror of resample. When set, decoded video frames are transparently converted to the requested { width, height, pixelFormat } (any omitted field keeps the decoded value, and conversion is skipped when the source already matches). Hardware frames are automatically transferred to a supported software format first and then converted, so a single option normalizes both hardware- and software-decoded streams; software frames are converted directly. Hardware frames are left on the GPU (zero-copy) when rescale is not set. This replaces the former hwaccelOutputFormat (see Breaking Changes) — rescale: { pixelFormat } both downloads hardware frames and guarantees the format. Useful to normalize a heterogeneous set of sources (e.g. RTSP cameras each delivering a different pixel format) so every downstream stage receives a uniform format/size.
Scaler — hardware-aware image scale / crop / convert / encode
High-level Scaler (from node-av/api) that scales, crops, and converts decoded frames to raw pixel buffers or JPEG/PNG. Pools its contexts, GPU graphs, and encoders for the detection/thumbnail/snapshot workload; hardware frames are processed on the GPU.
EncoderPool — pooled image encoders
EncoderPool (from node-av/api) reuses image encoders across recurring resolutions. Adds Encoder.encodeOne() / encodeOneSync() for one-shot single-frame encodes.
Frame.exportIOSurface() — zero-copy IOSurface export (macOS)
Exports the IOSurfaceRef backing a decoded VideoToolbox frame as an 8-byte pointer Buffer — the inverse of Frame.fromIOSurface(). Enables zero-copy interop with Metal / CoreVideo (e.g. feeding hardware-decoded frames into a GPU compositor) without a GPU → CPU readback.
const handle = frame.exportIOSurface();
if (handle) {
// Pass to a Metal-based compositor; keep `frame` alive while using the handle.
}Returns null for non-VideoToolbox frames and on non-macOS platforms. The IOSurface stays owned by the frame's CVPixelBuffer, so the frame must be kept alive while the handle is in use.
Type-safe codec options
Encoder.create() / createSync() and Decoder.create() / createSync() now infer the codec-specific private options from the codec constant. When you pass a branded constant (e.g. FF_ENCODER_LIBX264), the options field is strongly typed to that codec's known options — with editor autocomplete, and compile-time errors for unknown keys or invalid enum values:
// Autocomplete + validation for libx264's private options
await Encoder.create(FF_ENCODER_LIBX264, {
options: { preset: 'fast', crf: 23 },
});
await Encoder.create(FF_ENCODER_H264_VIDEOTOOLBOX, {
options: { coder: 'nope' }, // ✗ Type error: not assignable to 'cavlc' | 'vlc' | 'cabac' | 'ac'
});The option types are generated from FFmpeg's AVOption metadata, covering every codec known to FFmpeg. Each codec's bag also includes the generic AVCodecContext options (e.g. strict, flags, bf), with the codec's private options taking precedence on name clashes (profile, level). Codecs passed by AVCodecID, by Codec instance, or as a plain string still accept a loose option bag, so existing dynamic usage is unchanged. Combinable flag options (e.g. mpv_flags) suggest the known tokens while still accepting any combined string ('+a+b').
Type-safe container & bitstream-filter options
The same generated-from-source typing now extends to containers and bitstream filters:
Muxer.open() / openSync() and Demuxer.open() / openSync() — when format is given as a literal (e.g. 'mp4', 'mov'), the options bag is typed to that (de)muxer's private options plus the generic AVFormatContext options, with autocomplete for keys and enum/flag values:
await Muxer.open('out.mp4', {
format: 'mp4',
options: { movflags: '+faststart+frag_keyframe' }, // autocomplete of mov flags
});The format field itself autocompletes every available muxer/demuxer name (the generated MuxerFormat / DemuxerFormat unions, covering libavformat and libavdevice), while still accepting any string. Because container option bags also legitimately carry protocol and codec-child options (e.g. rtsp_transport on a demuxer), unknown keys remain accepted — typing is additive autocomplete, never a hard gate.
BitStreamFilterAPI.create() — the filter name autocompletes every available bitstream filter (the generated BsfName union), and the options bag is strongly typed to the named filter's options (strict, like codecs), so h264_metadata's aud?: 'pass' | 'insert' | 'remove' is validated at compile time. Unknown names still pass through via the (string & {}) fallback.
Formats/filters referenced dynamically (no literal name) still accept a loose option bag.
Bitstream filters in transcode pipelines
BitStreamFilterAPI.create() now accepts a Stream (copy), an Encoder (transcode), or another filter (chain) as its input source, and initializes lazily on the first packet. This makes coded-bitstream filters like h264_metadata work after a re-encode the same way the FFmpeg CLI does — the filter derives its parameters from the encoder's output once it is open, and the muxer writes the filter's output parameters to the cont...
v5.2.4
📋 All Changes since v5.2.3
- chore: bump version to 5.2.4 (d8ac179) - @seydx
- Update deps (5a57713) - @seydx
- Drop postinstall extraction from platform packages (ba824b2) - @seydx
- chore: bump version to 5.2.4-beta.1 (bc9a85d) - @seydx
- Update deps (ae37304) - @seydx
- Fix: Refactor codec name handling in decoders and encoders (656df80) - @seydx
- Bump updates from 17.15.5 to 17.15.7 (#218) (3bd882d) - @dependabot[bot]
- Bump node-gyp from 12.2.0 to 12.3.0 (#217) (8b34570) - @dependabot[bot]
- Bump @typescript-eslint/parser from 8.58.2 to 8.59.0 (#216) (8c16e20) - @dependabot[bot]
- Bump typescript-eslint from 8.58.2 to 8.59.0 (#215) (d36948e) - @dependabot[bot]
- Bump updates from 17.15.4 to 17.15.5 (#214) (e61c1ba) - @dependabot[bot]
- Update FFmpeg badge version in README (3d48362) - @seydx
- Bump prettier from 3.8.2 to 3.8.3 (#213) (b4c17ba) - @dependabot[bot]
- Bump updates from 17.15.3 to 17.15.4 (#212) (59ea0d7) - @dependabot[bot]
📦 Packages
The following platform packages have been updated to v5.2.4:
@seydx/node-av-darwin-arm64@5.2.4@seydx/node-av-darwin-x64@5.2.4@seydx/node-av-linux-arm64@5.2.4@seydx/node-av-linux-x64@5.2.4@seydx/node-av-win32-arm64-mingw@5.2.4@seydx/node-av-win32-x64-mingw@5.2.4@seydx/node-av-win32-arm64-msvc@5.2.4@seydx/node-av-win32-x64-msvc@5.2.4
v5.2.3
Changed
- Updated FFmpeg with new encoders, JPEG-XS support, swscale Vulkan support, and more
- Regenerated constants, encoders, and decoders from updated FFmpeg headers
Fixed
- Various bug fixes and stability improvements
- Updated dependencies
📋 All Changes since v5.2.2
- chore: bump version to 5.2.3 (5051d11) - @seydx
- Update Changelog (a2b47a2) - @seydx
- update deps (eb7b42d) - @seydx
- Update ffmpeg (dcb02de) - @seydx
- Update GitHub Actions (c3be4e0) - @seydx
- Update ffmpeg (5f3c827) - @seydx
- Add new video encoders and update constants (5ba037a) - @seydx
- Update ffmpeg (d8524c4) - @seydx
- Update ffmpeg (6b87a93) - @seydx
- Update dependabot (9873cd2) - @seydx
- Update dependabot (cb62e9e) - @seydx
- update deps (96f6b2e) - @seydx
- Bump minimatch from 3.1.2 to 3.1.5 in /examples/electron/builder (#180) (28866bf) - @dependabot[bot]
- Bump minimatch in /examples/electron/forge (#182) (5d097aa) - @dependabot[bot]
- Update deps (299a377) - @seydx
- Add codec string and decoder configuration record methods to CodecParameters (f8870dc) - @seydx
- Bump rollup from 4.57.0 to 4.59.0 in /examples/electron/forge (#176) (7dd1c45) - @dependabot[bot]
- Bump rollup from 4.57.0 to 4.59.0 (#175) (5c2d879) - @dependabot[bot]
- Bump eslint-plugin-jsdoc from 62.7.0 to 62.7.1 (#174) (dbc9f8f) - @dependabot[bot]
- chore: bump version to 5.2.3-beta.1 (8b7db9b) - @seydx
- Update ffmpeg (d3d395f) - @seydx
- Enhance RTP muxer options for video and audio streams (2362d83) - @seydx
- Bump tar from 7.5.7 to 7.5.9 in /examples/electron/builder (#171) (35fc71e) - @dependabot[bot]
- update deps (3de43d2) - @seydx
📦 Packages
The following platform packages have been updated to v5.2.3:
@seydx/node-av-darwin-arm64@5.2.3@seydx/node-av-darwin-x64@5.2.3@seydx/node-av-linux-arm64@5.2.3@seydx/node-av-linux-x64@5.2.3@seydx/node-av-win32-arm64-mingw@5.2.3@seydx/node-av-win32-x64-mingw@5.2.3@seydx/node-av-win32-arm64-msvc@5.2.3@seydx/node-av-win32-x64-msvc@5.2.3