借用了FlvParse这个工具和UI,结合官方文档分析出来的。
此工具挺好,就是不开源,而且对于Metadata Tag的数据也没有精确显示到每一个byte。实际使用当中还出现字段没有完全显示之类的。
其中遇到了和作者的一些分歧。所以写下我自己的总结,下面是这个工具的cnblog:
http://www.cnblogs.com/xxcainiao/archive/2010/01/12/1645408.html
===================================================================================
FLV是一个二进制文件,由文件头(FLVheader)和很多tag组成。tag又可以分成三类:audio,video,script(metaData),分别代表音频流,视频流,脚本流(关键字或者文件信息之类)。
######################################################
本文分析的FLV文件来源分别于56网与FMS服务器
######################################################
一、FLV头分析
FLVHeader
一般比较简单,包括文件类型之类的全局信息,如图:
文件类型
|
3bytes
|
总是FLV(0x460x4C0x56),否则...
|
1、FLV3bytes:0x460x4C0x56标识FLV文件
2、版本号1bytes:0x01,表示FLVversion1
3、流信息1bytes:0x04,表示成二进制位00000100,在这8个bit中,倒数第一位为1则表示有视频,倒数第三位为1表示有音频,这里表示有音频
4、Head的大小4bytes:0x000x000x000x09,整个文件头的长度,3bytes+1bytes+1bytes+4bytes=9
5、HeadTag长度4bytes:0x000x000x000x00,一般为0,表示head标签
二、FLV标签分析
FLVHeader之后便是FLVbody,由很多tag组成的。
FLV文件里面帧的实体就是tag了。每个tag都可以分为两部分,第一部分包含是tag类型信息,长度固定为15bytes
MetadataTag
第一个tag为MetadataTag[0x0000000D]
1、TagHeader11bytes:
a、type(类型)1bytes:此处为0x12即十进制的18
b、datasize(数据区长度)3bytes:此处为0x000x000xE0
c、timestamp(时间戳)3bytes:此处为0x000x000xE0
d、expandtimestamp(扩展时间戳)1bytes:此处为0x00
e、streamid(流ID)3bytes:此处为0x000x000xE0
2、TagData(大小为TagHeader中字段datasize+11[head的长度])
前18bytes定死,填0也行,不过一般保持默认
a、amf1type1bytes:固定为0x02
b、stringsize2bytes:固定为0x000x0A,即为10长度,表示字符串onMetaData的长度
c、string10bytes(由上一个字段stringsize决定):固定为0x6F0x6E0x4D0x650x740x640x440x610x740x61,表示字符串onMetaData
d、amf2type1bytes:固定为0x08
e、arraysize4bytes:表示接下来的metadataarraydata中有多少组数据
综上:在metadatatagdata部分的长度可以这么计算:
metadataarraydatasize=datasize(数据区长度)-18bytes(上面几个字段的长度)
f、metadataarraydata:①前面2bytes表示,第N个数组的名字所占的bytes,继续读下去就可以知道数组的名字,例:
这里为0x000x08表示后面的8个bytes表示数组的名字
duration即为读出来的数组的名字信息
②跟着下去的1bytes表示这个数组的属性信息,
大体的类型介绍如下:
00类型-----随后的8bytes表示该属性对应的float值;
01类型-----随后的1bytes表示boolean,比如是否有视频为01表示“含有”的意思;
02类型-----后跟的2bytes表示字符串长度,然后再根据这个长度从后边的bytes中读取出字符串;
03类型-----数组信息的结束;
0A类型-----数据变量,占4bytes;
0B类型-----占10bytes,表示日期;
③metadataarraydata最后的3个bytes应为0x000x000x09表示metadataarraydata的结束
PreTagsize:MetadataTag总的长度4bytes
可以通过以下公式来计算这个长度:
PreTagsize=datasize+18+11;
事实证明:
把MetadataTagdata数据全部填上0也不影响数据的播放。但删掉后从新改写各个size却显示无法渲染==估计会和前面的flvheader具有相关性。
分享到:
相关推荐
仿照雷老师flv格式分析器写的一个flv分析工具,主要功能如下 1、flv音视频解析,包括视频的基本参数信息,音视频每一帧的大小和时间戳大小,以及一些其他每部参数信息 2、flv视频流和音频流分离功能 3、视频和音频...
用来查看tag 数据,分析flv 格式 神器
输入flv直播地址,实时分析flv文件
基于Qt5.2的flv 文件分析器源码,分析script tag,video tag,audio tag,对学习flv的朋友有帮助
flv流分析工具 可分析flv流数据
目前看到的最好的Flv文件分析工具, 推荐给需要分析Flv的朋友们.
flv格式封装分析器 介绍了flv各个tag的字段及意义,使其对flv封装格式有更好的了解。
1.解析FLV 文件头 2.解析FLV Body内容,包括解析PreviousTagSize 和Tag 标签内容(Script Tag, Audio Tag, Video Tag) 3.提取FLV文件的H264视频流,保存到.h264文件中 4.提取FLV文件的AAC音频流,保存到.aac文件中 ...
自己做的FLV封装格式分析工具。可以分析FLV中每个Tag的信息。 此外还支持分离FLV时的视频流和音频流。 本着开源的原则,包含了源代码。工程使用VC2010和MFC开发完成。
flv Analyser 格式分析工具,流媒体直播flv rtmp 格式分析 Windows 工具,打开flv格式流媒体文件自动分析文件格式。 直播开发分析文件利器。
分析flv格式工具与测试flv文件
FLV 容器,具有 H.264 + AAC 编解码器播放功能 多部分分段视频播放 HTTP FLV 低延迟实时流播放 FLV 通过 WebSocket 实时流播放 兼容 Chrome, FireFox, Safari 10, IE11 和 Edge 十分低开销,并且通过你的浏览器...
rtmp2flv rtmp直播转httpflv
一个开源的FLV文件格式分析器源码,c++编写的
flv 简易demo 包含测试 flv格式视频
全面的解析flv文件格式,中文式的描述,但不偏离原始英文文档,比原始文档讲解更加清晰,不错的flv解析格式,适用于新手,希望可以帮助到你。
FLV mux源码 可将音频和视频封装为FLV容器。已将vc7工程转换为vc6工程
FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV...
flv视频播放flv视频播放flv视频播放flv视频播放flv视频播放flv视频播放flv视频播放flv视频播放flv视频播放flv视频播放flv视频播放flv视频播放flv视频播放flv视频播放flv视频播放flv视频播放flv视频播放flv视频播放...
flv测试视频