1
0
Fork 0
mirror of https://github.com/alfg/mp4-rust.git synced 2024-11-14 11:11:16 +00:00
🎥 MP4 reader and writer library in Rust! 🦀
Find a file
Alfred Gutierrez 6ec013b7b9
Fragmented tracks (#31)
* Add trun box.

* Adding Movie Extends Box and subboxes (mvex, mehd, trex).

* Adding more support for parsing fragmented tracks. Add mp4sample example.

* cleanup

* Set default_sample_duration from moov.mvex.trex for getting fragmented samples.

* fix trex box parsing/writing.
2020-09-14 18:05:34 -07:00
.github/workflows Create rust.yml 2020-07-24 20:00:09 -07:00
benches add criterion for benchmarking performance. 2020-08-26 20:45:18 -07:00
examples Fragmented tracks (#31) 2020-09-14 18:05:34 -07:00
src Fragmented tracks (#31) 2020-09-14 18:05:34 -07:00
tests Add support for reading/writing fragmented mp4 (fMP4) boxes. 2020-09-03 21:33:45 -07:00
.gitignore Remove Cargo.lock and add to .gitignore. 2020-07-28 22:13:15 -07:00
.travis.yml Add basic integration test (#10) 2020-07-25 20:07:39 -07:00
Cargo.toml Box summary and to_json traits. (#29) 2020-09-08 22:24:34 -07:00
LICENSE Change main.rs to lib.rs and create example mp4info project. Update readme and license. 2020-01-12 19:33:26 -08:00
README.md Fragmented tracks (#31) 2020-09-14 18:05:34 -07:00

mp4rs

MP4 Reader and Writer in Rust 🦀

mp4rs is a Rust library to read and write ISO-MP4 files. This package contains MPEG-4 specifications defined in parts:

https://crates.io/crates/mp4

Crates.io Crates.io Build Status Rust

Example

use std::fs::File;
use std::io::{BufReader};
use mp4::{Result};

fn main() -> Result<()> {
    let f = File::open("example.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.6.0"

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

Web Assembly

See the mp4-inspector project as a reference for using this library in Javascript via Web Assembly.

License

MIT