bfbd90e1d8
Account for multi-frame Opus packets when computing packet duration ( #439 )
...
* Account for multi-frame Opus packets when computing packet duration
parseOpusTocByte only read the config field of the TOC byte and always
assumed a single frame per packet. Per RFC 6716 section 3.2, a packet may
carry 1, 2 or an arbitrary number of frames, encoded in the two low bits of
the TOC byte (plus the frame count byte for code 3), and its duration is the
frame duration times the frame count.
As a result, the Ogg muxer wrote granule positions that advanced slower than
the actual audio. Chromium's MediaRecorder packs three 20 ms frames per Opus
packet, so remuxing WebM/Opus to Ogg/Opus produced files declaring a third of
their real duration: a 5.7 s recording ended with a final granule position of
99840 (2.08 s). Decoders that trust the container then truncate the audio.
* Clean up
---------
Co-authored-by: Vanilagy <[email protected] >
2026-07-18 12:05:31 +00:00
Viktor Szépe and GitHub
6812cf1643
Fix typos in source, tests, and docs ( #430 )
...
* Fix typos in source, tests, and docs
* Fix introduction guide typos
2026-07-02 09:33:43 +02:00
Vanilagy
7ea8f6d751
Up timeout on test
2026-07-01 16:25:53 +02:00
Vanilagy
8fb22633fe
Add frame container atom header stripping & readding for ProRes in Matroska, bump patch
2026-07-01 16:22:38 +02:00
Vanilagy
d8a6e09a85
Up timeout
2026-07-01 11:32:45 +02:00
Vanilagy
7d89c8de2d
Add ProRes encode and decode support to @mediabunny/server
2026-06-30 21:40:58 +02:00
Vanilagy
a4884184e9
Remove GPU path for alpha merger/splitter, add worker pool for merger, allow concurrent merging for better performance
2026-06-30 18:23:59 +02:00
Vanilagy
8ae0f9d09e
Implement @mediabunny/prores extension, add onError callbacks to custom coders, fix visibleRect bug in VideoSample
2026-06-29 17:15:10 +02:00
Vanilagy
af618f014a
Merge branch 'main' into prores
2026-06-19 13:24:33 +02:00
92a384f418
Added ID3v2 support for FLAC files. ( Fixes #417 ) ( #418 )
...
* Added ID3v2 support for FLAC files. (Fixes #417 )
* Fix ID3v2 header size calculation, adjust ID3v2 logic for FLAC files
---------
Co-authored-by: Vanilagy <[email protected] >
2026-06-18 16:40:43 +00:00
Vanilagy
bfd4059c22
Add advanced access unit delimination logic to MPEG-TS demuxer ( fixes #414 ), ignore irrelevant PIDs in MPEG-TS metadata reading
2026-06-17 17:16:39 +02:00
Vanilagy
5b4a5db1a5
Add HlsInputFormatOptions.offsetTimestampsByDateTime option, add InputTrack.getUnixTimeForTimestamp()
2026-06-16 16:32:53 +02:00
Vanilagy
8b9a1acf16
Fix Conversion API process callbacks being called *before* other transformations ( fixes #403 ), restructure Conversion API to make full use of in-source transformations, add AudioSample.trim()
2026-06-15 18:30:16 +02:00
Jonny Burger and GitHub
0da1107858
[AI-generated] Fix unhandled rejection when disposing invalid input ( #413 )
...
* Fix input dispose rejection handling
* Move input disposal regression test
2026-06-15 16:25:02 +02:00
Vanilagy
1ddeae2e80
Merge branch 'main' into prores
2026-06-12 15:41:58 +02:00
Vanilagy
0cdf0063e2
Add VideoSample.encodeOptions, optimized ArrayBuffer-backed VideoSample cloning
2026-06-02 18:01:22 +02:00
c0d93f45a5
Support QuickTime nclc color information ( #397 )
...
* Support QuickTime nclc color information
* Tighten QuickTime nclc color test fixture
* Make QuickTime muxer write nclc color box
---------
Co-authored-by: Vanilagy <[email protected] >
2026-06-02 09:48:06 +00:00
Vanilagy
05f8ecd908
Respect Range header for UrlSource ( #387 )
2026-06-02 11:05:46 +02:00
96d0d9fb22
Fix tkhd issue for Apple ecosystem compatibility ( #391 )
...
* fix: ensure at least one track per type is enabled for Apple ecosystem compatibility
* Add ensureOneEnabledTrack() to ISOBMFF muxer
* Add test case
---------
Co-authored-by: Vanilagy <[email protected] >
2026-06-01 22:55:02 +02:00
Vanilagy
831d395696
More stable test?
2026-06-01 21:52:34 +02:00
Vanilagy
288372ee71
Fix NodeAv memory leak ( fixes #392 )
2026-06-01 21:45:49 +02:00
Vanilagy
441eea38b9
CustomSource -> StreamSource
2026-05-24 15:48:01 +02:00
Vanilagy
85a80972a0
Make MP3 next frame location more strict for better recovery ( fixes #382 ), fix Date timezone for ID3 tags
2026-05-22 11:31:26 +02:00
Vanilagy
f151ce85e8
Add eccentric timestamp tests for server extension
2026-05-13 19:55:22 +02:00
Vanilagy
a0574fa09a
Fix decoded audio always starting at 0, fix startTimestamp=0 for ranged media iterators ( fixes #370 )
2026-05-13 18:54:45 +02:00
Vanilagy
deb9423ddb
The test is self-explanatory
2026-05-13 17:30:17 +02:00
David P. and GitHub
09a8ff0166
Merge pull request #369 from Theredbt/fix/recognize-sidx-mp4-segment
...
fix(input-format): recognise CMAF segments that start with sidx
2026-05-13 17:29:28 +02:00
Vanilagy
292189e3d4
Add toAvFrame, NodeAv* -> Av*, add server README, fix track synchronizer in conversion, increase default cache size for ReadableStreamSource
2026-05-13 15:26:13 +02:00
Vanilagy
633d1bc235
Increase test timeout 🙄
2026-05-12 13:18:11 +02:00
Vanilagy
060ceb8ed3
Fix tests some more
2026-05-12 00:43:08 +02:00
Vanilagy
5599e52a1a
Fix async race condition in transparency code, reduce HEVC conversion duration
2026-05-12 00:24:03 +02:00
Vanilagy
4e5f894d7a
Adjust tests for CI
2026-05-12 00:06:48 +02:00
Vanilagy
81531cc510
Fix some bugs & polish edge cases
2026-05-11 23:50:06 +02:00
Vanilagy
d8c8606341
Merge branch 'main' into server
2026-05-11 21:36:38 +02:00
Vanilagy
1bf200894c
Add CPU path for transparent encoding and decoding, add transparency support to FFmpeg-backed VP9 decoder and encoder
2026-05-11 21:33:29 +02:00
Vanilagy
a89d715524
Add VideoSample.transform(), add custom transformer functions, ditch CanvasSink path in Conversion API, add libavfilter-based VideoSample transformation
2026-05-11 15:57:51 +02:00
Theredbt
b48eb75565
fix(input-format): recognise CMAF segments that start with sidx
...
Sibling case to #308 : when a fragmented MP4 segment begins with a sidx
box (no ftyp/styp/moof at the file root), Mp4InputFormat._canReadInput
returned false, causing Input.getTracks() to throw
UnsupportedInputFormatError.
This shape is standard in CMAF when the DASH on-demand profile is used
or when HLS playlists are derived from one (Vimeo's vod-adaptive-ak CDN,
for example). The segment is still a valid ISOBMFF fragment — the sidx
just sits before the moof.
Adds 'sidx' alongside the existing 'moof' check so the format probe
accepts these segments, and a focused regression test that fails on
the previous behaviour.
2026-05-11 04:22:46 +01:00
Vanilagy
3ae73a7c5e
Loosen constraint on format returned by toRgbSample, fix X->A conversio, fix tests
2026-05-10 17:31:56 +02:00
Vanilagy
1e200edc83
Implement audio decoder & encoder
2026-05-10 16:37:25 +02:00
Vanilagy
fff69619ec
Lint
2026-05-09 00:42:37 +02:00
Vanilagy
3cde68e0ae
Fix AudioResampler emitting timestamps before startTimestamp ( fixes #366 )
2026-05-09 00:40:25 +02:00
Vanilagy
ab9958234a
Change VideoSampleResource interface, validate return values, add more proper VideoSample.copyTo() logic, fix decoder/encoder color space issues
2026-05-08 19:37:41 +02:00
Vanilagy
f5bd540863
Add the video portion of @mediabunny/server
2026-05-05 23:38:14 +02:00
Vanilagy
6d9fb30c29
Fix things that broke in the merge
2026-05-04 17:58:05 +02:00
Vanilagy
2e933ee5fc
Merge branch 'main' into sample-resources
2026-05-04 17:23:45 +02:00
Vanilagy
782d3e134b
Use edit lists to model non-zero start timestamps for regular MP4 ( fixes #336 ); fix MP4 PCM logic breaking down with approximate packet timestamps
2026-04-30 10:32:42 +02:00
Vanilagy
f3dec587fd
Make FLAC encoder bit depth depend on input sample format, add sampleFormat audio transformation option, fix incorrect bitrate validation for FLAC ( closes #357 )
2026-04-29 16:27:20 +02:00
Vanilagy
0f6c374750
Ensure extensions work with huge timestamps, fix AC3 and AAC extension's behavior with huge timestamps
2026-04-27 20:58:05 +02:00
Vanilagy
9fdf263482
Merge branch 'main' into hls
2026-04-24 20:56:59 +02:00
Vanilagy
97f6b35cda
Add special TXXX handling for ID3v2
2026-04-24 19:42:15 +02:00