Https://github.com/332065255/flv2fmp4
code Base
Soft coded FLV to MP4 container (i)
Soft coded FLV to MP4 container (ii) FLV tag Dismantling
Soft coded FLV to MP4 container (iii) FLV METADATA tag parsing
Soft coded FLV to MP4 container (iv) Fmp4 Overview and basic explanation
Soft coded FLV to MP4 container (v) Fmp4 Ftyp box and Moov>mvhd Box detailed
Soft coded FLV to MP4 container (vi) Fmp4 MOOV>TRAK>TKHD box and MOOV>TRAK>MDIA>MDHD box explain
Soft coded FLV to MP4 container (vii) Fmp4 MDIA>HDLR box and mdia>minf> smhd and Dinf box explain
Soft coded FLV to MP4 container (eight) Fmp4 mdia>stbl>stsd box explain
Soft coded FLV to MP4 container (ix) fmp4 stts stsc stsz Stco Box explain
Soft coded FLV to MP4 container (10) Fmp4 Mvex Box explain
Soft coded FLV to MP4 container (11) Fmp4 moof Box detailed
Soft coded FLV to MP4 container (12) Fmp4 Mdat Box detailed
Soft coded FLV to MP4 container (13) Fmp4 The FLV data necessary to generate Ftyp and Moov
First, agree on a few definitions
1, documents, by many box and fullbox composition.
2, box, each box by header and data composition.
3, Fullbox, is the expansion of box, box structure on the basis of the header added 8bits version and 24bits flags.
4, Header, contains the length of the entire box size and type.
When Size==0, this is the last box in the file; When size==1, it means that the box length requires more bits to describe, followed by a 64bits largesize describing the length of the box, and when type is a UUID, The data on behalf of box is a user-defined extension type.
5, data, is the actual box, can be pure data can also be more boxes.
6, when a box of data is a series of child box, this box can become container box.
Container box means container box, which will contain more box, representing Moov box.
Full box is a single box that contains no more box, representing Mvhd box.
Full box consists of the following: 4 byte length + 4 bytes Box type+1 byte version +3 byte reservation + various box-specific content
The standard box begins with 4 bytes (32 bits) for box size, which includes the box header and the size of the box body, so that we can locate each box in the file. If the size is 1, the box is large size and the true size value is obtained on the Largesize field. (In fact, only "mdat" types of box can use the large size.) If the size is 0, the box is the last box of the file, and the end of the box is the ending. (also exists only in "Mdat" type box.) )
The 32-bit followed by the size of box type, typically 4 characters, such as "Ftyp", "Moov", and so on, these box type are predefined, respectively, to indicate the meaning of the fixed. If it is "UUID", the box is a user-extended type. If the box type is undefined, it should be ignored.
The following is a standard MP4 opening binary code
00000000h:00 1C to $ 6D (a );
1c length f t y p m p 4 2 0 0 0 0
00000010h:6d 70 34 32 6D to the 6F 6D ;
These 12 bytes indicate a compatible brand to this 28 byte end 0x463 for 1123
ftyp box end
m p 4 2 m p 4 1 i s o m
00000020h:6d 6F 6F for 6C 6D ,
at the same. M o v 6c for 108 m v h d
mvhd box for Fullbox, so 0x00000000 for content
Moov is the container, so the latter 4 bytes are the length of the next box
MVHD box content is more cumbersome, not all posted out, the following is the official MP4 document MVHD detailed instructions
Aligned (8) class Movieheaderbox extends Fullbox (' mvhd ', version, 0)
{
if (version==1) {
unsigned int (64) Creation_time;
unsigned int () modification_time;
unsigned int () timescale;
unsigned int () duration;
} else {//version==0
unsigned int () creation_time;
unsigned int () modification_time;
unsigned int () timescale;
unsigned int () duration;
}
template int () rate = 0x00010000;//
template int () volume = 0x0100;
const bit reserved = 0;
const unsigned int (a) [2] reserved = 0;
template int [9] matrix =
typically 1.0
typically, full volume
{0x00010000,0,0,0,0x00010000, 0,0,0,0x40000000};
Unity matrix
bit [6] pre_defined = 0;
unsigned int () next_track_id;
}
A normal Fmp4 file and his box sort is the case below
-Ftyp-
moov
-mvhd
-Trak
-TKHD-
Mdia-MDHD-
hdlr
-minf
-SMHD
-dinf
-dref
-url
-stbl
- stsd
-mp4a (AVC1)
-Esds (AvcC)
-
Stts-STSC- Stsz
-Stco
-Mvex
-trex
-moof
-MFHD
-Traf
-tfhd
--TFDT-SDTP- Trun
-Mdat
Visible from the above illustration. Fmp4 box is very complex, so this series of blogs is a step-by-step approach to the case of each box. in this chapter, we mainly explain the box composition of box and Fmp4 . In the next chapter we will explain the details of mvhd in Ftyp and Moov in Fmp4 .