当前位置:网站首页>FLV格式详解
FLV格式详解
2022-07-06 09:29:00 【狗蛋儿l】
FLV格式概述:
FLV(Flash Video)是Adobe公司设计开发的一种流行的流媒体格式,由于其视频文件体积轻巧、封装简单等特点,使其很适合在互联网上进行应用。此外,FLV可以使用Flash Player进行播放,而Flash Player插件已经安装在全世界绝大部分浏览器上,这使得通过网页播放FLV视频十分容易。
Flv文件格式
Flv由文件头(File Header)和 文件体(File Body)组成。
Flv Body由一系列的Tag组成,每个Tag又有一个preTagSize字段,标记着前面一个Tag的大小。
Flv Header
文件头由一下几部分组成:
Signature(3 Byte)+Version(1 Byte)+Flags(1 Bypte)+DataOffset(4 Byte)
Signature 占3个字节:
固定FLV三个字符作为标示。一般发现前三个字符为FLV时就认为他是flv文件。
Version 占1个字节:
标示FLV的版本号。这里我们看到是1
Flags 占1个字节:
内容标示。第0位和第2位,分别表示 video 与 audio 存在的情况.(1表示存在,0表示不存在)。看到0x05,也就是00000101,代表既有视频,也有音频。
DataOffset 占4个字节:
表示FLV的header长度。
下图是Flv Header的内容,(UI8表示无符号8位,也就是一个字节;UB[5]表示一个字节中的5位)
Flv Body
Flv Body由一个一个Tag组成,每个Tag都有一个preTagSize字段,标记着前面一个Tag的大小。
Tag有三种类型,Audio Tag(音频Tag),Video Tag(视频Tag),script Tag(又称Metadata Tag)
每个Tag由“Tag Header”和“Tag Data”组成,对于不同类型的Tag,“Tag Header”的格式都是相同的,“Tag Body”的格式就不一样了。
下面这张图归纳一下上面讲的内容,看完后对flv应该有个总体的了解了。
一般一个flv文件由一个头部信息,一个script Tag,以及若干个video Tag和audio Tag组成。
下面来详细讲解每种类型的Tag Data
Tag Data
Flv有三种tag:“Audio Tag Data”、“Video Tag Data”、“Script Tag Data”
Aideo tag是由tag Header + Tag Data组成:
tag Header:
TagType: 8 (1 byte)
TagType 代表含义如下:
8: audio
9 : video
18 : script data
DataSize: 7 (3 bytes)
tag Data大小
tag Header大小 = Previous Tag Size - DataSize
TimeStamp: 0 (3 bytes) 时间戳
TimestampExtended: 0 (1 byte) 扩展时间戳
StreamId: 0 (3 bytes) 流ID
Audio Tag Data:
Video tag 解析:
video tag是由tag Header + Tag Data组成:
tag Header:
TagType: 9 (1 byte)
TagType 代表含义如下:
- 8: audio
- 9 : video
- 18 : script data
DataSize: 50 (3 bytes)
tag Data大小
tag Header大小 = Previous Tag Size - DataSize
TimeStamp: 0 (3 bytes) 时间戳
TimestampExtended: 0 (1 byte) 扩展时间戳
StreamId: 0 (3 bytes) 流ID
Video Tag Data
scripts tag 解析:
该类型Tag又通常被称为MetadataTag,会放一些关于FLV视频和音频的元数据信息如:duration、width、height等。通常该类型Tag会跟在FileHeader后面作为第一个Tag出现,而且只有一个。
tag Header:
TagType: 18 (1 byte)
TagType 代表含义如下:
8: audio
9 : video
18 : script data
DataSize: 293 (3 bytes)
tag Data大小
tag Header大小 = Previous Tag Size - DataSize
TimeStamp: 0 (3 bytes) 时间戳
TimestampExtended: 0 (1 byte) 扩展时间戳
StreamId: 0 (3 bytes) 流ID
tag Data:
AMF包:第一个字节表示AMF包的类型
第一个AMF包:
第一个字节一般为0x02,表示字符串,第2-3个字节表示字符串的长度,一般为0x000A,后面跟的就是字符串,一般为"onMetaData"。
第二AMF包:
第一个字节为0x08,表示数组,第2-5个字节表示数组元素个数,后面跟着就是数组的元素,格式为:元素名长度(UI16) + 元素名(UI8[n]) + 元素的值(double),最后以“009”结尾。
边栏推荐
- Flask框架配置loguru日志库
- 树莓派4B64位系统安装miniconda(折腾了几天终于解决)
- Investigation report of bench type Brinell hardness tester industry - market status analysis and development prospect prediction
- Suffix expression (greed + thinking)
- Spark独立集群动态上线下线Worker节点
- Pytorch extract skeleton (differentiable)
- (POJ - 3579) median (two points)
- 新手必会的静态站点生成器——Gridsome
- Codeforces - 1526C1&&C2 - Potions
- 807. Maintain the urban skyline
猜你喜欢
Radar equipment (greedy)
Sword finger offer II 019 Delete at most one character to get a palindrome
Raspberry pie 4B installation opencv3.4.0
Codeforces Round #802(Div. 2)A~D
< li> dot style list style type
Pytorch extract skeleton (differentiable)
Maximum product (greedy)
The "sneaky" new asteroid will pass the earth safely this week: how to watch it
Hbuilder X格式化快捷键设置
Advancedinstaller安装包自定义操作打开文件
随机推荐
QT实现圆角窗口
Research Report of desktop clinical chemical analyzer industry - market status analysis and development prospect prediction
useEffect,函数组件挂载和卸载时触发
Read and save zarr files
Generate random password / verification code
Raspberry pie 4B installation opencv3.4.0
Problem - 922D、Robot Vacuum Cleaner - Codeforces
Codeforces Round #799 (Div. 4)A~H
js封装数组反转的方法--冯浩的博客
Research Report on market supply and demand and strategy of Chinese table lamp industry
Spark的RDD(弹性分布式数据集)返回大结果集
QT模拟鼠标事件,实现点击双击移动拖拽等
Spark独立集群动态上线下线Worker节点
读取和保存zarr文件
Codeforces Round #802(Div. 2)A~D
Effet d'utilisation, déclenché lorsque les composants de la fonction sont montés et déchargés
图图的学习笔记-进程
第6章 Rebalance详解
Radar equipment (greedy)
Useeffect, triggered when function components are mounted and unloaded