Verified audio containers — at1 podcast

A profile of the Queryable Verified Media Container for audio. It carries the encoded stream verbatim— nothing is re-encoded, and concatenating every segment reproduces the source byte-for-byte — and adds a hash per segment, a global hash, a byte index, and a per-segment feature that makes the episode queryable without decoding it.

It does not compress the audio

Stated first because it is the thing people assume. Encoded audio is already at the entropy wall; a general-purpose compressor gets three or four percent off it, and so do we. The container costs about a quarter of a percent for its index and hashes. at1 podcast stats runs real xz -9e and zstd -19 and prints the result rather than a claim:

  audio                 9.64 MB
  xz -9e                9.34 MB   ratio 1.032x
  zstd -19              9.28 MB   ratio 1.039x
  AT-1 container        9.66 MB   +0.24% (index + hashes)

What you are buying is the layer, not the bytes: knowing the file is intact, knowing where it stopped being intact, and reaching any moment in it without pulling the rest.

Usage

# transcode to ADTS AAC first — segments must start on real frame boundaries
ffmpeg -i episode.m4a -c:a aac -q:a 0.5 -ac 1 -f adts episode.aac

# pack, optionally binding a source document BY HASH (the document is not included)
at1 podcast pack episode.aac episode.at1v --seconds 10 --bind SOURCE.md

# recompute every segment hash + the global hash
at1 podcast verify episode.at1v

# segment boundaries, computed from the index — no audio is decoded
at1 podcast cuts episode.at1v --z 2.0

# the honest size report: runs REAL xz and zstd and prints whatever they say
at1 podcast stats episode.aac episode.at1v

What each property costs and buys

  • Tamper-evident, located. Because the hash is per segment rather than only over the whole file, a single flipped bit is detected and attributed to a segment, and therefore to a timestamp.
  • Addressable.The directory records the offset, length and hash of every segment. On a 21-minute episode that directory is about 23 KB — 0.23% of the file — and seeking to any moment is one HTTP Range request of well under 1%.
  • Queryable without decoding. Each segment stores a 64-dimension curve derived from encoded frame sizes. In a variable-bitrate stream the bytes an encoder spends track how much is happening, so cuts finds boundaries from the index alone.
  • Provenance without disclosure. --bind seals the SHA-256 of a source document into the manifest. The document is not included and need not be published; the digest is enough to prove later exactly which source produced the episode.

Requirements

Input must be ADTS AAC. Segments are cut on frame boundaries so each one decodes standalone, which is what makes mid-stream addressing legal; the ffmpegline above produces a suitable file from anything. Use variable bitrate — constant bitrate flattens the frame-size curve and the boundary detection along with it.

There is a working example at /listen, where the container is verified in your browser before it plays and you can corrupt a byte to watch the check catch it.