AVI媒体封装格式
来源:互联网 发布:免费服装销售软件 编辑:程序博客网 时间:2024/05/24 05:35
AVI文件采用标准的RIFF格式进行封装,在分析AVI文件格式之前我们先简单介绍RIFF格式。
1. RIFF格式简介
资源文件交换格式,Resource Interchange FileFormat(简称RIFF)。是一种按照标记区块存储数据(tagged chunks)的的通用文件存储格式,多用于存储音视频等多媒体数据。Microsoft在Windows下的AVI、ANI、WAV等都是基于RIFF格式的文件封装。
2. RIFF文件结构
RIFF文件结构是标准的树形结构,RIFF结构中包含两种节点:
(1) Leaf节点,该节点为叶子节点,不能包含子节点。
(2) Container节点,该节点可以包含Leaf节点。
Leaf节点的数据结构为:
typedef struct {DWORD ID; // 4字节,4个可打印ASCII字符,标识类型DWORD Size; // 4字节,数据块长度BYTE Data[Size]; // 数据块}Leaf
Container节点的数据结构为:
typedef struct {DWORD ID; // 4字节,4个可打印ASCII字符,标识类型DWORD Size; // 4字节,数据块长度DWORD FormatType; // 4字节,4个可打印ASCII字符,标识子类型 // ID为“RIFF”时称为 FormatType // ID为“LIST”时称为 ListTypeBYTE Data[Size]; // 数据块}Container
下图展示的示例RIFF文件包含了:
1个类型为“RIFF”的Container节点;
1个类型为“LIST” 的Container节点;
2个Leaf;
其中“RIFF”包含“LIST”,“LIST”包含2个Leaf节点。
3. AVI文件格式分析
AVI文件采用标准的RIFF格式,其结构是以类型为“RIFF”的节点为根节点的树状结构。
在AVI文件结构中类型为“RIFF”和“LIST”的节点是Container节点,一个AVI文件中只允许存在一个类型为“RIFF”的节点,类型为“LIST”的Container节点和Leaf节点没有限制。
一个典型的AVI文件结构如下图所示:
ListType为“movi”的Container的数据区域中保存的是音视频帧(audio sample、video sample)编码数据。
“movi”中的音视频帧封装在数据区中的Leaf节点中,“00dc”代表视频帧,“01wb”代表音频帧。
ID为“idx1”的Leaf的数据区中保存的是“movi”中音视频帧的索引,以数组方式排列,索引的结构为:
typedef struct {DWORD ID; // 4字节,4个可打印ASCII字符,标识帧类型 // “00dc”代表视频帧,“01wb”代表音频帧DWORD flags; // 4字节,标志位,0x00000010代表关键帧DWORD offset; // 4字节,“movi”节点的数据区中保存的帧节点相对于//“movi”节点ListType位置的偏移,也就是“movi”这// 个ListType的偏移(AVIMasterGUI中ChunkOffset)。DWORD len; // 4字节,当前帧的长度,等于包含当前帧的Leaf节点的 // 的数据块长度。(AVIMasterGUI中的ChunkLength)}SapleIndex
下面举例如何计算帧n在文件中的绝对位置和长度:
Container *movi = (“movi”节点在文件中的偏移) + 8 //+8跳过ID和SizeSampleIndex *index = (“idx1”节点在文件中的偏移) + 8 //+8跳过ID和Size帧n位置 = index[n]->offset + movi + 8 //+8跳过ID和Size帧n长度 = index[n]->len
- AVI媒体封装格式
- 音视频封装:AVI 格式分析
- 媒体封装格式的时装show
- AVI封装
- 视频编码中封装格式RMVB,AVI,264
- AVI格式
- AVI格式
- AVI格式
- AVI格式
- avi 格式
- 视频编码 MPEG2 MPEG4 DIVX Xvid H264 VC1封装格式MKV AVI RMVB MPG TS扫盲
- 数字视频格式AVI解决方案
- AVI RIFF 格式说明
- AVI格式介绍
- avi格式详细介绍
- avi 格式详解
- AVI格式问题
- avi格式详细介绍
- 使用Nginx抵御DDOS攻击
- scala中一个高阶函数的N种调用方法
- spring事务的五种属性
- 一道谷歌编程题引发的思考
- explicit
- AVI媒体封装格式
- websocket 库 "boost.beast" windows 平台 VS2015 编译过程记录
- Web监听器
- 缓冲区溢出之总结
- Effective STL 19 understand the difference between equality and equivalence
- PAT【1001】害死人不偿命的3n+1猜想
- 最长回文子串(Longest Palindromic Substring)
- ubuntu17.04 gnome 的简单使用
- UVA 1328 Period