티스토리 뷰
> mp4 파일 시스템 기본 구조
Movie (moov) : meta data 시작
Movie Header (mvhd) : movie 정보
Object Descrptor (iods) : IOD
Track (trak) : 트랙 시작
Track Header (tkhd) : 트랙 헤더
Track Refernce (tref) : 트랙 메타 처리시 참조할 트랙
Media (mdia) : 미디어 시작
Media Header (mdhd) : 미디어와 관련한 일반적 내용
Handler (hdlr) : 미디어 타입
Media Information (minf) : 미디어 정보, 샘플 데이터를 얻기 위한 정보
Media Information Header (vmhd) : 미디어 타입
Data Information (dinf) : 데이터 정보, 샘플 데이터의 위치를 얻기 위한 정보
Data Refernce (dref) : 파일내의 존재 여부 및 파일명
Sample Table (stbl) : 샘플 테이블
Time To Sample (stts) : 샘플의 시간 정보
Sample Description (stsd) : 샘플 디코딩을 위한 정보
ES Descriptor(esds) : h.263 es descriptor
AVC Configuration Box(avcC)
MPEG4 Extension Descriptor Box
Sample Size (stsz)
Sample To Chunk (stsc)
Chunk Offset (stco)
Sync Sample (stbl)
Track
.
.
Media Data (mdat)
> 각 Atom 기본 구조(8byte)
Size : 32bit , Atom 의 크기
Type : 32bit , Atom 의 이름
> 파싱 순서
1. 파일 오픈
2. 헤더 읽기
2-1. 4byte 읽어 사이즈 확인( 1인 경우 사이즈 필드가 8byte 임)
2-2. 4byte 읽어 타입 저장
3. Atom 확인
4. Atom 파싱 루틴
5. 2~4 반복
> 각 Atom 별 세부 내용 및 기본 mp4(k3g)관련 데이터
MEDIA DATA : mdat
Type |
32bits |
"mdat" |
Data |
Variable |
코딩된 Video 및 Audio data와 hint sample |
Movie Atom : moov
Size |
32bits |
Movie Atom의 size |
Type |
32bits |
"moov" |
Movie Header Atom : 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 Atom : 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 Atom : 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 Atom : mdia
Size |
32bits |
Media Atom의 size |
Type |
32bits |
"mdia" |
Media Header Atom : 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 Atom : 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 Atom : minf
Size |
32bits |
Media Information Atom의 size |
Type |
32bits |
"minf" |
Media Information Header Atom : vmhd
Size |
32bits |
Media Information Header Atom의 size |
Type |
32bits |
"vmhd" |
Version |
8bits |
0 |
Flags |
24bits |
1 |
Reserved |
64bits |
0 |
Data Information Atom : dinf
Size |
32bits |
Data Information Atom의 size |
Type |
32bits |
"dinf" |
Data Reference Atom : 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 Atom : stbl
Size |
32bits |
Sample Table Atom의 size |
Type |
32bits |
"stbl" |
Time To Sample Atom : 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 Atom : 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 Atom : 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 Atom : 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 Atom : 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 Atom : 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 Atom : 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 Atom : 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 Atom : mdia
Size |
32bits |
Media Atom의 size |
Type |
32bits |
"mdia" |
Media Header Atom : 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 Atom : 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 Atom : minf
Size |
32bits |
Media Information Atom의 size |
Type |
32bits |
"minf" |
Media Information Header Atom : smhd
Size |
32bits |
Media Information Header Atom의 size |
Type |
32bits |
"smhd" |
Version |
8bits |
0 |
Flags |
24bits |
0 |
Reserved |
32bits |
0 |
Data Reference Atom :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 Atom : stbl
Size |
32bits |
Sample Table Atom의 size |
Type |
32bits |
"stbl" |
Time To Sample Atom : 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 Atom : 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 Atom :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 Atom : 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 Atom : 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 Atom : 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 |
원본 위치 <http://sasperger.tistory.com/103>
'기억하자정보' 카테고리의 다른 글
우분투 서버 한글 설정 (0) | 2012.05.15 |
---|---|
MYSQL 백업 및 복원 (0) | 2012.05.14 |
리눅스 백업 스크립트 (0) | 2011.12.01 |
우분투 11.10 에서 JDK 설치 (0) | 2011.11.29 |
소켓이용해서 post형태로 보내기 (0) | 2009.10.24 |
- 안내
- 궁금한 점을 댓글로 남겨주시면 답변해 드립니다.