博客内容仅提供英文版本。

v0.7.0

  • Free MCP server: the analyzer engine is now installable as an MCP server, so AI agents can inspect media files directly
  • New parsers: AV2, DTS Core / DTS-HD, MXF header metadata, AAC LATM StreamMuxConfig, DSM-CC object carousels
  • LCEVC: quantization matrix, dequantization, dithering, and VUI decoding
  • MPEG-TS: M2TS/BDAV and FEC variants detected automatically, PIDs annotated with language and PCR, many new descriptors decoded
  • MP4: QuickTime timecode tracks, OMAF boxes, and codec resolution for restricted-scheme tracks
  • SMPTE 2038 streams detected even when the PMT doesn't announce them; SMPTE 302M channel/bit-depth description
  • Unsupported payloads (Dolby Vision EL, SVC / 3D-AVC extensions, unknown NAL types) now surface as raw bytes instead of disappearing
  • Scan errors are collected instead of silently swallowed, and reported via the MCP server and CLI
  • YUV viewer: non-square pixels (custom pixel aspect ratio)

More detail on each, below.

The analyzer as an MCP server

The biggest addition in this release isn't in the web app at all. The analysis engine now ships as a standalone MCP (opens in new tab) server, which means an AI agent — Claude Code, Claude Desktop, Cursor, or anything else that speaks MCP — can open a media file and read its structure the same way you do in the browser.

It's free, and it installs in one line:

npx -y @vtclab/analyzer-mcp

The server exposes the analyzer's core operations as tools: analyze a file, list its streams, list packets, and pull individual packet fields or raw bytes. Field access is budgeted, so an agent can drill into a specific header without flooding its context with the entire packet tree. Scan errors are exposed too, deduplicated by template, so an agent gets a short list of "here is what didn't parse" rather than thousands of repeated lines.

What this is actually good for: asking an agent "why does this segment fail to play on Safari?" and having it read the real header fields instead of guessing from ffprobe summary output. Or pointing it at a directory of captures and asking which ones have a PCR discontinuity.

Files are parsed locally by the same WebAssembly-adjacent Rust engine that powers the site — nothing is uploaded. Setup instructions for each client are on the MCP server page (opens in new tab).

New codecs and formats

  • AV2: a parser for the next-generation AOMedia codec, including elementary streams and container integration. It's early days for AV2 content, but if you're producing test bitstreams you can now inspect them.
  • DTS: DTS Core and DTS-HD audio, closing a long-standing gap in the audio codec lineup.
  • MXF header metadata: v0.6.0 brought MXF partitions and KLV essence. This release decodes the header-metadata local sets by resolving them through the primer pack, so the descriptive metadata is readable rather than a wall of opaque keys.
  • AAC LATM: StreamMuxConfig and AudioSpecificConfig parsing, which is what you need for LOAS/LATM-wrapped AAC in broadcast transport streams.
  • DSM-CC: object carousel reassembly, decompression, and BIOP parsing — the delivery mechanism behind interactive broadcast applications.
  • LCEVC: the picture_config quantization matrix, dequantization parameters, dithering, and VUI are now decoded.
  • SMPTE 302M: channel count and bit depth are described rather than left as raw values.

MPEG-TS reads a lot more like a description and less like a hex dump

Transport streams got the most attention this release, in two directions.

Better identification. M2TS/BDAV and FEC container variants are now recognized by packet stride, so a Blu-ray .m2ts capture is identified as what it is instead of being mistaken for a plain 188-byte TS. The 4-byte arrival timestamp prefix that M2TS puts in front of every packet is parsed as its own header. Null packets on PID 0x1FFF are labelled as such. And streams the PMT doesn't describe well enough are labelled by category — "Unknown Video" rather than a flat "Unknown Stream".

There's also a content-based probe for SMPTE 2038 VANC data, which matters because a fair number of real-world streams carry ancillary data on a private PID that the PMT never properly announces. The analyzer will now find those.

Better description. Elementary PID names carry the ISO 639 language and a PCR flag, so the stream list tells you which PID is the clock and what language each audio track is, without opening the descriptors. And a batch of new descriptors are decoded: HDMV registration_descriptor stream coding info, HbbTV simple AIT descriptors, the MVC_operation_point_descriptor, and named CA_system_ID values in both standard and ARIB CA descriptors.

MP4 additions

QuickTime tmcd timecode tracks are decoded, so the SMPTE timecode embedded in professional camera output is readable. The OMAF boxes rwpk (region-wise packing), covi (content coverage), and srqr (sphere region quality) are parsed for 360° video. And sample-entry codecs are mapped properly, including restricted-scheme tracks, which are resolved through the frma box to the codec actually underneath — so an encrypted or otherwise wrapped track reports its real codec rather than resv.

Nothing fails quietly anymore

Previously, when a parser hit something it couldn't handle, the failure was mostly invisible: you'd see a gap in the header tree and have to guess. Two changes fix that.

Scan errors are collected and reported. The engine now gathers the parse errors it used to swallow and reports them, deduplicated so a repeating problem doesn't produce thousands of identical entries. Analyzer limitations ("not supported yet") are deliberately excluded, so what you get is a list of genuine problems with the file. Today this is available through the MCP server (list_scan_errors) and the CLI — the engine exposes it to the web app too, but there's no UI for it in the browser yet.

Unsupported payloads are shown as raw bytes. Rather than dropping data the parser doesn't understand, the analyzer presents the raw RBSP so you can still see it and work with it. This applies to unsupported AVC NAL unit types, SVC / 3D-AVC slice-header extensions, and the Dolby Vision enhancement layer carried in HEVC NAL unit type 63.

YUV viewer: non-square pixels

The YUV viewer now supports a custom pixel aspect ratio. Anamorphic content — DVD-era SD material, or anything with a non-1:1 sample aspect — renders with the correct geometry instead of being horizontally squashed.

Everything else

This release also carries a large amount of parser hardening that doesn't fit neatly in a feature list. The scanner no longer hangs or loops on truncated and malformed files, and several classes of error no longer flood the scan. On the parser side there are correctness fixes across VVC (rectangular slice / tile layout, decoded_picture_hash SEI), E-AC-3 (addbsi length), Opus (proper OpusHead / OpusTags header parsing), MKV (zlib-compressed block frames), AMV, MPEG-2, and MP4 language-code decoding.

On the web side: the file dialog fits on mobile screens, the blog image lightbox no longer caps enlarged images, canonical URLs behave correctly for SEO, and the UI stays fully translated after switching locale. Blog posts also have comments now, backed by GitHub Discussions.

评论