1 unstable release

Uses new Rust 2024

0.1.0 Dec 24, 2025

#1371 in Images

Download history 10/week @ 2026-07-09 47/week @ 2026-07-16 15/week @ 2026-07-23 33/week @ 2026-07-30

105 downloads per month

MPL-2.0 license

2.5MB
1.5K SLoC

wmvkit

This crate provides:

  • ASF container parsing and demuxing for typical .wmv files (ASF Header Object + Data Object).
  • Stream separation: video compressed access units and audio compressed frames are emitted as DemuxedSample.

Quick start

use std::fs::File;
use wmvkit::asf::AsfDemuxer;

fn main() -> anyhow::Result<()> {
    let f = File::open("input.wmv")?;
    let mut demux = AsfDemuxer::open(f)?;
    println!("streams: {:#?}", demux.streams());
    while let Some(sample) = demux.next_sample()? {
        println!("sample: stream={} kind={:?} pts_ms={} key={} bytes={}",
                 sample.stream_number, sample.kind, sample.pts_ms, sample.is_key, sample.data.len());
    }
    Ok(())
}

Layout

  • src/asf/* : ASF GUIDs, header parsing, data packet parsing, media-object reassembly.
  • src/codec/*: bitreader, VLC, IDCT, pixel helpers.
  • src/vc1/* : VC-1 (WMV9) parser.

Decoder selection helper

let dec = wmvkit::factory::make_video_decoder(vstream)?;

Note: WMV1/WMV2 decoders are currently not fully implemented.

Dependencies

~1–37MB
~497K SLoC