AVI封装格式解析

一、AVI简介

AVI(Audio Video Interleaved的缩写) 是一种RIFF文件格式,多用于音视频捕捉、编辑、回放等应用程序中。通常情况下,一个AVI文件可以包含多个不同类型的媒体流(典型的情况下有一个音频流和一个视频流),不过含有单一音频流或单一视频流的AVI文件也是合法的。AVI可以算是Windows操作系统上最基本的、也是最常用的一种媒体文件格式。

RIFF(Resource Interchange File Format资源交互文件格式) ,是由Microsoft提出的一种多媒体文件存储方式,不同编码的视频、音频文件按照RIFF保存,当提取文件时,可以根据RIFF的规则解析文件。常见的RIFF文件有:WAV、AVI等。
RIFF文件使用四字符码FOURCC(four-character code)来表征数据类型,比如‘RIFF’、‘AVI ’、‘LIST’等。注意,Windows操作系统使用的字节顺序是little-endian,因此一个四字符码‘abcd’实际的DWORD值应为0x64636261。另外,四字符码中像‘AVI ’一样含有空格也是合法的。

二、AVI格式示意图

在这里插入图片描述

1. 信息块——包括文件的通用信息,定义数据格式,所用的压缩算法等参数
2. 数据块——包含实际数据流,即图像和声音序列数据。这是文件的主体,也是决定文件容量的主要部分。视频文件的大小等于该文件的数据率乘以该视频播放的时间长度
3. 索引块——索引块包含数据块列表好它们在文件中的位置,以提供文件内数据随机存取能力。

三、各部分详细介绍

RIFF格式 是一种树状结构,基本组成单元为LIST和CHUNK:LIST相当于目录,可以包含多个CHUNK或者多个LIST,包含关键字“LIST”。CHUNK是数据保存的基本单元,可用于保存音视频数据或者一些参数信息。RIFF文件结构最开始4个字节表示“RIFF”,接着4个字节表示该文件的大小,再下来的4个字节表示该文件的类型(AVI或者WAV等)。

LIST结构:

  • ‘LIST’,一个四字符码,表示这是一个列表;
  • listSize,占用4字节,记录了整个列表的大小;
  • listType,一个四字符码,表示本列表的具体类型;
  • listData,实际的列表数据。

CHUNK结构:

  • ckID,一个表示块类型的四字符码;
  • ckSize,占用4字节,记录了整个块的大小;
  • ckData,实际的块数据。

AVI文件通常有如下几个子块组成:

  1. RIFF文件头:块的数据类型是AVI;
  2. “hdrl” list:音视频信息,描述媒体流信息;
  3. “info” list:编码该AVI的程序信息;
  4. “junk” chunk:无用数据,用于字节对齐;
  5. “movi” list:交错排列的音视频数据;
  6. “idxl” chunk:音视频排列的索引数据。

以片源B004_720P_AVC_MPEG_5M_30F.avi为例,详细介绍AVI各部分。下图为该码流基本信息:
在这里插入图片描述

1、RIFF文件头

RIFF(‘AVI’…) 表明AVI文件的格式。

2、“hdrl” list

hdrl列表: 嵌套了一系列块和子列表,一个avih块,一个或多个strl子列表。如下图:

在这里插入图片描述

(1)avih块: 记录AVI文件的全局信息,使用AVIMAINHEADER数据结构来操作:

typedef struct
{
   
	DWORD	dwMicroSecPerFrame;     //显示每帧所需的时间ns,定义avi的显示速率
	DWORD	dwMaxBytesPerSec;       // 最大数据传输率
	DWORD	dwPaddingGranularity;   //记录块的长度须为此值的倍数,通常是2048
	DWORD	dwFlags;       // AVI文件的特殊属性,包含文件中的任何标志字。如:有无索引块,是否是interlaced,是否含版权信息等
    DWORD	dwTotalFrames;  	    // 数据帧的总数
    
  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值