大家好,欢迎来到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





