FLV的封装格式
FLV(Flash Video)是一种常见的视频封装格式,最初由Adobe公司开发,用于在网络上播放的视频内容。FLV格式通常用于将视频和音频流组合在一起,并以一种紧凑的方式存储在单个文件中。下面是FLV封装格式的一些关键点:
Header记录了FLV的类型,版本、流信息、Header长度等。一般整个Header占9个字节,大于9个字节则表示头部信息在这基础之上还存在扩展数据。FLV Header的信息排布如下所示:
-
Signature(签名):(3字节)FLV文件头部的前3个字节是固定的签名手段,用于标识文件的格式。签名字段的取值通常维FLV 即ASCII字符 F(0x46) 、L(0x4c) 、V(0x56)
-
Version(版本号):(1字节)紧随签名字段之后的一个字节表示FLV格式的版本号。目前标准版本为1。
-
Flag(标志位):(1字节)前5位保留,必须为0.第6位表示是否存在音频Tag。第7位保留,必须为0。第8位表示是否存在视频Tag。
-
DataOffset(数据偏移量):数据偏移量通常占据头部的后4个字节。它表示FLV头部之后的第一个标签(Tag)相对于文件开头的偏移量。这个字段的值通常为9,因为FLV头部通常占用9个字节,所以第一个Tag的偏移量是从文件开头往后9个字节处开始。
FLV Body
FLV 文件的主体部分(Body)是FLV格式文件的一个组成部分,它包含了实际的视频、音频和元数据信息。FLV文件的主体部分主要由一系列的标签(Tags)组成,每个标签都包含了不同类型的数据,如视频帧、音频帧、脚本数据等。这些标签按照时间顺序排列,构成了整个视频文件的内容。
每个FLV标签通常由一个11字节的头部和一个数据部分组成:
-
头部(Tag Header):FLV标签的头部通常由11个字节组成,包含了关于标签的一些基本信息,如类型、数据长度和时间戳等。FLV标签的头部包括以下字段。
-
类型(Tag Type):标识标签的类型,如音频帧、视频帧或脚本数据等。
-
数据长度(Data Size):指示标签数据部分的长度。
-
时间戳(Timestamp):指示标签的时间戳,用于确定标签的的播放顺序和时间位置。
-
扩展时间戳(ExtendTimestamp):在时间戳字段达到最大值时使用,指示额外的时间戳信息。
-
数据部分(TagData):FLV标签的数据部分包含了具体的视频、音频或其他类型的数据。数据部分的内容取决于标签的类型,如视频帧标签将包含视频数据,音频帧标签将包含音频数据,脚本数据标签将包含ActionScript等数据。
FLV Tag
分为两部分Tag Header 和Tag Data。 Tag Header存放了当前Tag的类型,数据长度、时间戳、时间戳扩展、StreamsID等信息,然后再接着数据区TagData。Tag的排布如下:
Tag Data
Tag Data分成 Audio 、Video、Script三种