RIFF格式

资源互换文件格式(Resources interchange File Format),RIFF文件市微软提出的windows环境下大部分多媒体文件遵循的一种文件结构,如WAV文件、AVI文件等。

其采用小端模式。

RIFF的结构

RIFF采用了如同Windows文件系统的树状结构,其包含FOURCC、CHUNK、LIST。

FOURCC(Four Character Codes)

4字节32位的标识符,通常用来标识文件的数据格式。在音视频播放器中,通过FORRCC决定音视频如何解码。例如:视频:DIV3、DIV4、DIVX、H264;音频:WAV,MP3。对于不足4个字符的在最后补充空格。

CHUNK

chunk是RIFF文件的基本单元。

chunk结构:

struct chunk

{

u32 id;//块标志 4个ASCII字符,用来识别块中数据的“类型”,是RIFF或者LIST,或者DATA等。

u32 size;//块数据大小 即存储在Data中的数据长度,不包含ID和SIZE的大小。

u8 Data[size];//块数据, 若长度为奇数,补充空字节。

}

RIFF CHUNK 和LIST CHUNK

基于CHUNK基本结构上,RIFF、LIST、CHUNK类似windows的文档结构;

每一个RIFF文件首先存放是一个RIFF CHUNK,RIFF chunk中数据域的起始位置指向 FOURCC,表明音视频编解码格式。

后嵌套List CHUNK 或其他sub chunk。

List CHUNK的数据部分也由两部分组成, 包括LISTtyoe, 指明List块的类型。如avi文件中的列表“hdrl”、“movi”。

AVI格式

avi基于 RIFF;

首个RIFF CHUNK 指明 FOURCC 为 AVI;

后续包含多个 subchunk,如“hdrl”、“info"、“junk”、“movi”、“idxl”。

现以实例依次分析;

RIFF文件头:

取前四个字节,为RIFF ID ,即52 49 46 46,对应ASCII码,为R I F F。取下四个字节:为50 48 5D 00,小端 为00 5D 48 50 ,为数据大小(6113360字节),下面4个字节为类型 41 56 49 20 对应ASCII码表为 A V I SP(空格);

hdrl列表

hdrl 头部

4C 49 53 54 即为 4字节的 LIST,00 00 22 CA 4字节大小为8906 字节。 68 64 72 6C 代表 list字型“hdrl”

avih块

61 76 69 68 即“avih”, 4字节大小 00 00 00 38 即56字节数据。 后续用来描述主信息头;如下图。

strl LIST

4C 49 53 54 为 LIST, 00 00 00 74 为大小 116 字节。 73 74 72 6C为  strl。

strh 块

73 74 72 68 为strh 00 00 00 38 为56 字节。后续对应下表;描述流的头信息 为视频、H264格式编码。

strf块

73 74 72 66 为strf ,该块用于描述流的具体信息。如果是视频流(vids,由strh块得知),用一个BitmapInfo结构体表示,如果是音频流(auds),用WaveFormatEx结构体表示。

另一个strl 块, 描述音频流的相关信息,为(auds);

JUNK块

填充数据,用于内部数据整齐。

info LIST

用于描述编码该AVI的程序信息; 这里标识,编码器是LAVF58.35.100;

movi list

4C 49 53 54 LIST, 00 5A F8 78表示 5961848字节。为movi.

其中,子块种类有四种

--db:未压缩的视频帧
--dc:压缩的视频帧
--wb:音频数据
--pc:改用新的调色板

第一个子块为00dc,压缩视频帧。大小 00 02 F2 DF, 为193247字节。

找到下一个块,为音频流 01wb;大小 00 00 01 A1;为417字节。

查到下一个块,为视频流 00 dc ,大小为00 00 02 74 ,为628字节。

可见音视频交叉放置。

至于大小,查询多个音频流,多为00 00 01 A2,即418字节。

而,视频流大小无法确定。

idx1块

可选的,描述音视频数据的索引块信息

在AVIMainHeader的dwFlags中指出是否包含索引块。有了索引块可以方便文件快进,如果没有索引块,在对AVI进行快进时需要计算位置,会很耗时。

WAV格式

Waveform Audio File Format。

保存PCM格式的原始音频数据,通常被称为无损音频。

现结合具体文件编码进行分析:

RIFF头文件:

52 49 46 46  ASCII码表,对应RIFF; 02 F1 9C 60,对应文件大小, 49388640字节。 57 41 56 45 对应 WAVE。

Format  Chunk

66 6D 74 20 fmt" " ;00 00 00 10 块长度 16字节; 后续对应:

自定义附加信息块

4C 49 53 54 L I S T ; 00 00 00 34 52字节data长度;49 4E 46 4F INFO ;

包含 音频生成时间, 编码格式等。

DATA块

64 61 74 61  data; 02 F1 9C 00  49388544个字节数据;后续为记录的音频数据。

第三周:RIFF、AVI、WAV文件格式分析相关推荐

  1. WAV文件格式分析(附AVI文件格式分析)

    目录 一.WAV格式简介 二.WAV格式结构 1.RIFF chunk 2.Format chunk 3.Data chunk 三.AVI文件格式分析 Q1:音频和视频的数据是如何放置的?交织放置or ...

  2. 【数据压缩3】AVI文件格式分析及问题回答+WAV文件格式分析

    目录 AVI文件问题回答 1.AVI文件音频和视频的数据是如何放置的,交织放置还是连续放置? 2.AVI文件一个视频帧大约占据多少字节?一个音频数据块大约占用多少字节? WAV文件格式分析 文件概述 ...

  3. [数据压缩]WAV文件格式分析及AVI数据结构分析

    目录 WAV文件格式分析 WAV概述 WAV文件格式分析 根据实例的WAV文件结构分析 AVI数据结构 音频与视频的数据放置方式 视频帧与音频帧的字节数 参考引用 WAV文件格式分析 WAV概述 Wa ...

  4. wav文件格式分析与详解

    wav文件格式分析与详解 WAV文件是在PC机平台上很常见的.最经典的多媒体音频文件,最早于1991年8月出现在Windows 3.1操作系统上,文件扩展名为WAV,是WaveFom的简写,也称为波形 ...

  5. wav文件格式分析详解

    wav文件格式分析详解 作者:曹京 日期:2006年7月17日 一.综述     WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的. RIFF是英文Resource Inte ...

  6. 数据压缩——WAV文件格式分析

    目录 WAV文件概述 WAV文件格式 一.案例分析 二.代码分析 1.建立结构体 2.读取数据段长度 3.结果 参考 WAV文件概述 WAV文件是在PC机上常见且最经典的多媒体音频文件,文件扩展名为W ...

  7. 【数据压缩】第三周作业——WAV文件格式分析

    1 WAV文件格式概述 WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows ...

  8. 「数据压缩03」WAV及AVI的文件格式分析

    目录 wav简介:​​​​​​​ 格式分析: RIFT区块: FORMAT区块: ​ DATA区块: 实例分析: wav简介:​​​​​​​ Waveform Audio File Format(WA ...

  9. 音频wav文件格式分析

    一.音频文件 ​ /usr/share/sounds/deepin/stereo/desktop-login.wav 二.文件信息 syli@syli-PC:~/work/repo/Demo/pa$ ...

最新文章

  1. Tensorflow框架是如何支持分布式训练的?
  2. 连接到localhost后提示要求用户名和密码
  3. 我与计算机编程的不解之缘(2015.9~2022.1)
  4. uwsgi部署到nginx出现invalid request block size: 4161 (max 4096)...skip问题(亲测)
  5. lodash round
  6. Code Pages Supported by Windows
  7. 登录plsql 报错 the account is locked --用户被锁
  8. 服务器之间远程拷贝scp
  9. python实现给定一个列表,输出由各个位置除了自身元素外所有元素乘积组成的列表
  10. Linux下的Vivado安装——以Ubuntu为例
  11. C#对dll文件的反编译
  12. 红巨星视频调色AE插件 Red Giant Magic Bullet Suite 16.0.0 WIN
  13. 使用pdfFactory Pro虚拟打印机给文档加上水印
  14. 计算机蓝屏代码0x0000007b,win7开机蓝屏提示STOP:0X0000007B的解决方法
  15. Python pandas DataFrame排序与去重操作
  16. 基于java的企业信息网站发系统
  17. MzTreeView节点树(梅花雪)
  18. python随机生成20个数字_你如何在Python中生成20个随机数字
  19. springSecurity之PasswordEncoder
  20. SEO伪原创文章的一些技巧

热门文章

  1. 20个网络基础知识简介
  2. QtVtk-007-Cone2
  3. 【游戏调研】清新脱俗的TwoDots
  4. 如何使用c语言写脚本解释器,脚本解释器编写思路
  5. 《聪明的投资者》书中的精髓:普通投资者耍小聪明,用美好的愿望进行交易,结果往往持续亏损,聪明的投资者用完整的系统保护财富,获得持续收益。
  6. GeForce RTX 2080显卡驱动安装(linux系统)
  7. python秒数转化为时间格式_python将秒数转化为时间格式的实例
  8. 邮件发送程序(添加附件发送)
  9. OD 实验(九) - 对一个程序的破解
  10. mysql联合索引学习