FLV
FLV (Flash Video)
FLV는 Flash Player 6부터 지원되는 포맷으로, Flash Player Server/Client에서 audio와 video를 다루기 위한 포맷이다. FLV 컨테이너의 추상화는 RTMP와 매우 닮아있다. FLV의 데이터는 big-endian으로 다뤄진다. FLV 컨테이너는 FLV header와 FLV body로 구성되어 있으며, FLV의 tag (track)는 최대 오디오 1개와 비디오 1개로 구성될 수 있다. FLV header Fig. 0과 같다.
- “FLV” Char로 시작
- Version (8): 2010.09.03 spec 기준으로 현재 version은 1
- TypeFlagsReserved (5): Reserved bit, 0
- TypeFlagsAudio (1): Audio tag의 존재 여부, 존재하면 1
- TypeFlagsReserved (1): Reserved bit, 0
- TypeFlagsVideo (1): Video tag의 존재 여부, 존재하면 1
- DataOffset (32): File의 시작으로부터 body 까지의 byte (Header의 크기).
FLV Body
FLV의 body는 Fig. 1과 같이 4byte 크기의 이전 tag의 크와 tag 가 interleaving 되어있다. 가장 앞의 tag size는 0으로 채워진다.
각각의 FLV tag는 tag header와 tag data로 구성되어있다.
- TagType (8): Tag의 종류. Audio=8, Video=9, Script data= 18
- DataSize (24): Tag data의 크기
- Timestamp (24): timestamp (u_int24)
- TimestampExtended (8): timestamp의 확장. 확장 시 timestamp는 int32로 표기되며, 그 중 TimestampExtended 는 upper bit를 표기
- StreamID (24): 0
- Data: Tag data
Audio Tag
Audio tag는 Fig. 3와 같이 audio header와 data부분으로 또 한번 나뉜다. 그리고 AAC(Advanced Audio Coding)로 압축된 데이터를 담고있는 경우에는 Fig.4 와 같이 SoundData의 앞에 1 byte 크기의 AAC header가 존재한다.약 1 byte 크기의 data에 정보를 압축하는 대신 다양한 포맷을 지원하지 못한다.
Fig. 3: FLV sound(audio) tag [0]
- SoundFormat (4): PCM/Codec
- SoundRate (2): 5.5 kHz, 11 kHz, 22 kHz, 44 kHz
- SoundSize (1): 압축되지 않은 데이터의 sample format
- SoundType (1): Mono/Stereo
- SoundData
Video Tag
Audio 데이터와 마찬가지로 video 데이터의 가장 앞에는 1byte 크기의 video header가 붙는다. 그리고 AVC(Advanced Video Coding)을 이용하여 압축된 데이터의 경우 Fig. 6의 AVC header를 따로 갖는다
- FrameType: I/P/B frame 정보
- CodecID: Codec 정보
- VideoData