logo资料库

flv文件结构.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
Signature(3 字节)为文件标识,总为”FLV”,(0x46,0x4c,0x66) Version(1 字节)为版本,目前为 0x01 Flags(1 字节)前 5 位保留,必须为 0。第 6 位表示是否存在音频 Tag。第 7 位保留,必须为 0。第 8 位表示是否存在视频 Tag。 Headersize(4 字节)为从 File Header 开始到 File Body 开始的字节数,版本 1 中总为 9。 Previous Tag Size #0(4 字节)表示前一个 Tag 的长度 Tag Header Tag #1 Type(1 字节)表示 Tag 类型,包括音频(0x08),视频 (0x09)和 script data(0x12),其他类型值被保留 Datasize(3 字节)表示该 Tag Ddata 部分的大小 Timestamp(3 字节)表示该 Tag 的时间戳 Timestamp_ex(1 字节)表示时间戳的扩展字节,当 24 位数值不够时,该字节最为最高位将时间戳扩展为 32 位数值 Streamed(1 字节)表示 stream id 总是 0 不同类型 Tag 的 data 部分结构各不相同,当 header 的 结构是相同的 Flv Header Flv Body Tag Data Previous Tag size #1 即 Tag #1 的大小(11 + Datasize) Tag #2 Previous Tag size #2 … … Tag #N Previous Tag size #N 注:不同类型的 Tag 的 Header 结构式相同的,但是 data 的结构各不相同,第一个帧通常为 Metadata Tag,即控制帧 Audio Tag Data 结构(音频 Tag) 音频 Tag 开始的第 1 个字节包含了音频数据的参数信息,从第 2 个字节开始为音频流 数据。 第 1 个字节的前 4 位的数值表示了音频数据格式。 0 = Linear PCM, platform endian 1 = ADPCM 2 = MP3 3 = Linear PCM, little endian 4 = Nellymoser 16-kHz mono 5 = Nellymoser 8-kHz mono 6 = Nellymoser 7 = G.711 A-law logarithmic PCM 8 = G.711 mu-law logarithmic PCM 9 = reserved 10 = AAC 14 = MP3 8-Khz
15 = Device-specific sound 第 1 个字节的第 5-6 位的数值表示采样率,0 = 5.5kHz,1 = 11KHz,2 = 22 kHz,3 = 44 kHz。 第 1 个字节的第 7 位表示采样精度,0 = 8bits,1 = 16bits。 第 1 个字节的第 8 位表示音频类型,0 = sndMono,1 = sndStereo。 Video Tag Data 结构(视频 Tag) 视频 Tag 也用开始的第 1 个字节包含视频数据的参数信息,从第 2 个字节为视频流数 据 第 1 个字节的前 4 位的数值表示帧类型(FrameType) 1: keyframe (for AVC, a seekableframe)(关键帧) 2: inter frame (for AVC, a nonseekableframe) 3: disposable inter frame (H.263only) 4: generated keyframe (reservedfor server use only) 5: video info/command frame 第 1 个字节的后 4 位的数值表示视频编码 ID(CodecID) 1: JPEG (currently unused) 2: Sorenson H.263 3: Screen video 4: On2 VP6 5: On2 VP6 with alpha channel 6: Screen video version 2 7: AVC Script Tag Data 结构(控制帧) 该类型 Tag 又通常被称为 Metadata Tag,会放一些关于 FLV 视频和音频的参数信息如: duration、width、height 等。通常该类型 Tag 会跟在 File Header 后面作为第一个 Tag 出现,而且只有一个。 前 11 个字节为 Tag Header 结构 第一个 AMF 包(13 字节): 第 1 个字节表示 AMF 包类型,一般总是 0x02,表示字符串 第 2-3 个字节为 UI16 类型值,一般总是 0x000A(“onMetaData”长度)。 后面字节一般总为“onMetaData”。(6F,6E,4D,65,74,61,44,61,74,61) 第二个 AMF 包: 第 1 个字节表示 AMF 包类型,一般总是 0x08,表示数组。 第 2-5 个字节为 UI32 类型值,表示数组元素的个数。 后面即为各数组元素的封装,数组元素为元素名称和值组成的对。表示方法如下: 第 1-2 个字节表示元素名称的长度,假设为 L。 后面跟着为长度为 L 的字符串。 第 L+3 个字节表示元素值的类型。 后面跟着为对应值,占用字节数取决于值的类型。 常见的数组元素如下: duration: a DOUBLE indicating the total duration of the file in seconds width: a DOUBLE indicating the width of the video in pixels height: a DOUBLE indicating the height of the video in pixels videodatarate: a DOUBLE indicating the video bit rate in kilobits per second
framerate: a DOUBLE indicating the number of frames per second videocodecid: a DOUBLE indicating the video codec ID used in the file audiosamplerate: a DOUBLE indicating the frequency at which the audio stream is replayed audiosamplesize: a DOUBLE indicating the resolution of a single audio sample stereo: a BOOL indicating whether the data is stereo audiocodecid: a DOUBLE indicating the audio codec ID used in the file filesize: a DOUBLE indicating the total size of the file in bytes
分享到:
收藏