본문 바로가기
Security/[ETC] etc

AVI헤더, RIFF헤더 구조

by blackcon 2013. 9. 14.

출처 :: http://home.postech.ac.kr/~lionbaeg/cs499/research.htm

Research

1. Web 2.0

미래의 웹 혹은 인터넷 환경 변화에 대한 방향성을 제시한 일종의 패러다임으로, 특정한 기술을 지칭하는 말은 아니다. Web 2.0에서는 단순한 website의 집합체를 web 1.0으로 보고, web application을 제공하는 하나의 완전한 플랫폼으로의 발전을 web 2.0이라고 지칭한다. Web 2.0이라는 용어는 'O'Reilly Media'에서 2004년에 사용되기 시작하면서 대중화 되었다.

Web 2.0의 기본 철학 = 참여, 개방, 공유

2. AVI Format


기본적으로 AVI도 마이크로소프트의 WAV 사운드 파일처럼 RIFF 포맷의 일부이다. 다른 RIFF 파일과 마찬가지로 AVI 파일도 하나의 RIFF 헤더와 여러 개의 chunk와 list로 구성되어 있다. RIFF 헤더, chunk, list의 기본 구조도는 다음과 같다.

위치 이름 크기 의미
0x00 groupID 4 RIFF 파일을 나타낸다. "RIFF"가 저장되어 있음.
0x04 groupSize 4 헤더 8바이트를 제외한 파일 크기.
0x08 riffType 4 AVI 파일을 나타낸다. "AVI"가 저장되어 있음.
헤더의 구조

위치 이름 크기 의미
0x00 chunkID 4 어떤 종류의 chunk인지를 나타낸다.
0x04 chunkSize 4 ID와 size 8바이트를 제외한 실제 저장된 데이터 크기.
0x08 Data n 실제 저장된 데이터
Chunk의 구조

위치 이름 크기 의미
0x00 groupID 4 LIST임을 나타내는 문자열. "LIST"가 저장되어 있다.
0x04 listSize 4 ID와 size 8바이트를 제외한 실제 저장된 데이터 크기.
0x08 listType 4 어떤 종류의 list인지를 나타내는 문자열.
0x0C Data n 실제 저장된 데이터. Chunk또는 또 다른 list가 올 수 있다.
List의 구조
< RIFF 헤더, chunk, list 블록의 구조 >

다음은AVI 파일의 구조도이다.


<AVI 파일 구조>

그림에서 보듯이 list 안에는 여러 개의 chunk 블록과 또 다른 list들이 들어 있을 수 있다. 맨 처음 RIFF 헤더가 오고 다음에는 동영상 재생과 관련된 여러 가지 정보를 담고 있는 헤더 리스트가 온다. 그리고 파일 크기를 일정하게 만들기 위한 JUNK 블록이 오는데 이는 선택 사항으로 없을 수도 있다. 그 다음 실제 오디오/비디오 데이터를 담고 있는 audio/video data list가 온다.

헤더 리스트의 구조는 다음과 같다.

위치 이름 크기 의미
0x00 groupID 4 "LIST"
0x04 listSize 4 헤더 8바이트를 제외한 리스트 크기.
0x08 ListType 4 "strl"
0x0C ListData n 오디오/비디오 스트림 헤더(strh)와 오디오/비디오 스트림 포맷(strf)가 들어있다.
< 헤더 리스트의 구조 >

헤더 리스트 안에는 AVI 헤더(avih)와 AVI 스트림 list(strl)가 들어 있는데 각각의 구조는 다음과 같다.

위치 이름 크기 의미
0x00 chunkID 4 “avih”
0x04 chunkSize 4 헤더 8바이트를 제외한 데이터 크기.
0x08 MicroSecPerFrame 4 프레임과 프레임 사이 시간 간격. 단위는 밀리초
MaxBytesPerSec 4 최대 초당 전송 바이트 수.
Reserved 4  
Flags 4 플래그. 인덱스 유무 등을 나타낸다.
TotalFrames 4 총 프레임 수
InitialFrames 4 시작 프레임
Streams 4 스트림 개수. 하나의 오디오와 비디오가 있는 경우 스트림 수는 2.
SuggestedBufferSiz 4 파일을 읽을 때 사용할 버퍼 크기
Width 4 이미지 폭. 픽셀 단위.
Height 4 이미지 높이.픽셀 단위.
Reserved 16  
AVI 헤더

위치 이름 크기 의미
0x00 groupID 4 “LIST”
0x04 listSize 4 헤더 8바이트를 제외한 리스트 크기.
0x08 ListType 4 어떤 헤더 리스트인가를 나타내는 문자열 “hdrl”이 들어 있다.
0x0C ListData n AVI 헤더(avih)와 AVI 스트림 list(strl)가 온다.
AVI 스트림
< AVI 헤더와 AVI 스트림 리스트의 구조 >

AVI 스트림 리스트 안에는 스트림 개수에 따라 하나 또는 그 이상의 오디오/비디오 스트림 헤더와 오디오/비디오 스트림 포맷이 들어 있다. 다음은 오디오/비디오 스트림 헤더와 포맷의 구조이다. 오디오/비디오 스트림 포맷은 코덱에 따라 차이가 날 수 있다.

위치 이름 크기 의미
0x00 chunkID 4 “strh”
0x04 chunkSize 4 헤더 8바이트를 제외한 데이터 크기.
0x08 fccType 4 스트림의 유형. “vids”는 비디오 스트림을 나타내고 “auds”는 오디오 스트림을 나타낸다.
fccHandler 4 데이터 핸들러를 가리키는 문자열. 보통 사용한 오디오/비디오 코덱을 나타낸다.
Flags 4 플래그.
Priority 2 중요도. 여러 개의 스트림이 있을 때 중요도가 가장 높은 스트림이 디폴트 스트림이 된다.
Language 2 언어.
InitialFrames 4 오디오 데이터가 비디오 데이터에 비해 얼마나 앞서 있는가를 나타냄
Scale 4 Rate / Scale = 초당 샘플링 수.
Rate 4
Start 4 시작 시간
Length 4 길이
SuggestedBufferSize 4 버퍼 크기
Quality 4 화질 또는 음질. 0에서 10,000 사이의 값을 가진다. –1이면 디폴트 값을 사용한다.
SampleSize 4 샘플 데이터의 크기
Frame 16 비디오가 출력될 윈도우 크기.
< 오디오/비디오 스트림 헤더 >

위치 이름 크기 의미
0x00 chunkID 4 “strf”
0x04 chunkSize 4 헤더 8바이트를 제외한 데이터 크기.
0x08 Data n 오디오/비디오 스트림 포맷 데이터
< 표 6 오디오/비디오 스트림 포맷 >

그 다음에 실제 오디오/비디오 데이터가 저장된 비디오/오디오 데이터 리스트가 온다. “movi” 리스트 안에 여러 개의 오디오/비디오 데이터 chunk가 들어있다. 이들 데이터 chunk들은 다시 “rec” 리스트로 묶여 있을 수 있다.

위치 이름 크기 의미
0x00 groupID 4 “LIST”
0x04 groupSize 4 헤더 8바이트를 제외한 리스트 크기.
0x08 ListType 4 “movi”
0x0C groupID 4 “LIST”
0x10 groupSize 4 헤더 8바이트를 제외한 리스트 크기.
0x14 ListType 4 “rec”. 참고: “rec” 리스트는 생략될 수 있다.
0x18 listID 4 “##wb” 또는 “##dc” 또는 “##db”
0x1C groupSize 4 헤더 8바이트를 제외한 데이터 크기.
0x20 data 4 실제 오디오/비디오 데이터
: : : :         :
< 데이터 리스트 >

'Security > [ETC] etc' 카테고리의 다른 글

[memo] 자주 쓰는 OPCODE  (0) 2015.12.10
2014년 KUCIS 영남권 세미나 발표자료  (0) 2014.11.03
PNG File header  (0) 2013.05.28
JFIF Header  (0) 2013.05.03
about KAKAO (project)  (0) 2013.01.29