mp4forge 0.8.0

Rust library and CLI for inspecting, probing, extracting, muxing, and rewriting MP4 structures
Documentation
#[cfg(feature = "mux")]
fn main() {
    use std::io::Cursor;

    use mp4forge::mux::sample_reader::PlannedSampleReader;
    use mp4forge::mux::{MuxInterleavePolicy, MuxStagedMediaItem, plan_staged_media_items};

    let plan = plan_staged_media_items(
        vec![
            MuxStagedMediaItem::new(0, 1, 0, 1024, 4, 5).with_sync_sample(true),
            MuxStagedMediaItem::new(1, 2, 512, 512, 4, 4),
        ],
        MuxInterleavePolicy::DecodeTime,
    )
    .unwrap();

    let mut sources = [
        Cursor::new(b"HEADvideoTAIL".to_vec()),
        Cursor::new(b"PREMaudPOST".to_vec()),
    ];
    let mut reader = PlannedSampleReader::new(&mut sources, &plan);
    let mut sample_bytes = Vec::new();

    while let Some(metadata) = reader.next_sample_into(&mut sample_bytes).unwrap() {
        println!(
            "track {} at output {} -> {} bytes",
            metadata.track_id(),
            metadata.output_offset(),
            sample_bytes.len()
        );
    }
}

#[cfg(not(feature = "mux"))]
fn main() {
    eprintln!("enable the `mux` feature to run this example");
}