All notable changes are recorded here. The format follows Keep a Changelog, and versions follow Semantic Versioning.
[Unreleased]
[0.1.0-preview.1] - 2026-11-01
First preview: reading MP4/MOV/3GP (including fragmented MP4) and Matroska/WebM, with native tags, a common tag view and basic capture facts. No writing or tag editing yet.
Added
MediaFile.Tags,CaptureTime,Location,Device,Rotation,Native[...]andReadMetadataAsync, and tags and facts inonemedia info(text and--json).MediaFile.ContainerDuration,TracksDurationandExactDuration;Durationis the container's figure unless a track without an edit list is longer.Matroska: zlib-compressed frames are inflated on read;
OutputSamplingFrequencyis the audio rate;V_MS/VFW/FOURCCtracks are named by their FourCC.ISO: QuickTime packetised audio (IMA 4:1 and similar) is joined per chunk; the QuickTime sound layout is read from the data; AMR is mono at its codec rate; QuickTime
textentries are timed text;tapt,gmhd,hinfandhntiare containers; a video size of 0 is taken from the sequence parameter set.Repository skeleton: core package
RecursiveAI.OneMedia, audio adapterRecursiveAI.OneMedia.Audio, theonemediatool, tests, NativeAOT and browser-WebAssembly smoke apps.Byte sources: memory, file, seekable stream, caller-supplied ranged reads and forward-only streams, plus an observer hook for counting reads.
MediaTime(exact rational time with explicit rounding),MediaLimits, typed defects and exceptions.Content-based format sniffing and an explicit format registry; sniffers for ISO base media files, EBML (Matroska/WebM) and the other container and stream signatures.
The track and packet model, demuxer interfaces with an allocation-free pull path, and the structure-node contract.
Media.Open/MediaFilehappy path, theonemedia infocommand, and the audio adapter: tracks as OneAudio packet sources, OneAudio container registrations for MP4 and Matroska, andDecode().