5 releases (stable)
2.0.0-alpha.1 | Nov 19, 2024 |
---|---|
1.1.2 | Jun 12, 2024 |
1.1.1 | Apr 30, 2024 |
1.1.0 | Feb 11, 2024 |
0.1.0 |
|
#37 in Video
3,191 downloads per month
Used in 4 crates
385KB
10K
SLoC
Rust idiomatic wrapper to libwebm MKV muxer.
Supports system-wide libwebm.
You'll also need libvpx to create VP8/VP9 frame data.
lib.rs
:
A crate for muxing one or more video/audio streams into a WebM file.
Note that this crate is only for muxing media that has already been encoded with the appropriate codec.
Consider a crate such as vpx
if you need encoding as well.
Actual writing of muxed data is done through a mux::Writer
, which lets you supply your own implementation.
This makes it easy to support muxing to files, in-memory buffers, or whatever else you need. Once you have
a mux::Writer
, you create a mux::SegmentBuilder
and add the tracks you need. Finally, you create a
mux::Segment
with that builder, to which you can add media frames.
In typical usage of this library, where you might mux to a WebM file, you would do:
use std::fs::File;
use webm::mux::{SegmentBuilder, VideoCodecId, Writer};
let file = File::open("./my-cool-file.webm").unwrap();
let writer = Writer::new(file);
// Build a segment with a single video track
let builder = SegmentBuilder::new(writer).unwrap();
let (builder, video_track) = builder.add_video_track(640, 480, VideoCodecId::VP8, None).unwrap();
let mut segment = builder.build();
// Add some video frames
let encoded_video_frame: &[u8] = &[]; // TODO: Your video data here
let timestamp_ns = 0;
let is_keyframe = true;
segment.add_frame(video_track, encoded_video_frame, timestamp_ns, is_keyframe).unwrap();
// TODO: More video frames
// Done writing frames, finish off the file
_ = segment.finalize(None).inspect_err(|_| eprintln!("Could not finalize WebM file"));
Dependencies
~0–300KB