MP4(MPEG-4 part 14)
비디오 및 오디오 스트림을 저장하는 동영상 포맷이며, ISOBMFF(ISO Base Media File Format)으로 정의된다.
ISOBMFF
- ISO가 개발
- 포맷 종류 : Media Container
- QuickTime(.Mov)로 부터 확장
- ISOBMFF의 대표적인 확장 포맷 (mp4, 3gp, 3g2, mj2, dub, dcf …..)
MP4 파일은 3가지의 구조적인 특징을 가진다.
logical structure (논리적 구조) : 시간과 관련된 병렬적인 트랙(audio, video)로 구성됨
time structure (시간적 구조): 각 track은 시간에 따른 sample sequence로 이루어짐
physical structure (물리적 구조) : 모든 데이터는 box라 불리는 형태로 저장됨
MP4 파일 아키텍쳐 구조

file
- moive 트랙에 시간 데이터를 저장
- time과 관련 없는 데이터를 저장
- 간혹 위 두 가지 모두를 저장 할 때도 있다
- 동기와를 위한 common timeline을 정의
Track
- 특정 미디어 유형(코덱)에 해당
- 단일 디코더에 연결되어 있음 (확장 가능 한 코덱 제외)
- 다른 트랙에 연결 하거나 그룹화 또는 다른 트랙으로 대체 가능
- item에 있는 untimed data와 관련이 있을 수 있음
- 암호화 될 수 있음
- sample로 분해됨
Sample
- 지정된 시간 (DTS, CTS)에 디코더가 사용하는 연속데이터를 나타냄
- 속성(크기,위치,랜덤 엑세스, 디코더 configuration)가 저장되어 있다.
- Sub-Sample의 관점에서 표현 될 수도 있다.
- Sample Group 내의 다른 비슷한 Sample과 연관이 있을 수도 있다.
- 샘플별 보조 정보가 존재 할 수도 있다.
Item
- Movie 전체에 대해 사용되는 Data를 나타냄
- Type, Position, size 등과 같은 속성을 가짐
- 암호화 되어있거나, 압축화 되어있어서 확인이 어려울 수 있음
physical structure (물리적 구조)
MP4 파일에서 모든 데이터는 Box(박스)라고 불리는 구조로 저장되어 있다. 각 박스는 length, type(4바이트), Version, flag, data를 저장한다.

Extensible format(확장 형식)
- 잘 알려지지 않은 Box는 생략 할 수 있다.
- Header 정보는 Box의 계층 구조이다.
- Media data는 Header와 동일한 파일 Box(주로 ‘mdat’ 또는 ‘idat’)에 구조화되지 않고 저장되거나 별도의 파일에 저장 될 수 있다.
MP4 파일의 일반적인 구조
위에서 소개한 여러 Box들이 모여 MP4 파일은 계층적 구조를 가진다.

FTYP
- filetype의 약자로, i per file, File type, File version, 다른 ISO file 과의 호환성을 알려주는 박스
Moov(moive)
- Presentaion(표현)과 관련된 MetaDate를 위한 Unique Container (고유 컨테이너)
mvhd(moive Hedear) : movie에 대한 일반적인 정보를 가진 박스
trak(track) : 하나의 steam과 연관된 metadata container
tkhd(track header) : track에 대한 전반적인 정보를 가지고 있는 박스
mdia(media information) : track안의 media imformation에 대한 container
mdhd(media header) : media에 대한 전반적인 정보를 가지고 있음
minf(media information container) : 미디어 정보 컨테이너
vmhd(video media header) : 비디오 미디어 헤더 박스
dinf/dref(Data information/Data Reference) : data의 위치를 나타내는 박스
stbl(Sample Table) : Sample과 관련된 Meta 데이터를 가짐
stsd(sample Description) : Sample Decoder configuration 정보
stts(time to sample) : 샘플의 시간 정보
ctts(composition time to sample) : 샘플링 시간
stsc(sample to chkunk) : partial data-offset information (파티션 데이터 오프셋 정보)
hdlr(Handler) : stream의 타입을 의미
tref(track reference container) : 추적 참조 컨테이너
mdat(media Data) : media data를 가지는 박스
아래에 첨부된 온라인 mp4 parser 도구를 이용하면 위에서 설명한 것과 유사한 파일 구조를 볼 수 있다.

다음 2편에서는 각 박스들의 16진수 값들에 대해 작성해보기로 마음 먹으며 글을 마친다.
참고문헌 :
MPEG-4 파일의 구조 개괄 :: 개똥이야기 (tistory.com)
[MP4] 분석 하기 | MPEG-4 파트 14 | MP4Box 설치 (tistory.com)
MP4 파일 구조 – Studying Programming (revol300.github.io)
mp4파일 시스템 구조, mp4파일 구조 : 네이버 블로그 (naver.com)
mp4파일 시스템 구조, mp4파일 구조 : 네이버 블로그 (naver.com)
비디오 – Digital Forensic Wikipedia (korea.ac.kr)
사용된 도구
첨부파일