iso-bmff
Status: early development (
0.x). Not recommended for production; public APIs may change without notice. Part of the Mediaway media stack.
Sans-IO MP4 / ISOBMFF mux and demux (ISO/IEC 14496-12). A pure state machine: feed it
tracks and samples, collect container bytes — no files, sockets, or threads. Supports
fragmented MP4 (fMP4) output, unfragmented stbl-based demux, edit lists (elst), and
ClearKey CENC sample decryption (via iso-cenc).
Quick start
use ;
use ;
let mut muxer = new;
muxer.add_track?;
let mut muxer: = muxer.begin; // Open -> Live
muxer.push_packet?;
muxer.flush;
let mut mp4 = Vecnew;
muxer.poll_bytes;
// Demux: feed bytes, poll packets — fully streaming.
let mut demuxer = new;
demuxer.push_bytes;
while let Some = demuxer.poll_packet
Status
Status marks: ✅ first-class (tests for claimed scope) · ⚡ Zero-Copy path (no payload copy; implies ✅) · 🆗 best-effort / prototype · 🛠️ planned · ❌ attempted and genuinely blocked · 👻 not exercisable yet (no hardware / device / session available)
| Area | Status | Notes |
|---|---|---|
Mux (typestate Open → Live, ftyp/moov/moof/mdat) |
✅ | Sample durations derived from dts deltas; fragmented batches |
Demux (fMP4 + unfragmented stbl, mdat-before-moov) |
✅ | |
Edit lists (edts/elst), discard / negative first PTS |
✅ | |
ClearKey CENC (tenc/senc) |
✅ | Via iso-cenc |
| Sample entries | ✅ | H.264 (avc1), HEVC (hvc1/hvcC), AV1 (av01/av1C), VP9 (vp09/vpcC) |
More codecs / sample-entry variants (hev1, Dolby Vision, …) |
🛠️ | As needed |
Docs
docs/roadmap.md— stages, deferred items, design decisionsmediaway-container— Mediaway-typedmp4surface over this crate- Root README — container support matrix
Contributing
Contributions are welcome — open an issue or pull request at github.com/nyxways/mediaway.
License
MIT OR Apache-2.0.