视频封装格式FLV
FLV的封装格式
FLV(Flash Video)是一种常见的视频封装格式,最初由Adobe公司开发,用于在网络上播放的视频内容。FLV格式通常用于将视频和音频流组合在一起,并以一种紧凑的方式存储在单个文件中。下面是FLV封装格式的一些关键点:
FLV Header
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三种
Audio Tag Data
音频的TagData又分为AudioTagHeader和Data数据区,其排布结构如下图所示:
Video Tag Data
- Video Tag由一个字节的VideoTagHeader和Video数据区部分组成
- Video数据区部分格式不确定。对于H264/AVC编码部分,Video数据区排布如下:
本文作者:不会笑的孩子
本文链接:https://www.cnblogs.com/doubleconquer/p/18099719
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具