mirror of
				https://github.com/alfg/mp4-rust.git
				synced 2025-11-04 02:31:21 +00:00 
			
		
		
		
	
				
				🎥 MP4 reader and writer library in Rust! 🦀
				
			
		| 
				 | 
			||
|---|---|---|
| .github/workflows | ||
| benches | ||
| examples | ||
| src | ||
| tests | ||
| .gitignore | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
mp4
MP4 Reader and Writer in Rust 🦀
mp4 is a Rust library to read and write ISO-MP4 files. This package contains MPEG-4 specifications defined in parts:
- ISO/IEC 14496-12 - ISO Base Media File Format (QuickTime, MPEG-4, etc)
 - ISO/IEC 14496-14 - MP4 file format
 - ISO/IEC 14496-17 - Streaming text format
 
Example
use std::fs::File;
use std::io::{BufReader};
use mp4::{Result};
fn main() -> Result<()> {
    let f = File::open("tests/samples/minimal.mp4").unwrap();
    let size = f.metadata()?.len();
    let reader = BufReader::new(f);
    let mp4 = mp4::Mp4Reader::read_header(reader, size)?;
    // Print boxes.
    println!("major brand: {}", mp4.ftyp.major_brand);
    println!("timescale: {}", mp4.moov.mvhd.timescale);
    // Use available methods.
    println!("size: {}", mp4.size());
    let mut compatible_brands = String::new();
    for brand in mp4.compatible_brands().iter() {
        compatible_brands.push_str(&brand.to_string());
        compatible_brands.push_str(",");
    }
    println!("compatible brands: {}", compatible_brands);
    println!("duration: {:?}", mp4.duration());
    // Track info.
    for track in mp4.tracks().values() {
        println!(
            "track: #{}({}) {} : {}",
            track.track_id(),
            track.language(),
            track.track_type()?,
            track.box_type()?,
        );
    }
    Ok(())
}
See examples/ for more examples.
Install
cargo add mp4
or add to your Cargo.toml:
mp4 = "0.14.0"
Documentation
Development
Requirements
Build
cargo build
Lint and Format
cargo clippy --fix
cargo fmt --all
Run Examples
mp4info
cargo run --example mp4info <movie.mp4>
mp4dump
cargo run --example mp4dump <movie.mp4>
Run Tests
cargo test
With print statement output.
cargo test -- --nocapture
Run Cargo fmt
Run fmt to catch formatting errors.
rustup component add rustfmt
cargo fmt --all -- --check
Run Clippy
Run Clippy tests to catch common lints and mistakes.
rustup component add clippy
cargo clippy --no-deps -- -D warnings
Run Benchmark Tests
cargo bench
View HTML report at target/criterion/report/index.html
Generate Docs
cargo docs
View at target/doc/mp4/index.html
Web Assembly
See the mp4-inspector project as a reference for using this library in Javascript via Web Assembly.
Related Projects
- https://github.com/mozilla/mp4parse-rust
 - https://github.com/pcwalton/rust-media
 - https://github.com/alfg/mp4
 
License
MIT