RIFF格式简介
Resource Interchange File Format(简称RIFF),资源交换文件格式,是一种按照标记区块存储数据(tagged chunks)的通用文件存储格式,多用于存储音频、视频等多媒体数据。Microsoft在windows下的AVI、ANI 、WAV等都是基于RIFF实现的。
RIFF是由Microsoft和IBM于1991年,在windows 3.1中引入的,作为windows 3.1默认的多媒体文件格式。RIFF是参考Interchange File Format来的,二者主要的区别是字节序大端、小端的问题。在基于IBM的80x86系列主机下,RIFF的字节序是小端的;而在IFF原有的格式中是按照大端存储整型数据的。
RIFF文件
RIFF文件的基本构成单元是chunk。通常情况下一个chunk是指多媒体数据的一个基本逻辑单元,比如视频的一帧数据、音频的一帧数据等等。每个chunk包含以下三个字段:
- FOURCC(四字节码),用于标识chunk ID或chunk 类型。
- 四字节整数,表示chunk中的数据域长度(Size)。
- 数据域(data Field)。
chunk是可以嵌套的。下图说明了用于两个subchunk的“RIFF”文件结构。
包含在一个chunk中的chunk被称为subchunk。只有ID为“RIFF”或者“LIST”的chunk允许拥有subchunk。RIFF文件的第一个chunk的id必须是“RIFF”四字节码,也就是说id为“LIST”的chunk只能是subchunk。
“RIFF”chunk的数据域的起始位置是一个四字节码(称为Form Type,类型码),用于说明数据域的格式,比如“WAV”、“AVI”等。
“LIST”chunk的数据域的起始位置也有一个四字节码(称为List Type,类型码),用于说明LIST数据域的数据内容。比如,“LIST”chunk的list type为“INFO”时,其数据域可能包括“ICOP”、“ICRD”chunk,用于记录文件版权和创建时间信息。
下图是“RIFF”chunk中拥有两个subchunk,其中一个subchunk “LIST”又嵌套的包含两个subchunk。
RIFF读写处理
RIFF文件中多次提到四字节码,Windows中提供了用于标识四字节码FOURCC,对于不足四个的ASCII码,在右侧补空格字符即可。比如多媒体输出输出函数中的mmioFOURCC,定义如下:
FOURCC mmioFOURCC(
CHAR ch0,
CHAR ch1,
CHAR ch2,
CHAR ch3
); #define MAKEFOURCC(ch0, ch1, ch2, ch3) \
((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << ) | \
((DWORD)(BYTE)(ch2) << ) | ((DWORD)(BYTE)(ch3) << ));
也可使用mmioStringToFOURCC函数将字符串转化为四字节码。
如果不关心RIFF文件负载内容,可按照普通文件读写RIFF文件。
可使用mmioCreateChunk函数、mmioAscend函数、mmioDescend函数等读写RIFF文件、移动文件指针等。详细使用建议参考MSDN上相关内容。(Multimedia File I/O Services)
参考文献:
Wiki:http://en.wikipedia.org/wiki/Resource_Interchange_File_Format
MSDN:http://msdn.microsoft.com/en-us/library/dd798636(v=vs.85).aspx
RIFF格式简介的更多相关文章
- vcf格式简介
1)背景 伴随着大规模的基因分型及测序工程的产生(例如1000 Genomes Project),之前的信息贮存格式例如gff文件它记录了每一个基因的详细信息,其中许多基因信息在基因组之间是共享的,而 ...
- JSON数据表示格式简介(JavaScript对象表示法)
[1] JSON简介 > JSON全称 JavaScript Object Notation > 类似于JS中对象的创建的方法 > JSON和XML一样,都是一种表 ...
- IFC格式简介
IFC是一个数据交换标准, 用于不同系统交换和共享数据.当需要多个软件协同完成任务时, 不同系统之间就会出现数据交换和共享的需求.这时, 工程人员都希望能将工作成果(这里就是工程数据), 从一个软件完 ...
- JSON格式简介
一.JSON:JavaScript Object Notation的简写,是一种轻量级数据交换格式. 二.数据类型:标量.序列(数组).映射(key-value) 三.JSON的四个原则 1 .并列数 ...
- LibSVM格式简介
对于训练或预测,XGBoost采用如下格式的实例文件: train.txt 1 101:1.2 102:0.03 0 1:2.1 10001:300 10002:400 0 0:1.3 1:0.3 1 ...
- HTTP 报文格式简介
HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送 WWW 方式的数据,关于 HTTP 协议的详细内容请参考 RFC2616.HTTP 协议采用了请求/响 ...
- 编码的来源于格式简介ANSI、GBK、GB2312、UTF-8、GB18030和 UNICODE
编码一直是让新手头疼的问题,特别是 GBK.GB2312.UTF-8 这三个比较常见的网页编码的区别,更是让许多新手晕头转向,怎么解释也解释不清楚.但是编码又是那么重要,特别在网页这一块.如果你打出来 ...
- 多媒体文件格式之AVI
[时间:2016-07] [状态:Open] AVI(Audio Video Interleaved的缩写)是一种RIFF(Resource Interchange File Format的缩写)文件 ...
- WAVE文件格式解析
WAVE 文件作为Windows多媒体中使用的声音波形文件格式之一,它是以RIFF(Resource Interchange File Format)格式为标准的.这里不针对RIFF文件格式做介绍,不 ...
随机推荐
- python web中的并发请求
python web可以选择django,也可以选择flask,它们的原理差不多.flask比较轻量,下面写一段flask程序来说明python web对并发请求的处理. app.py import ...
- bat批处理,实现获取目录
@echo off echo 当前盘符:%~d0 echo 当前盘符和路径:%~dp0 echo 当前批处理全路径:%~f0 echo 当前盘符和路径的短文件名格式:%~sdp0 echo 当 ...
- lamp虚拟主机的常用配制选项
<VirtualHost *:80> ServerAdmin m.koobird.com DocumentRoot "/var/www/html/xinyou&quo ...
- 【SqlServer】SQL Server的常用函数
字符串函数 SubString():用于截取指定字符串的方法.该方法有三个参数:参数1:用于指定要操作的字符串.参数2:用于指定要截取的字符串的起始位置,起始值为 1 .参数3:用于指定要截取的长度. ...
- Scala学习网址
scala学习网址为:https://twitter.github.io/scala_school/zh_cn https://www.zhihu.com/question/26707124
- golang ----rune数据类型
查询,官方的解释如下: // rune is an alias for int32 and is equivalent to int32 in all ways. It is // used, by ...
- 缓存机制和Hibernate的缓存机制介绍
缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能.缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事 ...
- Java 8 Stream – Read a file line by line
In Java 8, you can use Files.lines to read file as Stream. c://lines.txt – A simple text file for te ...
- Web安全之XSS(Cross Site Scripting)深入理解
XSS的含义 XSS(Cross Site Scripting)即跨站脚本.跨站的主要内容是在脚本上. 跨站脚本 跨站脚本的跨,体现了浏览器的特性,可以跨域.所以也就给远程代码或者第三方域上的代码提供 ...
- nginx增加ssl支持 - 编译时参数详情列表
./configure \ --with-http_ssl_module \ make && make install nginx编译参数说明如下: --prefix=&l ...