v1.29.0

Vanilagy/mediabunnyv1.29.0Jan 19, 2026by Vanilagy

AI Summary

A major release introducing MPEG Transport Stream support for HLS functionality, along with improvements to timestamp handling and existing formatters.

Key Highlights

  • Added full MPEG-TS support (demuxer and muxer) for AVC, HEVC, AAC, and MP3
  • Added `Input.getFirstTimestamp()` to find the smallest starting timestamp across tracks
  • Enhanced `EncodedPacket.clone()` to allow modification of almost all packet properties
  • Updated `ConversionOptions.trim.start` default to the first timestamp of the input file
  • Improved ADTS and Ogg muxers to handle AAC and produce valid files

Breaking Changes

  • `EncodedPacket.clone()` now modifies properties (previously restricted to timestamp/duration)
  • `TrackCountLimits` upper bounds changed from `Infinity` to actual values
  • `ConversionOptions.trim.start` default behavior changed from 0 to first timestamp

New Features

  • MpegTsOutputFormat and MpegTsInputFormat exports
  • Input.getFirstTimestamp() method

Full Release Notes

This big new thing in this update is support for reading and writing MPEG Transport Stream (.ts) files, a major requirement for HLS support!

- Added MPEG-TS demuxer and muxer, supporting AVC, HEVC, AAC, and MP3
- Added `MpegTsOutputFormat`, `MpegTsOutputFormatOptions`, `MpegTsInputFormat` and `MPEG_TS` exports
- Added `Input.getFirstTimestamp()` which returns the smallest starting timestamp across all tracks
- `EncodedPacket.clone()` can now modify almost all properties of the packet, not just timestamp and duration
- `ConversionOptions.trim.start` now defaults to the first timestamp of the input file instead of 0  (unless that timestamp is smaller than 0). This corrects a long-standing mismatch between the docs and the implementation.
- ISOBMFF, Matroska and ADTS muxers now properly accept AAC in ADTS format as input
- ADTS demuxer has been simplified and now outputs audio packets in ADTS format
- Ogg muxer can now produce valid 0-packet files
- `TrackCountLimits` returned by `OutputFormat` no longer contain `Infinity` for the upper bounds but the actual bound instead.