riff,avi文件解析

riff,avi文件解析
2009-09-10 17:43
Z3NWH-G4W6H-8GPDA-4N9XC 
摘要:RIFF全称为资源互换文件格式(Resources Interchange File Format),RIFF文件是windows环境下大部分多媒体文件遵循的一种文件结构,常见的如WAV文件、AVI文件等。RIFF可以看成一种树状 结构,其基本组成单元为LIST和CHUNK,分别如树的节点和叶子。
 
一、RIFF 文件简介
RIFF是Microsoft提出的一种多媒体文件的存储方式,不同编码的音频、视频 文件,可以按照它定义的存储规则保存、记录各自不同的数据,如:数据内容、采集信息、显示尺寸、编码方式等。在播放器或者其它提取工具读取文件的时候,就 可以根据RIFF的规则来分析文件,合理的解析出音频、视频信息,正确进行播放。常见的RIFF文件有WAV文件和AVI文件,它们都是遵循RIFF格式 保存播放信息和播放数据的。
 
二、RIFF 文件的组织结构
在RIFF的文件存储规则中,主要有几个重要的概念需要理解,它们是FOURCC, CHUNK, LIST。下面会对这几个概念进行详细解释。
RIFF格式是一种树状的结构,其基本组成单元为LIST和CHUNK,分别如树的节 点和叶子。RIFF格式也类似windows文件系统的组织形式,windows文件系统有目录和文件,分别对应RIFF中的LIST和CHUNK。 Windows文件系统中的目录可以包含子目录和文件,而文件是保存数据的基本单元,RIFF也使用了这样的结构。在RIFF文件中,数据保存的基本单元 是CHUNK,可用于保存音视频数据或者一些参数信息,LIST相当于文件系统的目录,可以包含多个CHUNK或者多个LIST。
1 、FOURCC
一个FOURCC(four character code)是一个占4个字节的数据,一般表示4个ASCII字符。在RIFF文件格式中,FOURCC非常普遍,LISTtype, chunkid, 起始标识等信息都是用FOURCC表示的。FOURCC一般是四个字符,如”abcd”这样的形式,也可以三个字符包含一个空格,如”abc ”这样的形式。
2 、CHUNK
一个CHUNK数据块的数据结构如下:
ChunkID ChunkSize ChunkData
ChunkID是一个FOURCC,标识该CHUNK的名称,类似于windows文件系统中的文件名。 ChunkSize占用4个字节,表示ChunkData部分的数据内容大小,以字节为单位。ChunkData则是CHUNK中实质性的内容,保存的是 CHUNK的具体数据内容。一个CHUNK保存的数据可以是关于声音文件的编码方式、音视频采样等信息,也可以是音频或视频数据。具体表示是哪类数据则通 过ChunkID来标识。
3 、LIST
一个LIST数据块的数据结构如下:
“LIST” ListSize ListType ListData
“LIST”也是一个FOURCC,而且是固定的,每个LIST都是以“LIST”为开头。ListSize占用4个字节,表示 ListType和ListData两部分加在一起的大小。ListType是一个FOURCC,是对LIST具体包含的数据内容的标识。而 ListData则是该LIST的数据内容区,有CHUNK和子LIST组成,它们的个数和组成次序可以是不确定的。
4 、RIFF 文件头
RIFF文件头的数据结构如下:
“RIFF” FileSize FileType FileData
“RIFF”也是一个FOURCC,用于标识该文件是一个RIFF格式的文件。FileSize是一个4字节的数据,给出文件的大小,但仅包括 FileType和FileData两部分。FileType是一个FOURCC,用来说明文件类型,如”WAV”, “AVI”等。FileData部分表示文件的具体内容,可以是LIST也可以是CHUNK.


AVI RIFF 文件参考

AVI RIFF文件说明

AVI 文件格式


AVI文件格式及其应用开发


RIFF wiki
 重点源于list-->info->isft关于作者,权利,描述等一系列信息

MSDN AVI

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,首先需要了解一下AVI文件格式的结构。AVI文件格式是由一个RIFF头和多个块构成的。其中,RIFF头用于标识文件类型和文件大小,块用于存储音视频数据。在本次任务中,我们需要将G711u格式的音频数据和H264格式的视频数据融合起来,生成一个AVI文件。 下面是一个简单的伪代码示例: ```c // 打开G711u文件和H264文件 FILE *g711u_file = fopen("audio.g711u", "rb"); FILE *h264_file = fopen("video.h264", "rb"); // 创建AVI文件 FILE *avi_file = fopen("output.avi", "wb"); // 写入RIFFavi_header_t avi_header; create_avi_header(&avi_header); fwrite(&avi_header, sizeof(avi_header), 1, avi_file); // 写入音视频数据 while (!eof(g711u_file) && !eof(h264_file)) { // 读取G711u格式的音频数据 fread(audio_data, 1, audio_data_size, g711u_file); // 读取H264格式的视频数据 fread(video_data, 1, video_data_size, h264_file); // 写入音频块 avi_audio_chunk_t audio_chunk; create_avi_audio_chunk(&audio_chunk, audio_data, audio_data_size); fwrite(&audio_chunk, sizeof(audio_chunk), 1, avi_file); fwrite(audio_data, 1, audio_data_size, avi_file); // 写入视频块 avi_video_chunk_t video_chunk; create_avi_video_chunk(&video_chunk, video_data, video_data_size); fwrite(&video_chunk, sizeof(video_chunk), 1, avi_file); fwrite(video_data, 1, video_data_size, avi_file); } // 关闭文件 fclose(g711u_file); fclose(h264_file); fclose(avi_file); ``` 需要注意的是,上述代码中的`create_avi_header`、`create_avi_audio_chunk`和`create_avi_video_chunk`函数需要根据AVI文件格式的规范进行实现。另外,还需要根据实际情况确定音频和视频数据的大小、采样率、帧率等参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值