第 1 章 FLV 文件格式FLV 文件中的每种标签类型均构成单一数据流。一个 FLV 文件中最多包含一个音频流和一个视频流二者同步。FLV 文件无法定义多个同类型独立流。与 SWF 文件不同FLV 文件以大端字节序存储多字节整数。例如数字 3000x12C在 SWF 格式中为 UI16 类型字节序列是 0x2C 0x01在 FLV 格式中为 UI16 类型字节序列是 0x01 0x2C。此外FLV 使用 SWF 未采用的 3 字节整数类型UI24无符号 24 位整数。FLV 文件头所有 FLV 文件均以以下文件头开头表格字段类型说明签名UI8固定为 F0x46签名UI8固定为 L0x4C签名UI8固定为 V0x56版本UI8文件版本如 FLV 1 版为 0x01保留标志UB[5]必须为 0音频标志UB[1]存在音频标签保留标志UB[1]必须为 0视频标志UB[1]存在视频标签数据偏移UI32从文件起始到主体起始的字节偏移即文件头大小FLV 1 版的数据偏移通常为 9。该字段用于兼容未来版本的更大文件头。FLV 文件主体FLV 文件头之后剩余部分由回指指针与标签交替组成结构如下表格字段类型说明前一标签大小 0UI32固定为 0标签 1FLVTAG第一个标签前一标签大小 1UI32前一标签总大小含头部FLV 1 版为 11 前一标签数据大小标签 2FLVTAG第二个标签………倒数第二个标签大小UI32倒数第二个标签大小最后一个标签FLVTAG最后一个标签最后一个标签大小UI32最后一个标签大小FLV 标签FLV 标签格式如下表格字段类型说明标签类型UI88 音频9 视频18 脚本数据其余保留数据大小UI24数据字段长度时间戳UI24标签数据生效时间毫秒相对第一个标签固定为 0时间戳扩展UI8时间戳高 8 位与低 24 位组成 32 位有符号整数流 IDUI24固定为 0数据—标签类型 8→音频数据9→视频数据18→脚本数据对象播放时FLV 标签的时序仅由时间戳决定忽略负载数据内置的计时机制。音频标签音频标签与 SWF 的 DefineSound 标签类似负载数据基本一致仅新增 SWF 不允许的 Nellymoser 8kHz 格式。音频数据表格字段类型说明音频格式UB[4]0 平台字节序 PCM3 小端 PCM416kHz 单声道 Nellymoser58kHz 单声道 Nellymoser6Nellymoser10AAC11Speex15 设备专属音频采样率UB[2]05.5kHz111kHz222kHz344kHzAAC 固定为 3采样位深UB[1]08 位116 位仅未压缩格式有效压缩格式内部解码为 16 位声道UB[1]0 单声道1 立体声Nellymoser 固定 0AAC 固定 1音频数据UI8 [长度]格式 10→AAC 音频数据否则为对应格式音频数据格式 3PCM存储原始 PCM 采样8 位为无符号字节16 位为小端有符号数立体声为左 - 右交替存储。格式 0 与格式 3 一致但 16 位采样按创建平台字节序存储不建议使用。Nellymoser 8kHz/16kHz 为特殊情况采样率无法用采样率字段表示指定该格式时忽略采样率与声道字段。AAC 格式的采样率、声道字段会被播放器忽略实际参数从 AAC 码流提取。AAC 音频数据Flash Player 9.0.115.0 及以上支持 AAC 格式。表格字段类型说明AAC 包类型UI80AAC 序列头1 原始 AAC 帧AudioSpecificConfig 定义见 ISO 14496-3与 MP4/F4V 的 esds 盒子内容不同结构更深。视频标签视频标签与 SWF 的 VideoFrame 标签类似负载数据一致。视频数据表格字段类型说明帧类型UB[4]1 关键帧AVC 可搜索帧2 间帧AVC 不可搜索3 可丢弃间帧仅 H.263编解码器 IDUB[4]1JPEG未使用2Sorenson H.2633 屏幕视频4On2 VP65 带透明通道 VP66 屏幕视频 v27AVCH.264视频数据—按编解码器 ID 对应数据包帧类型 5 时负载为 1 字节0 客户端搜索序列开始1 客户端搜索序列结束。AVC 视频包承载 AVC 视频数据负载。表格字段类型说明AVC 包类型UI80AVC 序列头1AVC NALU2AVC 序列结束合成时间偏移见 ISO 14496-12 8.15.3FLV 中偏移单位为毫秒。AVCDecoderConfigurationRecord 见 ISO 14496-15 5.2.4.1与 MP4/F4V 的 avcC 盒子信息一致。数据标签封装单次方法调用通常在 Flash Player 的 NetStream 对象上执行由方法名与参数集组成。脚本数据表格字段类型说明对象SCRIPTDATAOBJECT[]任意数量脚本数据对象结束标记UI24固定为 9脚本数据对象 / 结束标记脚本数据对象定义 ActionScript 对象数据包含对象名与对象数据。结束标记固定为 9标识对象列表结束。脚本数据字符串 / 长字符串字符串长度UI16 字符串数据。长字符串长度UI32 字符串数据用于超过 65535 字符的字符串。脚本数据值表示 ActionScript 值 / 对象支持数字、布尔、字符串、对象、数组、日期等类型不同类型对应不同存储格式。onMetaData 元数据FLV 可包含onMetaData标记元数据通过 NetStream.onMetaData 暴露给 ActionScript常见字段时长、宽、高、视频码率、帧率、视频编解码器 ID音频采样率、采样位深、立体声、音频编解码器 ID文件大小