-
MPEG-4 파일 시스템의 미디어 샘플과 시간 정보 구하기Streaming Media/Media Tech 2013. 6. 26. 18:09
선행 학습
샘플의 정보를 저장하는 박스
미디어 샘플에 관한 정보는 샘플 테이블 박스에서 구한다. 미디어 샘플 테이블 박스는 "stbl"이라는 타입명을 가진다. 이 박스의 위치는 다음과 같다. (중간에 존재하는 다른 박스는 모두 무시하였다. 자세한 내용은 아래 참고 링크에서 확인한다.)
- moov
- mvhd
- trak
- mdia
- minf
- stbl
stbl 박스는 목적에 맞는 여러 개의 박스를 포함한다.
- co64 - 64-bits Chunk Offsets Box
- ctts -Composition Offset Box
- stco - Chunk Offsets Box
- stsd - Sample Description
- stsc - Sample To Chunk Box
- stss - Sync Sample
- stsz - Sample Size Box
- stts - Time To Sample Box
샘플의 시간
일반적으로 시간은 stts 박스에 기록이 된다. 이 박스에는 아래 형태의 테이블에 샘플(sample)의 재생 시간(duration)을 저장한다. 재생 시간은 timescale을 기본으로 한다.
샘플의 개수
샘플의 재생 시간
아래 테이블로 표현되는 미디어 데이타는 샘플 1~4는 재생 시간 3, 샘플 5~6은 재생 시간 1, 샘플 6~8은 재생 시간 2를 가진다.
4
3
2
1
3
2
...
...
일반적으로는 DTS와 PTS 모두 stts 박스로부터 얻는다. 그러나 DTS와 PTS가 다른 경우, 즉 샘플의 시간 순서가 순차적이지 않은 경우는 ctts 박스를 포함해야 한다. 예를 들어, B 프레임을 사용하는 경우가 이에 해당한다.
시간 순서가 순차적이지 않은 경우는 DTS는 stts, PTS는 ctts로부터 구한다. ctts의 테이블의 구조는 stts와 같다.
미디어의 청크와 샘플
청크 데이타는 하나 이상의 샘플로 구성된다. 청크를 사용하는 이유는 더 효율적인 입출력을 위해서이다.
청크와 샘플의 관계는 stsc 박스에 아래 형태의 테이블로 저장된다.첫번째 청크
청크당 샘플 수
샘플을 기술한 식별자
예를 들면, 다음과 같다.
1
4
1
3
5
1
5
4
1
6
5
1
...
...
...
청크 1~2는 4개의 샘플, 청크 3~4는 5개의 샘플, 청크 5는 4개의 샘플을 가지며, 여기에 나열된 샘플은 이후 stsd 박스의 샘플 기술 식별자 1과 연결되어 있다.
청크의 위치는 stco 또는 co64 박스에서 얻는다. 파일의 크기가 4 GBytes를 초과한다면 co64 박스를 사용해야 한다. 이 박스는 청크의 오프셋의 테이블을 가지고 있다. 이 오프셋은 파일에서의 오프셋임을 주의한다.1516
4880
...
첫번째 청크는 1516 bytes, 두번째 청크는 4880 오프셋에 위치한다.
stsz 박스에서 샘플의 크기의 테이블을 가진다.2219
529
...
첫번째 샘플의 크기는 2219, 두번째는 529 이다.
정리하면, 샘플을 읽기 위해서는
- stsc 박스에서 읽어야 할 청크를 구하고
- stco 또는 co64 박스에서 청크의 위치를 구한 후,
- stsz에서 샘플의 위치와 크기를 얻는다.
기타
stss 박스는 각 샘플이 참조하는 동기화 프레임 (비디오라면 키-프레임)의 번호의 테이블을 가진다.
stsd는 샘플의 코딩하는데 필요한 정보들이 저장된다. AVC라면 SPS, PPS 등이 저장된다.
참고 링크
- QuickTime File Fomat Specification http://developer.apple.com/library/mac/#documentation/QuickTime/QTFF/QTFFPreface/qtffPreface.html
- MP4 SYSTEM 구조 http://blog.daum.net/hopefullife/139
- MP4 File Format Part 1 http://thompsonng.blogspot.kr/2010/11/mp4-file-format.html
- QuickTime container http://wiki.multimedia.cx/index.php?title=QuickTime_container
'Streaming Media > Media Tech' 카테고리의 다른 글
러스트로 MPEG-4 파일 시스템 라이브러리를 만들어보자. (0) 2021.07.12 멀티미디어 서비스를 위한 얕은 지식 (0) 2017.12.21 RTMP의 스트림 이름의 접두어 규칙 (0) 2013.03.06 HTTP Dynamic Streaming 소개 (0) 2013.02.04 Media Presentation Description (MPD) 예제 (0) 2013.01.30 댓글