从二进制分析flv数据流

利用utralEdit打开flv的文件可以看到如下:


以头信息为例进行分析如下:


这个是对flv格式的视频数据进行分析的一个总结。

一、File Header结构
  File Header在当前版本中总是由9个字节组成,如图中蓝色区域所示。
  第1-3字节为文件标识(Signature),总为“FLV”(0x46 0x4C 0x56),如图中紫色区域。
  第4字节为版本,目前为1(0x01)。
  第5个字节的前5位保留,必须为0。
  第5个字节的第6位表示是否存在音频Tag。
  第5个字节的第7位保留,必须为0。
  第5个字节的第8位表示是否存在视频Tag。
  第6-9个字节为UI32类型的值,表示从File Header开始到File Body开始的字节数,版本1中总为9。

Tag结构

  Tag包括Tag Header和Tag Data两部分。不同类型的Tag的Header结构是相同的,但是Data结构各不相同。如图中绿色和黄色区域分别表示Tag Header数据和Tag Data数据。

  当前版本的Tag Header结构占用11个字节。

  第1个字节表示Tag类型,包括音频(0x08)、视频(0x09)和script data(0x12),其他类型值被保留。

  第2-4字节为UI24类型的值,表示该Tag Data部分的大小。

  第5-7字节为UI24类型的值,表示该Tag的时间戳(单位为ms),第一个Tag的时间戳总是0。

  第8个字节为时间戳的扩展字节,当24位数值不够时,该字节作为最高位将时间戳扩展为32位值。

  第9-11字节为UI24类型的值,表示stream id,总是0。

  后面的字节为Tag Data数据,Data的大小由第2-4字节的数值指示,根据第1个字节指示的Tag类型,按照不同的结构解析Tag Data。下面分别介绍。

原本的格式如下


从下图更形象的看出tag和body的结构



发布了591 篇原创文章 · 获赞 322 · 访问量 196万+

猜你喜欢

转载自blog.csdn.net/u011046042/article/details/60783123