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