前面的文章已经介绍过图像、音频、字幕相关知识,将图像、音频、字幕封装在一起,就形成了我们常见的视频。本篇文章主要介绍下FLV(后文中将介绍TS和MP4)视频封装格式。

1.FLV的封装格式
FLV(Flash Video),Adobe公司设计开发的一种流行的流媒体格式,由于其视频文件体积轻巧、封装简单等特点,使其很适合在互联网上进行应用。除了播放视频,在直播时也可以使用。采用FLV格式封装的文件后缀为.flv,格式如下(FLV = FLV Header + Body):

android获取视频封面 安卓视频封装_android获取视频封面

 2.FLV Header
Header 部分记录了FLV的类型、版本、流信息、Header 长度等。一般整个Header占用9个字节,大于9个字节则表示头部信息在这基础之上还存在扩展数据。FLV Header 的信息排布如下所示:

android获取视频封面 安卓视频封装_数据区_02

 3.FLV Body
Body 是由一个个Tag组成的,每个Tag下面有一块4个字节的空间,用来记录这个Tag 的长度。这个后置的PreviousTagSize用于逆向读取处理,表示的是前面的Tag的大小。FLV Body 的信息排布如下:

android获取视频封面 安卓视频封装_android获取视频封面_03

4.FLV Tag
每个Tag 也是由两部分组成的:Tag Header 和 Tag Data。Tag Header 存放了当前Tag的类型,数据长度、时间戳、时间戳扩展、StreamsID等信息,然后再接着数据区Tag Data。Tag的排布如下:

android获取视频封面 安卓视频封装_数据区_04

 5.2 Video Tag Data
◆ Video Tag 由一个字节的VideoTagHeader 和 Video数据区部分组成

android获取视频封面 安卓视频封装_ide_05


◆ Video数据区部分格式不确定。对于H264/AVC编码部分,Video数据区排布如下: 

android获取视频封面 安卓视频封装_数据区_06

 5.3 Script Tag Data

android获取视频封面 安卓视频封装_android获取视频封面_07