史志网站建设,购物网站建设代码,wordpress主题页脚如何修改,对外贸网站建设的建议AVI文件采用的是RIFF文件结构方式。波形音频wave#xff0c;MIDI和数字视频AVI都采用这种格式存储。 AVI文件的整体结构如下图所示
构造RIFF文件的基本单元叫做数据块#xff08;Chunk#xff09;#xff0c;每个数据块包含3个部分
4字节的数据块标记#xff08;或者叫…AVI文件采用的是RIFF文件结构方式。波形音频waveMIDI和数字视频AVI都采用这种格式存储。 AVI文件的整体结构如下图所示
构造RIFF文件的基本单元叫做数据块Chunk每个数据块包含3个部分
4字节的数据块标记或者叫做数据块的ID数据块大小数据
整个RIFF文件可以看成一个RIFF块。一个RIFF文件中只允许存在一个RIFF块。RIFF块中包含一系列的子块其中有一种子块的ID为“LIST”称为LISTLIST块中可以再包含一系列的子块但除了LIST块外的其他所有的子块都不能再包含子块。
RIFF和LIST块分别比普通的数据块多一个被称为形式类型Form Type和列表类型List Type的数据域其组成如下
4字节的数据块标记Chunk ID数据块的大小4字节的形式类型或者列表类型数据
//Chunks
typedef struct {
DWORD dwFourCC
DWORD dwSize //data
BYTE data[dwSize] // contains headers or video/audio data
} CHUNK;//Lists
typedef struct {
DWORD dwList
DWORD dwSize //dwFourcc data
DWORD dwFourCC
BYTE data[dwSize-4] // contains Lists and Chunks
} LIST;整个AVI文件是一个类型码为为AVI 的RIFF块其主要有三个subchunk构成
信息块“hdrl” LIST块用于描述AVI的流数据格式数据块“movi” LIST块用于保存音视频序列数据索引块可选的idxl子块
AVI文件的展开结构大致如下 avih块用于描述avi文件信息
其结构如下
typedef struct
{FourCC fcc; // 必须为 avihDWORD cb; // 本数据结构的大小不包括最初的8个字节fcc和cb两个域DWORD dwMicroSecPerFrame; // 视频帧间隔时间以毫秒为单位DWORD dwMaxBytesPerSec; // 这个AVI文件的最大数据率DWORD dwPaddingGranularity; // 数据填充的粒度DWORD dwFlags; // AVI文件的全局标记比如是否含有索引块等DWORD dwTotalFrames; // 总帧数DWORD dwInitialFrames; // 为交互格式指定初始帧数非交互格式应该指定为0DWORD dwStreams; // 本文件包含的流的个数DWORD dwSuggestedBufferSize; // 建议读取本文件的缓存大小应能容纳最大的块DWORD dwWidth; // 视频图像的宽以像素为单位DWORD dwHeight; // 视频图像的高以像素为单位DWORD dwReserved[4]; // 保留
} AVIMainHeader;strh用于描述流的头信息 // AVI流头部
typedef struct
{FourCC fcc; // 必须为 strhDWORD cb; // 本数据结构的大小,不包括最初的8个字节(fcc和cb两个域)FourCC fccType; // 流的类型: auds(音频流) vids(视频流) mids(MIDI流) txts(文字流)FourCC fccHandler; // 指定流的处理者对于音视频来说就是解码器DWORD dwFlags; // 标记是否允许这个流输出调色板是否变化WORD wPriority; // 流的优先级当有多个相同类型的流时优先级最高的为默认流WORD wLanguage; // 语言DWORD dwInitialFrames; // 为交互格式指定初始帧数DWORD dwScale; // 每帧视频大小或者音频采样大小DWORD dwRate; // dwScale/dwRate每秒采样率DWORD dwStart; // 流的开始时间DWORD dwLength; // 流的长度单位与dwScale和dwRate的定义有关DWORD dwSuggestedBufferSize;// 读取这个流数据建议使用的缓存大小DWORD dwQuality; // 流数据的质量指标0 ~ 10,000DWORD dwSampleSize; // Sample的大小RECT rcFrame; // 指定这个流视频流或文字流在视频主窗口中的显示位置视频主窗口由AVIMAINHEADER结构中的dwWidth和dwHeight决定
} AVIStreamHeader;该块用于描述流的具体信息。如果是视频流vids由strh块得知用一个BitmapInfo结构体表示如果是音频流auds用WaveFormatEx结构体表示。 数据块中存储视频和音频数据流数据可直接存于“movi LIST”中。数据块中音视频数据按不同的子块存放其结构如下所述 音频子块 “##wb” Wave 数据流 视频子块中存储DIB数据又分为压缩或者未压缩DIB “##db” RGB数据流 “##dc” 压缩数据流 索引块包含数据块在文件中的位置索引能提高avi文件的读写速度。这个块不是必需的。 音视频教程 整理了一些 音视频流媒体开发 学习书籍、视频资料有需要的可以自行添加学习交流群739729163 领取哦