INDEX
1. Introduce
2. MP4 File Structure
3. Reference
1. Introduce
들어가기에 앞서 MP4 파일 구조에 대해 알아보고 이후 test.MP4 파일에 대해
- 인코딩 되지 않은 test.MP4
- Audio를 제거한 test-audio.MP4
- 자막을 동영상과 일체화한 test+sub.MP4
- 자막을 동영상과 일체화하고 Audio를 제거한 test+sub-audio.MP4
로 나누어서 분석을 진행했으나 내용이 많은 관계로 분석내용은 바로 뒷 포스팅에 작성할 것임을 알린다.
추가로 MP4와 SMI 확장자 형태의 자막 파일을 사용했다.
2. MP4 File Structure
박스(box)
파일의 기본 단위로 크기와 타입, 데이터를 가진다.
박스의 최소 크기는 8byte이다.
- Size : 32bit , box 의 크기
- Type : 32bit , box 의 이름
크기는 크기와 타입 필드를 포함한 박스의 전체 크기이다.
데이터는 타입에 따른 데이타나 자식 박스(child box)가 올 수 있다. (예전에는 atom으로 불렸다.)
파싱 순서는 다음과 같다.
1. 파일 오픈
2. 헤더 읽기
2-1. 4byte 읽어 사이즈 확인( 1인 경우 사이즈 필드가 8byte 임)
2-2. 4byte 읽어 타입 저장
3. Atom 확인
4. Atom 파싱 루틴
5. 2~4 반복
MP4 파일 구조
MP4 파일은 데이타와 메타데이타 박스를 구성할 수 있는 다양한 방법을 제공한다.
더불어 MP4는 공식적으로 ISO/IEC 14496-14:2003 MPEG-4의 일부 규정된 멀티미디어 컨테이너 포맷이다.
크게 3가지로 나눌 수 있다. ftyp, moov, mdat.
또한 기본구조는 다음과 같다.
- ftyp : 파일의 호환성을 확인하는 파일 타입 박스 (file type box)
- moov : 미디어의 모든 메타 데이타를 저장하는 무비 박스, meta data 시작 (movie box)
- mvhd: 무비 헤더 박스, movie 정보 (movie header box)
- iods: IOD (Object Descrptor)
- trak : 무비 안의 단일 트랙을 정의하는 박스, 트랙 시작 (track box)
- tkhd : 트랙의 특성을 기술, 트랙 헤더 (track header box)
- tref: 트랙 메타 처리시 참조할 트랙 (Track Reference)
- edts : (edit box)
- elst : (edit list box)
- mdia : 트랙의 미디어 타입과 샘플 데이터, 미디어 시작 (media box)
- mdhd : 미디어의 특성을 기술, 미디어와 관련한 일반적 내용 (media header box)
- hdlr : 미디어 타입 (handler reference box)
- minf : 미디어 정보, 샘플 데이터를 얻기 위한 정보 (media information box)
- vmhd: 미디어 타입 (Media Information Header)
- dinf: 데이터 정보, 샘플 데이터의 위치를 얻기 위한 정보 (Data Information)
-
- dref: 파일 내의 존재 여부 및 파일명 (Data Reference)
- hdlr : (handler reference box)
- stbl : 샘플 테이블 (sample table box)
- stsd : 트랙의 디코딩에 필요한 코덱의 정보 (sample description box)
- esds: h.263 es descriptor (ES Description)
- avcC: AVC Configuration Box
- MPEG4 Extension Descriptor Box
- stts : 샘플의 시간 (time-to-sample box)
- stsz : 청크 내 샘플의 크기 (sample size box)
- stsc : 청크 내 샘플의 수 (sample to chunk box)
- stco : 청크의 위치 (chunk offset box)
- stbl: (Sync Sample)
- trak
- mdat : 실제 미디어를 저장하는 미디어 데이타 박스(media data box)
- trak
- stsd : 트랙의 디코딩에 필요한 코덱의 정보 (sample description box)
-
- mdia : 트랙의 미디어 타입과 샘플 데이터, 미디어 시작 (media box)
- elst : (edit list box)
moov와 mdat는 위 그림과 달리 순서가 바뀌어도 상관이 없다.
그러나 moov가 mdat 앞에 있으면 플레이어가 비디오/오디오 데이터를 재생하기 전에 이것에 관한 더 많은 정보를 얻을 수 있다.
때문에 moov가 앞에 위치하는 것이 좋다.
일부 플레이어는 HTTP Progressive Download를 이용하는 경우, moov가 앞에 있지 않으면 재생이 되지 않는다.
인코딩을 하면 mdat가 moov 앞에 위치해진다.
이후에는 MP4 파일 구조에 대한 전체적인 도식화 그림과 각 Box 별 세부 내용을 살펴보겠다.
>>> 각 Box 별 세부 내용 및 기본 MP4(k3g)관련 데이터
MEDIA DATA : mdat
Type |
32bits |
“mdat” |
Data |
Variable |
코딩된 Video 및 Audio data와 hint sample |
Movie Box : moov
Size |
32bits |
Movie Atom의 size |
Type |
32bits |
“moov” |
Movie Header Box : mvhd
Size |
32bits |
Movie Header Atom의 size |
Type |
32bits |
“mvhd” |
Version |
8bits |
Movie Header Atom의 version (1이면 8byte시간, 0이면 4byte시간 사용) |
Flags |
24bits |
0 |
Creation-time |
64bits 또는 32bits |
File이 만들어진 시간 |
Modification-time |
64bits 또는 32bits |
File이 수정된 시간 |
Timescale |
64bits 또는 32bits |
File의 timescale |
Duration |
64bits 또는 32bits |
File의 play 시간 (timescale기준) |
Reserved |
32bits |
0x00010000 |
Reserved |
16bits |
0x0100 |
Reserved |
16bits |
0 |
Reserved |
32bits * 2 |
0 |
Reserved |
32bits * 9 |
0x00010000, 0, 0, 0, 0x00010000, 0, 0, 0, 0x4000000 |
Reserved |
32bits * 6 |
0 |
Next-track-ID |
32bits |
사용가능한 다음 track-ID 번호 |
IOD Box : iods
Size |
32bits |
IOD Atom의 size |
Type |
32bits |
“iods” |
Version |
8bits |
0 |
Flag |
24bits |
0 |
ObjectDescriptor |
Variable |
Initial Object Descriptor |
ObjectDescriptor
Tag |
8bits |
0x10 |
Length |
32bits |
0x80808019 |
ObjectDescriptorID |
10bits |
1 |
URL_Flag |
1bit |
0 |
IncludeInlineProfile LevelFlag |
1bit |
0 |
Reserved |
4bits |
0xF |
ODProfile LevelIndication |
8bits |
0xFF |
SceneProfile LevelIndication |
8bits |
0xFF |
AudioProfile LevelIndication |
8bits |
0x01 |
VisualProfile LevelIndication |
8bits |
0x03 |
GraphicsProfile LevelIndication |
8bits |
0xFF |
Tag |
8bits |
0x0E |
Length |
32bits |
0x80808004 |
ES_ID |
32bits |
OD 혹은 BIFS Track의 ID |
Tag |
8bits |
0x0E |
Length |
32bits |
0x80808004 |
ES_ID |
32bits |
OD 혹은 BIFS Track의 ID |
VIDEO TRACK : track
Size |
32bits |
Track Atom의 size |
Type |
32bits |
“trak” |
Track Header Box : tkhd
Size |
32bits |
Track Header Atom의 size |
Type |
32bits |
“tkhd” |
Version |
8bits |
Track Header Atom의 version (1이면 8byte시간, 0이면 4byte시간 사용) |
Flags |
24bits |
0x000001 |
Creation-time |
64bits 또는 32bits |
Track이 만들어진 시간 |
Modification-time |
64bits 또는 32bits |
Track이 수정된 시간 |
Track-ID |
32bits |
Track의 ID값 |
Reserved |
32bits |
0 |
Duration |
32bits |
Track의 play 시간 (movie timescale기준) |
Reserved |
32bits * 3 |
0 |
Reserved |
16bits |
0 |
Reserved |
16bits |
0 |
Reserved |
32bits * 9 |
0x00010000, 0, 0, 0, 0x00010000, 0, 0, 0, 0x40000000 |
Reserved |
32bits |
0x01400000 |
Reserved |
32bits |
0x00F00000 |
Media Box : mdia
Size |
32bits |
Media Atom의 size |
Type |
32bits |
“mdia” |
Media Header Box : mdhd
Size |
32bits |
Media Header Atom의 size |
Type |
32bits |
“mdhd” |
Version |
8bits |
Track Header Atom의 version (1이면 8byte시간, 0이면 4byte시간 사용) |
Flags |
24bits |
0 |
Creation-time |
64bits 또는 32bits |
Media가 만들어진 시간 |
Modification-time |
64bits 또는 32bits |
Media가 수정된 시간 |
Timescale |
32bits |
Media의 timescale |
Duration |
64bits 또는 32bits |
Media의 play 시간 (media timescale기준) |
Pad |
1bit |
0 |
language |
5bits * 3 |
packed ISO-639-2/T language code |
reserved |
16bits |
0 |
Handler Box : hdlr
Size |
32bits |
Handler Atom의 size |
Type |
32bits |
“hdlr” |
Version |
8bits |
0 |
Flags |
24bits |
0 |
Reserved |
32bits |
0 |
Handler-type |
32bits |
“vide” |
Reserved |
8bits * 12 |
0 |
String |
var |
“vide” |
Media Information Box : minf
Size |
32bits |
Media Information Atom의 size |
Type |
32bits |
“minf” |
Media Information Header Box : vmhd
Size |
32bits |
Media Information Header Atom의 size |
Type |
32bits |
“vmhd” |
Version |
8bits |
0 |
Flags |
24bits |
1 |
Reserved |
64bits |
0 |
Data Information Box : dinf
Size |
32bits |
Data Information Atom의 size |
Type |
32bits |
“dinf” |
Data Reference Box : dref
Size |
32bits |
Data Reference Atom의 size |
Type |
32bits |
“dref” |
Version |
8bits |
0 |
Flags |
24bits |
0 |
Entry-count |
32bits |
1 |
Size |
32bits |
Data Entry Atom의 size |
Type |
32bits |
“url ” |
Version |
8bits |
0 |
Flags |
24bits |
0x000001 |
Sample Table Box : stbl
Size |
32bits |
Sample Table Atom의 size |
Type |
32bits |
“stbl” |
Time To Sample Box : stts
Size |
32bits |
Time To Sample Atom의 size |
Type |
32bits |
“stts” |
Version |
8bits |
0 |
Flags |
24bits |
0 |
Entry-count |
32bits |
Sample-count 와 Sample-delta pair의 전체 개수 |
Sample-count |
32bits |
같은 delta값을 가지는 연속된 sample개수 |
Sample-delta |
32bits |
Sample의 duration (media timescale기준) |
<계속> |
||
Sample-count |
32bits |
같은 delta값을 가지는 연속된 sample개수 |
Sample-delta |
32bits |
Sample의 duration (media timescale기준) |
Sample Description Box : stsd
Size |
32bits |
Sample Description Atom의 size |
Type |
32bits |
“stsd” |
Version |
8bits |
0 |
Flag |
24bits |
0 |
Entry-count |
32bits |
1 |
Size |
32bits |
Sample Entry Atom의 size |
Type |
32bits |
“mp4v” |
Reserved |
8bits * 6 |
0 |
Data-reference-index |
16bits |
1 |
Reserved |
32bits * 4 |
0 |
Reserved |
32bits |
0x014000F0 |
Reserved |
32bits |
0x00480000 |
Reserved |
32bits |
0x00480000 |
Reserved |
32bits |
0 |
Reserved |
16bits |
1 |
Reserved |
8bits * 32 |
0 |
Reserved |
16bits |
24 |
Reserved |
16bits |
-1 |
ESDAtom |
Variable |
ES Descriptor |
H.264 Sample Description : stsd
Size |
32bits |
Sample Description Box의 size |
Type |
32bits |
“stsd” |
Version |
8bits |
0 |
Flag |
24bits |
0 |
Entry-count |
32bits |
1 개수 (아래의 회색 영역이 이 개수만큼 반복된다) |
Size |
32bits |
Sample Entry Box의 size |
Type |
32bits |
“avc1” |
Reserved |
8bits * 6 |
0 |
Data-reference-index |
16bits |
1 |
Pre_defined |
16bits |
0 |
Reserved |
16bits |
0 |
Pre_defined |
32bits * 3 |
0 |
Width |
16bits |
Maximum width, in pixels of the stream |
Height |
16bits |
Maximum height, in pixels of the stream |
Horizresolution |
32bits |
0x00480000 //72 dpi |
Vertiresolution |
32bits |
0x00480000 //72dpi |
Reserved |
32bits |
0 |
Frame_count |
16bits |
1 |
compressorname |
8bits * 32 |
0 |
Depth |
16bits |
0x0018 |
Pre_defined |
16bits |
-1 |
AVCConfigurationBox |
Variable |
AVCVideoConfigurationRecord |
MPEG4ExtensionDescriptorsBox |
Variable |
Descriptor //Optional |
ES Description Box : esds
Size |
32bits |
ESD Atom의 size |
Type |
32bits |
“esds” |
Version |
8bits |
0 |
Flags |
24bits |
0 |
Tag |
8bits |
0x03 |
Length |
8/16/24/32bits(가변) |
ES Descriptor의 length |
ES_ID |
16bits |
0 |
StreamDependence Flag |
1bit |
0 |
URL_Flag |
1bit |
0 |
OCRstreamFlag |
1bit |
0 |
StreamPriority |
5bit |
0 |
Tag |
8bits |
0x04 |
Length |
8/16/24/32bits(가변) |
Decoder Config Descriptor의 length |
ObjectType Indication |
8bits |
0x20 |
StreamType |
6bits |
0x04 |
Upstream |
1bits |
0 |
Reserved |
1bits |
1 |
BufferSizeDB |
24bits |
Decoding Buffer의 size |
MaxBitrate |
32bits |
최대 bitrate |
AvgBitrate |
32bits |
평균 bitrate |
Tag |
8bits |
0x05 |
Length |
8/16/24/32bits(가변) |
Decoder Specific Info의 length |
Info data |
Variable |
VisualObjectSequence, VisualObject 전부와Group_of_VideoObjectPlane과 VideoObjectPlane을 제외한 VideoObjectLayer를 포함 |
Tag |
8bits |
0x06 |
Length |
8/16/24/32bits(가변) |
SL Config Descriptor의 length |
Predefined |
8bits |
2 |
Sample Size Box : stsz
Size |
32bits |
Sample Size Atom의 size |
Type |
32bits |
“stsz” |
Version |
8bits |
0 |
Flags |
24bits |
0 |
Sample-size |
32bits |
0 |
Sample-count |
32bits |
전체 Sample의 개수 |
Entry-size |
32bits |
첫번째 Sample의 size |
<계속> |
||
Entry-size |
32bits |
마지막 Sample의 size |
Sample To Chunk Box : stsc
Size |
32bits |
Sample To Chunk Atom의 size |
Type |
32bits |
“stsc” |
Version |
8bits |
0 |
Flags |
24bits |
0 |
Entry-count |
32bits |
first-chunk, samples-per-chunk, sample-description-index의 전체 개수 |
First-chunk |
32bits |
Chunk당 sample개수와 sample description index가 같은 연속된 chunk중 첫번째 chunk의 index |
Sample-per-chunk |
32bits |
Chunk당 sample의 개수 |
Sample-description-index |
32bits |
1 |
<계속> |
||
First-chunk |
32bits |
Chunk당 sample개수와 sample description index가 같은 연속된 chunk중 첫번째 chunk의 index |
Sample-per-chunk |
32bits |
Chunk당 sample의 개수 |
Sample-description-index |
32bits |
1 |
Chunk Offset Box : stco
Size |
32bits |
Chunk Offset Atom의 size |
Type |
32bits |
“stco” |
Version |
8bits |
0 |
Flags |
24bits |
0 |
Entry-count |
32bits |
전체 Chunk의 개수 |
Chunk-offset |
32bits |
File의 처음으로부터 첫번째 chunk까지의 offset |
<계속> |
||
Chunk-offset |
32bits |
File의 처음으로부터 마지막 chunk까지의 offset |
Sync Sample Box : stss
Size |
32bits |
Sync Sample Atom의 size |
Type |
32bits |
“stss” |
Version |
8bits |
0 |
Flags |
24bits |
0 |
Entry-count |
32bits |
전체 Sync Sample의 개수 |
Sample Number |
32bits |
Sync Sample Number |
<계속> |
||
Sample Number |
32bits |
Sync Sample Number |
H.264 AVC Configuration Box : avcC
Size |
32bits |
AVC Configuration Box의 size |
Type |
32bits |
“avcC” |
Configuration Version |
8bits |
1 |
AVC Profile indication |
8bits |
Profile code |
Profile compatibility |
8bits |
Compatible한 profile을 나타냄 |
AVC Level indication |
8bits |
Level code |
Reserved |
6bits |
0b111111 |
Length Size Minus One |
2bits |
NALU Length field의 byte 수 - 1 |
Reserved |
3bits |
0b111 |
Num of Sequence Parameter Sets |
5bits |
SPS의 개수 |
Sequence Parameter Set Length |
16bits |
Parameter set NALU의 길이 |
Sequence Parameter Set NAL Unit |
Variable |
SPS NAL Unit |
<계속> |
||
Sequence Parameter Set Length |
16bits |
Parameter set NALU의 길이 |
Sequence Parameter Set NAL Unit |
Variable |
SPS NAL Unit |
Num of Picture Parameter Sets |
8bits |
PPS의 개수 |
Picture Parameter Set Length |
16bits |
Parameter set NALU의 길이 |
Picture Parameter Set NAL Unit |
Variable |
PPS NAL Unit |
<계속> |
||
Picture Parameter Set Length |
16bits |
Parameter set NALU의 길이 |
Picture Parameter Set NAL Unit |
Variable |
PPS NAL Unit |
Audio Track : trak
Size |
32bits |
Track Atom의 size |
Type |
32bits |
“trak” |
Track Header Box : tkhd
Size |
32bits |
Track Header Atom의 size |
Type |
32bits |
“tkhd” |
Version |
8bits |
Track Header Atom의 version (1이면 8byte시간, 0이면 4byte시간 사용) |
Flags |
24bits |
0x000001 |
Creation-time |
64bits 또는 32bits |
Track이 만들어진 시간 |
Modification-time |
64bits 또는 32bits |
Track이 수정된 시간 |
Track-ID |
32bits |
Track의 ID값 |
Reserved |
32bits |
0 |
Duration |
32bits |
Track의 play 시간 (movie timescale기준) |
Reserved |
32bits * 3 |
0 |
Reserved |
16bits |
0x0100 |
Reserved |
16bits |
0 |
Reserved |
32bits * 9 |
0x00010000, 0, 0, 0, 0x00010000, 0, 0, 0, 0x40000000 |
Reserved |
32bits |
0 |
Reserved |
32bits |
0 |
Media Box : mdia
Size |
32bits |
Media Atom의 size |
Type |
32bits |
“mdia” |
Media Header Box : mdhd
Size |
32bits |
Media Header Atom의 size |
Type |
32bits |
“mdhd” |
Version |
8bits |
Track Header Atom의 version (1이면 8byte시간, 0이면 4byte시간 사용) |
Flags |
24bits |
0 |
Creation-time |
64bits 또는 32bits |
Media가 만들어진 시간 |
Modification-time |
64bits 또는 32bits |
Media가 수정된 시간 |
Timescale |
32bits |
Media의 timescale |
Duration |
64bits 또는 32bits |
Media의 play 시간 (media timescale기준) |
Pad |
1bit |
0 |
language |
5bits * 3 |
packed ISO-639-2/T language code |
reserved |
16bits |
0 |
Handler Box : hdlr
Size |
32bits |
Handler Atom의 size |
Type |
32bits |
“hdlr” |
Version |
8bits |
0 |
Flags |
24bits |
0 |
Reserved |
32bits |
0 |
Handler-type |
32bits |
“soun” |
Reserved |
8bits * 12 |
0 |
String |
Var |
“soun” |
Media Information Box : minf
Size |
32bits |
Media Information Atom의 size |
Type |
32bits |
“minf” |
Media Information Header Box : smhd
Size |
32bits |
Media Information Header Atom의 size |
Type |
32bits |
“smhd” |
Version |
8bits |
0 |
Flags |
24bits |
0 |
Reserved |
32bits |
0 |
Data Reference Box :dref
Size |
32bits |
Data Reference Atom의 size |
Type |
32bits |
“dref” |
Version |
8bits |
0 |
Flags |
24bits |
0 |
Entry-count |
32bits |
1 |
Size |
32bits |
Data Entry Atom의 size |
Type |
32bits |
“url ” |
Version |
8bits |
0 |
Flags |
24bits |
0x000001 |
Sample Table Box : stbl
Size |
32bits |
Sample Table Atom의 size |
Type |
32bits |
“stbl” |
Time To Sample Box : stts
Size |
32bits |
Time To Sample Atom의 size |
Type |
32bits |
“stts” |
Version |
8bits |
0 |
Flags |
24bits |
0 |
Entry-count |
32bits |
Sample-count 와 Sample-delta pair의 전체 개수 |
Sample-count |
32bits |
같은 delta값을 가지는 연속된 sample개수 |
Sample-delta |
32bits |
Sample의 duration (media timescale기준) |
<계속> |
||
Sample-count |
32bits |
같은 delta값을 가지는 연속된 sample개수 |
Sample-delta |
32bits |
Sample의 duration (media timescale기준) |
Sample Description Box : stsd
Size |
32bits |
Sample Description Atom의 size |
Type |
32bits |
“stsd” |
Version |
8bits |
0 |
Flag |
24bits |
0 |
Entry-count |
32bits |
1 |
Size |
32bits |
Sample Entry Atom의 size |
Type |
32bits |
“mp4a” |
Reserved |
8bits * 6 |
0 |
Data-reference-index |
16bits |
1 |
Reserved |
32bits * 2 |
0 |
Reserved |
16bits |
2 |
Reserved |
16bits |
16 |
Reserved |
32bits |
0 |
Time-scale |
16bits |
Sample의 timescale |
Reserved |
16bits |
0 |
ESDAtom |
Variable |
ES Descriptor |
ESD Box :esds
Size |
32bits |
ESD Atom의 size |
Type |
32bits |
“esds” |
Version |
8bits |
0 |
Flags |
24bits |
0 |
Tag |
8bits |
0x03 |
Length |
8/16/24/32bits(가변) |
ES Descriptor의 length |
ES_ID |
16bits |
0 |
StreamDependence Flag |
1bit |
0 |
URL_Flag |
1bit |
0 |
OCRstreamFlag |
1bit |
0 |
StreamPriority |
5bit |
0 |
Tag |
8bits |
0x04 |
Length |
8/16/24/32bits(가변) |
Decoder Config Descriptor의 length |
ObjectType Indication |
8bits |
AAC : 0x40, MP3 : 0x6B EVRC/QCELP/AMR/G.723의 경우 별도의 SampleEntry로 지원 |
StreamType |
6bits |
0x05 |
Upstream |
1bits |
0 |
Reserved |
1bits |
1 |
BufferSizeDB |
24bits |
Decoding Buffer의 size |
MaxBitrate |
32bits |
최대 bitrate |
AvgBitrate |
32bits |
평균 bitrate |
Tag |
8bits |
0x05 |
Length |
8/16/24/32bits(가변) |
Decoder Specific Info의 length |
Info data |
variable |
AudioObjectType, samplingFrequencyIndex, (SamplingFrequency), channelConfiguration, epConfig를 포함 |
Tag |
8bits |
0x06 |
Length |
8/16/24/32bits(가변) |
SL Config Descriptor의 length |
Predefined |
8bits |
2 |
Sample Size Box : stsz
Size |
32bits |
Sample Size Atom의 size |
Type |
32bits |
“stsz” |
Version |
8bits |
0 |
Flags |
24bits |
0 |
Sample-size |
32bits |
0 |
Sample-count |
32bits |
전체 Sample의 개수 |
Entry-size |
32bits |
첫번째 Sample의 size |
<계속> |
||
Entry-size |
32bits |
마지막 Sample의 size |
Sample To Chunk Box : stsc
Size |
32bits |
Sample To Chunk Atom의 size |
Type |
32bits |
“stsc” |
Version |
8bits |
0 |
Flags |
24bits |
0 |
Entry-count |
32bits |
first-chunk, samples-per-chunk, sample-description-index의 전체 개수 |
First-chunk |
32bits |
Chunk당 sample개수와 sample description index가 같은 연속된 chunk중 첫번째 chunk의 index |
Sample-per-chunk |
32bits |
Chunk당 sample의 개수 |
Sample-description-index |
32bits |
1 |
<계속> |
||
First-chunk |
32bits |
Chunk당 sample개수와 sample description index가 같은 연속된 chunk중 첫번째 chunk의 index |
Sample-per-chunk |
32bits |
Chunk당 sample의 개수 |
Sample-description-index |
32bits |
1 |
Chunk Offset Box : stco
Size |
32bits |
Chunk Offset Atom의 size |
Type |
32bits |
“stco” |
Version |
8bits |
0 |
Flags |
24bits |
0 |
Entry-count |
32bits |
전체 Chunk의 개수 |
Chunk-offset |
32bits |
File의 처음으로부터 첫번째 chunk까지의 offset |
<계속> |
||
Chunk-offset |
32bits |
File의 처음으로부터 마지막 chunk까지의 offset |
Size |
32bits |
Sync Sample Atom의 size |
Type |
32bits |
“stss” |
Version |
8bits |
0 |
Flags |
24bits |
0 |
Entry-count |
32bits |
전체 Sync Sample의 개수 |
Sample Number |
32bits |
Sync Sample Number |
<계속> |
||
Sample Number |
32bits |
Sync Sample Number |
3. Reference
[MP4 file format summary]
→ https://www.programmersought.com/article/57353932020/
[yesing1]
→ https://blog.naver.com/yesing1/70096278829