美文网首页
FLV格式解析

FLV格式解析

作者: zjjcc | 来源:发表于2018-03-18 19:20 被阅读221次

FLV是一个二进制文件,简单来说,其是由一个文件头(FLV header)和很多tag组成(FLV body)。

tag又可以分成三类:audio,video,script,分别代表音频流,视频流,脚本流,而每个tag又由tag header和tag data组成。

FLV整体结构图:

FLV整体结构图

1、FLV文件头结构分析

      FLV文件头结构图:

FLV文件头结构图

        FLV文件头由9bytes组成,前3个bytes是文件类型,总是“FLV”,也就是(0x46 0x4C 0x56)。第4btye是版本号,目前一般是0x01。第5byte是流的信息,倒数第一bit是1表示有视频(0x01),倒数第三bit是1表示有音频(0x4),有视频又有音频就是0x01 | 0x04(0x05),其他都应该是0。最后4bytes表示FLV 头的长度,3+1+1+4 = 9。

2、 FLV body结构分析

        FLV body由若干个tag 组成。每一个tag第一部分是tag header,tag header长度为11bytes,但是每个tag header前面有4bytes记录着上一个tag的长度。

        tag结构图:

tag结构图

        tag header:

        1)第1个byte为记录着tag的类型,音频(0x8),视频(0x9),脚本(0x12);

        2)第2到4bytes是数据区的长度,也就是tag data的长度;

        3)再后面3个bytes是时间戳,单位是毫秒,类型为0x12则时间戳为0,时间戳控制着文件播放的速度,可以根据音视频的帧率类设置;

        4)时间戳后面一个byte是扩展时间戳,时间戳不够长的时候用;

        5)最后3bytes是streamID,但是总为0,再后面就是数据区了(tag data),也即是h264的裸流;

        6)tag header 长度为1+3+3+1+3=11。

        音频TagData结构分析:

音频TagData结构图

        音频参数中各字段的值及其意义如下表所示:

  音频参数对照表

        视频TagData结构:

视频TagData结构图

        Script TagData结构

        Script Tag通常被称为Metadata Tag,会放一些关于FLV视频和音频的元数据信息如:duration、width、height等。通常此类型Tag会跟在File Header后面作为第一个Tag出现,而且只有一个。

Script TagData结构图

        第一个AMF包:

        第1个字节表示AMF包类型,一般总是0x02,表示字符串。第2-3个字节为UI16类型值,标识字符串的长度,一般总是 0x000A(“onMetaData”长度)。后面字节为具体的字符串,一般   为“onMetaData”(6F,6E,4D,65,74,61,44,61,74,61)。

所以第一个AMF包总共占13字节。

        第二个AMF包结构图:

  第二个AMF包结构图

        第1个字节表示AMF包类型,一般总是0x08,表示数组。第2-5个字节为UI32类型值,表示数组元素的个数,后面即为各数组元素的封装。数组元素为元素名称和值组成的对。“数组元素结构”部分是推测,已经确认适用于duration、width、height等常见元素,但并不确认适用于所有元素。常见的数组元素如下表所示。

数组元素 名对照表

附上一个flv的查看工具:地址

相关文章

  • 音视频容器

    容器 ts\mp4\flv refrence FLV 封装格式解析[https://www.cnblogs.com...

  • FLV格式解析

    FLV是一个二进制文件,简单来说,其是由一个文件头(FLV header)和很多tag组成(FLV body)。 ...

  • FLV格式解析

    简介 FLV(Flash Video)是现在非常流行的流媒体格式,由于其视频文件体积轻巧、封装播放简单等特点,使其...

  • FLV格式解析

    1.FLV文件格式如下,由flv头和一系列tag组成,tag又分为script tag、音频tag、视频tag。 ...

  • H5直播系列九 flv.js源码之flv-demuxer.js

    参考FLV.JS 代码解读--demux部分 flv.js源码看一下关于FLV格式解析部分,很多奇怪的逻辑和数字,...

  • FLV封装格式解析

    一、简介 FLV(Flash Video)是现在非常流行的流媒体格式,由于其视频文件体积轻巧、封装播放简单等特点,...

  • FLV 封装格式解析

    FLV 简介 FLV(Flash Video) 是 Adobe 公司推出的一种流媒体格式,由于其封装后的音视频文件...

  • Flv文件格式解析

    Flv文件解析 Flv文件分为header和body两个部分 Header Body TAG TAG_DATA S...

  • FLV封装格式

    FLV封装格式是由⼀个⽂件头(FLV header)和 ⽂件体(FLV body)组成。其中FLV body由若干...

  • FLV封装格式介绍及解析

    如需转载,请注明出处: Qpppp https://www.jianshu.com/p/419f99be3989...

网友评论

      本文标题:FLV格式解析

      本文链接:https://www.haomeiwen.com/subject/xzneqftx.html