티스토리 뷰

> 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
댓글
안내
궁금한 점을 댓글로 남겨주시면 답변해 드립니다.