MP4(MPEG-4 Part 14)
Video 및 Audio stream을 저장하는데 사용하는 동영상 컨테이너 포맷
ISOBMFF(ISO Base Media File Format) + MP4 extension으로 정의됨
세가지 구조적인 특성을 가진다.
- logical structure : 시간에 병렬적인 트랙(audio, video ..)으로 구성됨.
- time structure : 각 track은 시간에 따른 sample sequence로 이루어짐.
- physical structure : 모든 데이터는 box라 불리는 형태로 저장됨.
ISOBMFF (ISO Base Media File Format)
시간적 순서가 있는 media data(ex. audio video)를 나타내기 위한 format 시간적 정보가 없는 metadata에 대한 것도 지원 파일 구조에 따라 다음과 같은 다양한 용도로 사용이 가능
ISOBMFF
- ISO에 의해서 개발
- 포맷 종류 : Media container
- QuickTime(.mov)로부터 확장
- ISOBMFF의 확장 포맷 : MP4, 3GP, 3G2, .mj2, .dvb, .dcf, .m21, .cmf
- 표준 문서 : ISO/IEC 14496-12, ISO/IEC 15444-12
- 웹사이트 : https://www.iso.org/standart/68960.html
MP4 Rough Architecture
File
- movie 트랙에 시간 데이터 포함
- time과 관련없는 데이터를 포함
- 혹은 둘의 조합을 포함
- 동기화를 위한 common timeline을 정의
Track
- 특정 미디어 유형(코덱)에 해당
- 단일 디코더에 연결됨 (확장 가능한 코덱 제외)
- 다른 트랙에 연결하거나 그룹화 또는 다른 트랙으로 대체 가능
- item에 있는 untimed data와 관련이 있을 수 있음
- 암호화될 수 있음
- sample로 분해됨
Sample
- 지정된 시간(DTS, CTS)에 디코더가 사용하는 연속 데이터를 나타냅니다.
- 속성(크기, 위치, 랜덤 엑세스, 디코더 configuration..)이 있다.
- sub-sample의 관점에서 표현될 수 있음
- sample group 내의 다른 비슷한 sample과 연관이 있을 수 있음
- 샘플별 보조 정보가 있을 수 있음
Item
- movie 전체에 대해 사용되는 data를 나타냄
- type, position, size 등과 같은 속성을 가진다.
- 암호화되있거나 압축되어 있을 수 있다.
MP4 physical structure
BOX
MP4 파일에서 모든 data는 box라고 불리는 구조로 저장되어 있다
각 box는 length, type (4 printable chars), 가능한 version과 flag 그리고 data를 가진다.
Extensible format
- 알려지지 않은 box는 생략할 수 있다.
- Header 정보는 box의 계층 구조 이다.
- media data는 Header와 동일한 파일 box (주로 ‘mdat’ 또는 ‘idat’)에 구조화되지 않고 저장되거나 별도의 파일에 저장될 수 있다.
실제로 후술할 video_sample을 binary형태로 열어서 보면 다음과 같이 box의 형태로 ftyp가 저장되어 있음을 확인할 수 있다.
MP4 File의 일반적인 구조
위의 Box구조를 바탕으로 MP4 File은 다음과 같은 계층적 구조를 가진다.
- ftyp (File Type) : 1 per file, File Type, File version, 다른 ISO file과 호환성을 나타냄
- moov (Movie) : presentation의 metadata를 위한 unique container
- mvhd (Movie Header) : movie에 대한 일반적인 정보 trak (Track) : 하나의 stream과 연관된 Metadata container
- tkhd : track header, track에 대한 전반적인 정보를 가지고 있음
- mdia : track안의 media information에 대한 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 data를 가짐
- stsd (Sample Description) : sample decoder configuration 정보
- stts : (decoding) time to sample, 샘플의 시간 정보
- ctts : (composition) time to sample
- stsc : sample-to-chunk, partial data-offset information
- stsz (Sample To Size) : sample size
- hdlr (Handler) : stream의 타입을 의미
- tref : track reference container
- mvhd (Movie Header) : movie에 대한 일반적인 정보 trak (Track) : 하나의 stream과 연관된 Metadata container
- mdat (Media Data) : media data를 가지는 box
위 파일을 https://www.onlinemp4parser.com을 통해서 분석을 해보면 실제로 위와 비슷한 구조를 가짐을 확인할 수 있다.