一、简介:
FLV是一种既可以做直播又可以做点播的封装格式。FLV应该算是3G时代到4G时代初期时的产物,因为那个时候受限于带宽能力及存储限制,FLV以其良好的画质效果,更小的体积而备受青睐,当然,随着5G时代短视频和直播领域的兴起,当存储空间不再是瓶颈,FLV终会被MP4/TS等取代,FLV封装有较为严格的音视频编码限制,即FLV封装的音频格式以AAC/MP3/SPEEX为主,视频则以H264为主。FLV的封装格式比较简单,均以FLVTAG的形式存在,并且每一个TAG都是独立存在的。
二、FLVTAG介绍:
1.FLV文件格式分为两部分:一部分为FLV文件头,另一部分为FLV文件内容。FLV文件头解析如下:
可以看到,当码流文件的前三个字节被判定为FLV的时候,即认为是FLV封装。
2.跳过封装头之后,就是封装内容,文件封装内容排布如下:
FLV_HEADER | PreTagSize0 | TAG1 | PreTagSize1 | TAG2 | … |
---|---|---|---|---|---|
flv文件头描述信息 | 大小总是为0(4字节) | 第1个TAG | 上一个TAG的大小:tag的header+body(4字节) | 第2个TAG | … |
3.TAG的header排布:
tag_header中包含了码流的timestamp,以及描述了后续tag_body是音频流还是视频流。
4.TAG的body排布:
tag_body根据音视频类型其内部关键字肯定是不一样的,如果从FLVTAG的Header中读取到TagType为0x09,则该TAG为视频数据TAG:
如果从FLVTAG的Header中解析到TagType为0x08,则TAG为音频:
四、FLV分析工具:
有网友自制的非常好用的工具FlvAnalyzer,解析出来的数据如下:
五,鸣谢:
博客大部分内容摘自刘歧、赵文杰著《FFmpeg从入门到精通》。