FLV详解:FLVHeader与Stream结构及音频视频标签解析

需积分: 37 21 下载量 99 浏览量 更新于2024-11-25 收藏 2KB TXT 举报
FLV(Flash Video)文件格式详解 FLV是一种专为网络流媒体设计的文件格式,由Adobe公司开发,主要用于在线视频传输,尤其是YouTube等早期的视频分享平台。FLV文件结构由两个主要部分组成:FLVHeader和FLVStream。 **FLVHeader** 是FLV文件的头部信息,它包含以下几个关键字段: - **Signature**:用于标识文件类型,固定为"FLV"。 - **Version**:版本号,最初为0x01,表示FLV 1.0规范。 - **Flags**:标志位,可以组合0x01(视频)、0x04(音频)、0x05(同时包含视频和音频),指示流媒体数据的类型。 - **Offset**:表示FLVHeader后的第一个FLVTag的偏移量,即0x00 0x00 0x00 0x09。 **FLVStream** 部分包含了连续的FLVTag,每个Tag有以下几个组成部分: - **PreviousTagSize**:前一个Tag的大小,用4字节表示整数值,对于第一个Tag,这个值通常为0。 - **FLVTag**: - **Type**:标签类型,包括音频(0x08)、视频(0x09)和元数据(0x12)。 - **BodyLength**:标签体的长度,用3字节表示整数值。 - **Timestamp**:时间戳,用3字节表示,对于简单的时间戳,值为0通常表示当前时间。 - **TimestampExtended**:扩展时间戳,对于FLV 1.0规范,通常为0,表示不使用扩展时间戳。 - **StreamId**:流ID,用于区分不同的音频或视频流,0x000000000表示默认值。 - **Body**:标签体,根据Type的不同,包含音频数据(如ADPCM编码)、视频数据(可能包括帧数据)或元数据(如AMF包,用于传递ActionScript对象数据)。 **音频Tag和VideoTag** 的Body部分具有特定的编码格式标识: - 对于AudioTag: - 第1位到第7位:压缩方式编码,例如0C代表无压缩,1C代表ADPCM,2C代表MP3等。 - 第8位到第11位:采样率,如5.5kHz、11kHz等。 - 第12位到第13位:位深度,8bit或16bit。 - 第14位到第15位:声道数,0C单声道,1C立体声。 - 对于VideoTag: - 类似于AudioTag,但用于描述视频数据,同样包含帧数据和编码标识。 FLV文件格式是一种紧凑且高效的流媒体文件格式,适用于互联网传输,通过Header明确标识内容类型,并通过FLVTag组织音频、视频和元数据,确保在不同网络环境下快速、流畅地播放。理解并解析FLV文件结构对于开发基于Flash的视频应用或进行文件处理至关重要。