1、簡(jiǎn)介
RIFF(Resources Interchange File Format)中文翻譯為資源互換文件格式,是Windows下大部分多媒體文件遵循的一種文件結(jié)構(gòu)。
RIFF文件所包含的數(shù)據(jù)類型由該文件的擴(kuò)展名來標(biāo)識(shí),能以RIFF格式存儲(chǔ)的數(shù)據(jù)有:
音頻視頻交錯(cuò)格式數(shù)據(jù) .AVI;
波形格式數(shù)據(jù) .WAV;
位圖數(shù)據(jù)格式 .RDI;
MIDI格式數(shù)據(jù) .RMI;
調(diào)色板格式 .PAL;
多媒體電影 .RMN;
動(dòng)畫光標(biāo) .ANI;
其他的RIFF文件 .BND;
2、chunk
chunk(區(qū)塊)是RIFF文件的基本單元,RIFF文件由不同數(shù)量的chunk組成,每個(gè)chunk由“標(biāo)識(shí)符”、“數(shù)據(jù)大小”和“數(shù)據(jù)”三個(gè)部分組成,“標(biāo)識(shí)符”和“數(shù)據(jù)大小”都是占用 4 個(gè)字節(jié)空間,chunk的基本結(jié)構(gòu)如下所示:
structchunk { uint32_tID;//塊標(biāo)識(shí)符 uint32_tSize;//塊數(shù)據(jù)大小 uint8_tData[Size];//塊數(shù)據(jù) };
ID:由4個(gè)ASCII字符組成,用以識(shí)別塊中所包含的數(shù)據(jù)。如:'RIFF','LIST','fmt ','data','WAV ','AVI '等,這種文件結(jié)構(gòu)最初是由Microsoft和IBM為PC機(jī)所定義,所以RIFF文件是按照小端字節(jié)順序?qū)懭氲摹?/p>
Size:塊數(shù)據(jù)大小,存儲(chǔ)在Data域中的數(shù)據(jù)長(zhǎng)度,不包含ID和Size的大小。
Data:塊數(shù)據(jù),數(shù)據(jù)以字為單位存放,如果數(shù)據(jù)長(zhǎng)度為奇數(shù)(字節(jié)為單位),則最后添加一個(gè)空字節(jié)。
chunk是可以嵌套的,但是只有塊標(biāo)識(shí)符為'RIFF'或者'LIST'的chunk才能包含其他的chunk。
3、FourCC
FourCC(Four Character Codes)是一個(gè)4字節(jié)32位的標(biāo)識(shí)符,通常用來標(biāo)識(shí)文件的數(shù)據(jù)格式。例如,在音視頻播放器中,可以通過文件的FourCC來決定調(diào)用哪種CODEC進(jìn)行音視頻的解碼。例如:DIV3,DIV4,DIVX,H264等,對(duì)于音頻則有:WAV,MP3等。FourCC是4個(gè)ASCII字符,不足四個(gè)字符的則在最后補(bǔ)充空格(不是空字符)。比如,F(xiàn)ourCC fmt,實(shí)際上是'f' 'm' 't' ' '。
4、RIFF chunk和LIST chunk
塊標(biāo)識(shí)符ID為'RIFF'的chunk是比較特殊的,每一個(gè)RIFF文件首先存放的必須是一個(gè)RIFF chunk,并且只能有一個(gè)標(biāo)識(shí)符為'RIFF'的chunk。RIFF chunk的數(shù)據(jù)域的起始位置是一個(gè)4字節(jié)的FormType(FourCC格式),用于標(biāo)識(shí)RIFF chunk數(shù)據(jù)域中所包含的chunk的數(shù)據(jù)類型。緊接著FormType之后的數(shù)據(jù)域的內(nèi)容則是RIFF chunk所包含的subchunk。一個(gè)簡(jiǎn)單的RIFF chunk的示意圖如下所示:
riff1
上圖中的RIFF chunk包含有兩個(gè)subchunk,可以看出RIFF chunk的數(shù)據(jù)域首先是4字節(jié)的FormType,接著是兩個(gè)subchunk,每一個(gè)subchunk又包含有自己的標(biāo)識(shí)符、數(shù)據(jù)域的大小以及數(shù)據(jù)域。
除了RIFF chunk可以嵌套其他的chunk外,另一個(gè)可以包含subchunk的就是LIST chunk,其示意圖如下所示:
riff2
上圖中,首先是RIFF文件必須的RIFF chunk,其數(shù)據(jù)域又包含有兩個(gè)subchunk,其中一個(gè)subchunk的類型為'LIST',該LIST chunk又包含了兩個(gè)subchunk。
RIFF chunk和LIST chunk的基本結(jié)構(gòu)如下所示:
structchunk { uint32_tID;//塊標(biāo)識(shí)符:'RIFF'或者'LIST' uint32_tSize;//塊數(shù)據(jù)大小 structChunkData{//塊數(shù)據(jù) uint32_tType;//包含的subchunk的數(shù)據(jù)類型,與上面圖中的FormType和ListType對(duì)應(yīng) uint8_tData[Size-4];//包含的subchunk }; };
備注:一個(gè)RIFF文件的總大小為:RIFF chunk的Size+8,這里的8是ID和Size所占用的空間。
審核編輯:劉清
-
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7640瀏覽量
166635 -
ASCII
+關(guān)注
關(guān)注
5文章
172瀏覽量
35733
原文標(biāo)題:RIFF文件格式詳解
文章出處:【微信號(hào):嵌入式那些事,微信公眾號(hào):嵌入式那些事】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
適用于IPTV大并發(fā)應(yīng)用的文件格式
LabVIEW數(shù)據(jù)文件格式的視頻教程
數(shù)碼相機(jī)伴侶的文件格式
Intel Hex 文件格式

STM32--hex文件格式

WAV文件格式詳解

評(píng)論