> 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


Posted by 옴팡투덜이
BLOG main image
by 옴팡투덜이

공지사항

카테고리

분류 전체보기 (59)
감상과 비평 (15)
자기 고찰 (0)
Infomation (40)
아이디어 (0)
일탈을 꿈꾸는 나의 일상 (1)

최근에 올라온 글

최근에 달린 댓글