FLV封装格式剖析

FLV封装格式剖析一 FLV 格式组成 FLV FlashVideo 是由 Adobe 公司推出的一种流媒体格式 它是随着 FlashMX 的推出发展而来的视频格式

大家好,欢迎来到IT知识分享网。

一、FLV格式组成

FLV (Flash Video) 是由 Adobe 公司推出的一种流媒体格式,它是随着Flash MX的推出发展而来的视频格式。由于其封装后的音视频文件体积小、封装简单等特点,非常适合于互联网上使用。目前主流的视频网站基本都支持FLV。采用FLV格式封装的文件,一般文件后缀定义为.flv。

1、 FLV Header

【FLV Header 图2】
在这里插入图片描述
所有 FLV 格式文件都以 FLV Header 开头,FLV封装头,共占9个字节。



  • Signature:3个字节。FLV文件标识,固定为“F”,“L”,“V”(0x46,0x4C,0x56)
  • Version:1个字节。FLV 版本,例如,0x01 表示 FLV 版本 1
  • Typeflags:1个字节。前5个bit为保留位默认为0;第6 bit为音频存在标记位(1存在,0不存在);第7bit保留位默认为0;第8bit为视频存在标记位(1存在,0不存在)。
  • Dataoffset:4个字节。表示从Header起始位置到Body起始位置的字节数(即Header的大小),FLV版本1中为9。

参数说明:

  • Tagtype:1个字节。表示tag类型:音频(0x08)、视频(0x09)和scriptdata(0x12)等。
  • DataSize:3个字节。表示tag的data模块的大小。
  • Timestamp:3个字节。表示tag的时间戳,单位:ms。相对值,第一个tag的时间戳总是为0。
  • TimestampExtended:1个字节。表示时间戳的扩展字节,当24位数值不够时,以该字节位最高位将时间戳扩展为32位数值。
  • StreamID:3个字节。默认为0。
  • TagData:数据域数据,不同类型的tag的data部分的结构各不相同。

注意:

  • flv文件中Timestamp和TimestampExtended拼出来的是dts(解码时间,单位:ms);如果不存在B帧,dts=pts。
  • CompositionTime表示PTS相对DTS的偏移值(单位:ms),在每个视频tag的第14~16字节。
    显示时间(pts)=解码时间(tag的第5~8字节)+CompositionTime。

二、Tag Data结构

前文中我们知道Tag Type包含三种类型:音频、视频和scriptdata等。下面我们对这些数据结构进行详细介绍。

第二个AMF包(蓝框): 第1个字节表示AMF包类型,一般总是0x08,表示数组。第2-5个字节为UI32类型值,表示数组元素的个数。后面即为各数组元素的封装,数组元素为元素名称和值组成的对。常用的数组元素如下图所示。

【script Tag Data AMF数组类型说明 图6】
在这里插入图片描述
说明:Lavf54.63.104即是 Libavformat version 54.63.104. 即是ffmpeg对于库的版本。



1)音频数据参数
spec对于AAC而言,比较有用的字段是SoundFormat。

【Audio Tag Data 音频数据参数取值 图8】
在这里插入图片描述



2)音频流数据
解析该数据时,需要先判断该数据是音频的config信息,还是真正的音频数据。

【Audio Tag Data 音频数据 图9】
在这里插入图片描述

【AACAUDIODATA 图10】
在这里插入图片描述






1)视频数据参数

【Video Tag Data 视频数据参数取值 图11】
在这里插入图片描述


三、FLV封装数据解析框架

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/125641.html

(0)
上一篇 2025-09-25 15:26
下一篇 2025-09-25 15:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信