Commit Graph
37 Commits
Author SHA1 Message Date
Vanilagy e1dd95086a Add special .node.cjs variant for CJS support 2026-04-28 15:33:51 +02:00
Vanilagy ff46a274b1 Switch back to dynamic import, leave package.json unchanged though 2026-04-28 14:36:48 +02:00
Vanilagy bf9e360587 Revert back to static import of fs, don't like to CJS bundles in package.json 2026-04-28 14:24:58 +02:00
Vanilagy c89e7429f7 Fix FilePathSource/FilePathTarget not working in server-side environments using CJS (closes #360) 2026-04-27 18:29:52 +02:00
b05cdbe7e0 fix: two long-running HLS transcode issues (#355)
* fix: release targets from Output._targets on finalize

Long-running HLS transcodes leak memory. Every finalized BufferTarget
stays in _targets until the outer Output closes, pinning its buffer.
Writer.finalize() already does this cleanup for writer-based flows;
extend it to buffer-finalize paths via the public 'finalized' event.

* fix: ReadOrchestrator LRU eviction picks only drained workers

assert(pendingSlices.length === 0) fires under heavy concurrent reads
(e.g. multi-rendition HLS decode from BlobSource). LRU filter only
checked !running; workers with queued slices could be evicted.
Add pendingSlices.length === 0 to the filter.

* fix: export AppendOnlyStreamTarget from index

Missing from the re-export; public docs import it by name.

* fix: join HLS init segment path with root + playlist path

Init path went through _getTarget bare; segments got joined with rootPath + playlist.path. Playlist-relative URI then can't resolve when the playlist lives in a subdirectory.

* Fix targets not being cleaned up, fix paused workers with remaining pending slices, modify doc block, fixed isRoot not being changed on proxied requests

---------

Co-authored-by: Vanilagy <[email protected]>
2026-04-23 14:37:56 +02:00
Vanilagy 783cfa6fbe Add AppendOnlyStreamSource, adjust examples to use it 2026-04-21 14:58:33 +02:00
77e70f9090 Add BufferTarget.onFinalize, OutputOptions.onFinalize, ConcurrentRunner (#349)
* Add BufferTarget.onFinalize option for awaitable async action on finalize

The `finalized` event fires synchronously and its return value is ignored,
making it unsuitable for use cases where the muxer should wait (e.g.
uploading the buffer to S3, R2, or other object stores that require a
known Content-Length and therefore can't stream via StreamTarget).

Adds a new `BufferTargetOptions` type with an `onFinalize` callback that
the muxer awaits before resolving. Matches the existing callback pattern
used by `HlsOutputFormatOptions.onSegment`, `onMaster`, etc.

When used with PathedTarget, this provides proper backpressure: the next
segment won't start being produced until the previous one has finished
uploading, keeping memory bounded regardless of video length.

- Adds `BufferTargetOptions` type, exported from the package root
- `BufferTarget` constructor now accepts optional options (backward compatible)
- `_finalize()` awaits `onFinalize` before emitting the `finalized` event
- Adds runtime validation for non-function callbacks
- Updates "Upload to a server" docs in writing-hls.md with S3 pattern
- Documents `onFinalize` in writing-media-files.md BufferTarget section
- Adds tests for callback invocation, async awaiting, backward compat, and validation

* Add ConcurrentRunner, add OutputOptions.onFinalize, adjust docs accordingly, clean up tests

* give me more control baby

* forgot to tell about it

* polish guide and js docs

* vanilagy says remove this, docs will reveal it

---------

Co-authored-by: Vanilagy <[email protected]>
2026-04-17 18:42:09 +02:00
Vanilagy b85ecd3109 Code review fixes 2026-04-16 17:43:12 +02:00
Vanilagy 2d0aac3208 Fix HLS demuxer parsing bug, extract HLS mime type out, add TargetRequest.mimeType 2026-04-16 10:53:36 +02:00
Vanilagy a3767af141 Fix HLS muxer audio segmentation bug, fix conversion tests failing in CI 2026-04-14 21:40:07 +02:00
Vanilagy 6410ea9f42 Make Conversion API copy input pairability graph by default, fix HLS muxer rotation bug, remove onfinalized callback 2026-04-14 21:14:58 +02:00
Vanilagy 051578c2ca Remove input track descriptors, add async getters on tracks for everything, deprecate old sync getters 2026-04-10 16:23:17 +02:00
Vanilagy 0813bcab28 Add missing doc blocks for everything, add PathedTarget and PathedSource, few other changes & fixes 2026-04-09 15:22:45 +02:00
Vanilagy 340b5eede7 Add support for writing Unix epoch-relative tracks to HLS, add proper cleanup of all Targets obtained by an Output 2026-03-31 15:12:38 +02:00
Vanilagy b06e407d65 Add HLS live mode 2026-03-31 14:13:00 +02:00
Vanilagy 3bcbcc13f0 Add CMAF format and CMAF/init segment support to HLS muxer 2026-03-30 17:06:57 +02:00
Vanilagy 7b70756961 Remove superfluous end pos seeks, fix validation bug 2026-03-27 21:29:47 +01:00
Vanilagy e2e8aaab78 Refactor Target and Writer, add single-file HLS writing mode 2026-03-27 18:07:26 +01:00
Vanilagy dd8621b6d5 Start work on HlsOutputFormat 2026-03-17 15:25:06 +01:00
Vanilagy 7e8f9fbbb1 It's 2026 2026-01-16 17:02:12 +01:00
Vanilagy 75096edb23 Update TypeScript, fix generic ArrayBufferView type errors, allow SharedArrayBuffer as input for BufferSource 2025-11-26 12:04:23 +01:00
Vanilagy f2f9b2f0c3 Add FilePathTarget 2025-10-02 15:59:46 +02:00
Vanilagy a2a30c3e92 Add API doc generator, improve documentation across the board 2025-09-03 18:11:43 +02:00
Vanilagy 9d47b3c5dc Add Target.onwrite callback 2025-09-02 17:34:09 +02:00
Vanilagy 55dd8cdb4c Add NullTarget 2025-09-02 17:20:09 +02:00
Vanilagy 846fa0b183 Adjust legal comment 2025-06-27 13:22:19 +02:00
Vanilagy a3d73228e2 Add proper license 2025-06-27 13:14:11 +02:00
Vanilagy a64ebab435 Small monotonicity adjustments 2025-03-29 12:01:03 +01:00
Vanilagy 95cc8beb06 Fix chunked writing issues & drop ChunkedStreamTargetWriter 2025-03-26 21:35:19 +01:00
David Payr 3863ffe4d8 Add documentation comments everywhere 2025-03-15 17:12:42 +01:00
Vanilagy 2625dc7662 Implement PCM encoders 2025-01-05 15:58:20 +01:00
Vanilagy 37820f1d4c Replace ArrayBufferTarget with BufferTarget, now spitting out Uint8Array and using .resize 2025-01-05 14:24:06 +01:00
Vanilagy 6730e41c07 Add ESLint and lint a bunch 2024-12-01 17:33:54 +01:00
Vanilagy 266fcd473e Use WritableStream for StreamTarget & integrate backpressure concepts 2024-11-28 22:06:49 +01:00
Vanilagy 78505bca82 Add api-extractor and add required exports 2024-11-25 21:18:44 +01:00
David Payr 39aea03565 Add subtitle tracks and implement subtitle tracks for Matroska muxer 2024-11-16 17:23:24 +01:00
Vanilagy dd6526a070 Start implementation 2024-11-09 21:50:31 +01:00