mirror of
https://github.com/alfg/mp4-rust.git
synced 2025-02-07 08:52:21 +00:00
🎥 MP4 reader and writer library in Rust! 🦀
Initial effort to reduce or eliminate the use of assertions in the production code (i.e. not test code). See issue 43 for an example of how this can cause an application (thread) to panic when reading an unusual file. Not all of the changes were as simple as returning an Err, since some functions did not return a Result. Also, the error type used (InvalidData) is just a catch-all with a message, and in some cases a more refined error type may be in order. cargo test passes |
||
---|---|---|
.github/workflows | ||
benches | ||
examples | ||
src | ||
tests | ||
.gitignore | ||
.travis.yml | ||
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().iter() {
println!(
"track: #{}({}) {} : {}",
track.track_id(),
track.language(),
track.track_type()?,
track.box_type()?,
);
}
Ok(())
}
See examples/ for more examples.
Install
Add to your Cargo.toml
:
mp4 = "0.8.2"
Documentation
Development
Requirements
Build
cargo build
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 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