1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//! MP4/ISOBMFF muxer.
//!
//! Implements progressive and fragmented MP4 (fMP4) muxing for patent-free
//! codecs (AV1, VP9). Produces valid ISOBMFF files with proper `ftyp`, `moov`,
//! and `mdat` atom layout.
//!
//! # Box Layout (Progressive MP4)
//!
//! ```text
//! [ftyp][moov[mvhd][trak[tkhd][mdia[mdhd][hdlr][minf[vmhd/smhd][dinf[dref]][stbl[stsd][stts][stsc][stsz][stco]]]]]][mdat]
//! ```
//!
//! # Box Layout (Fragmented MP4)
//!
//! ```text
//! [ftyp][moov[mvhd][mvex[trex]][trak(empty stbl)...]]
//! ([sidx][moof[mfhd][traf[tfhd][tfdt][trun]]][mdat])...
//! ```
//!
//! # Example
//!
//! ```ignore
//! use oximedia_container::mux::mp4::{Mp4Muxer, Mp4Config, Mp4FragmentMode};
//! use oximedia_container::{StreamInfo, Packet};
//!
//! let config = Mp4Config::new().with_mode(Mp4FragmentMode::Progressive);
//! let mut muxer = Mp4Muxer::new(config);
//!
//! // Add streams, write packets, finalize
//! muxer.add_stream(video_stream)?;
//! muxer.write_header()?;
//! muxer.write_packet(&packet)?;
//! let data = muxer.finalize()?;
//! ```
pub use ;
pub use ;
pub use ;