mp4san

A Rust MP4 format "sanitizer".

Currently the sanitizer is capable of:

"Presentation" metadata means any metadata which is required by an MP4 player to play the file. "Self-contained and contiguous" means that the returned metadata can be concatenated with the media data to form a valid MP4 file.

Unsupported MP4 features

The sanitizer does not currently support:

Usage

The main entry points to the sanitizer are [sanitize]/[sanitize_async], which take a [Read] + [Skip] input. The [Skip] trait represents a subset of the [Seek] trait; an input stream which can be skipped forward, but not necessarily seeked to arbitrary positions.

```rust use mp4santest::{exampleftyp, examplemdat, examplemoov};

let exampleinput = [exampleftyp(), examplemdat(), examplemoov()].concat();

let sanitized = mp4san::sanitize(std::io::Cursor::new(example_input)).unwrap();

asserteq!(sanitized.metadata, Some([exampleftyp(), examplemoov()].concat())); asserteq!(sanitized.data.offset, exampleftyp().len() as u64); asserteq!(sanitized.data.len, example_mdat().len() as u64); ```

The [parse] module also contains a less stable and undocumented API which can be used to parse individual MP4 box types.

API Documentation
Private Documentation

Contributing Bug Reports

GitHub is the project's bug tracker. Please search for similar existing issues before submitting a new one.

Testing

FFMpeg and GPAC-based verification of mp4san output can be enabled using the features mp4san-test/ffmpeg and mp4san-test/gpac.

The mp4san-test/ffmpeg feature requires the following FFMpeg libraries and their headers to be installed:

The mp4san-test/gpac feature requires libgpac >= 2.2 and its headers to be installed.

Integration tests on sample data files can be processed through mp4san-test-gen before being added to the mp4san-test-data repo. This removes any actual media data from the sample file, since it's not read by mp4san anyway, leaving only metadata for testing purposes. This allows even very large media files to be gzipped to very small sizes.

shell $ cargo run --bin mp4san-test-gen -- test-sample.mp4 mp4san/tests/test-data/test-sample.mp4.gz

License

Licensed under MIT.