1.簡介
RIFF全稱為資源互換文件格式(Resource Interchange File Format),RIFF文件是windows環(huán)境下大部分多媒體文件遵循的一種文件格式,RIFF文件所包含的數(shù)據(jù)類型由該文件的擴(kuò)展名來標(biāo)識,能以RIFF文件存儲的數(shù)據(jù)包括:
- 音頻視頻交錯(cuò)格式數(shù)據(jù)(.AVI)
- 波形格式文件(.WAV)
- 位圖格式數(shù)據(jù)(.BMP)
- MIDI格式文件(.RMI)
- 調(diào)色板格式(.PAL)
- 多媒體電影(.RMN)
- 動畫光標(biāo)(.ANI)
- 其他RIFF文件(.BND)
2.CHUNK
chunk是組成RIFF文件的基本單元,結(jié)構(gòu)如下:
struct chunk
{
u32 id; /*塊標(biāo)志*/
u32 size; /*塊大小*/
u8 data[size]; /*塊內(nèi)容*/
}
- id由4個(gè)ASCII字符組成,用以識別塊中所包含的數(shù)據(jù)。如:'RIFF','LIST','fmt','data','WAV','AVI'等等 ,由于這種文件結(jié)構(gòu)最初是由Microsoft和IBM為PC機(jī)所定義,RIFF文件是按照little-endian字節(jié)順序?qū)懭氲摹?nbsp;
- size(塊大小)是存儲在data域中數(shù)據(jù)的長度,id與size域的大小則不包括在該值內(nèi)。
- dat(塊內(nèi)容)中所包含的數(shù)據(jù)是以字(WORD)為單位排列的,如果該數(shù)據(jù)結(jié)構(gòu)長度是奇數(shù),則在最后添加一個(gè)空(NULL)字節(jié)。
其中有僅有兩種塊:'RIFF'和'LIST'塊可以包含其他塊,而其它塊僅能含有數(shù)據(jù)。
struct chunk
{
u32id; /* 塊標(biāo)志 */
u32size; /* 塊大小 */
/*此時(shí)的dat = type + restdat */
u32type ; /* 類型 */
u8restdat[size] /* dat中除type4個(gè)字節(jié)后剩余的數(shù)據(jù)*/
};
可以看出,'RIFF'和'LIST'也是chunk,只是它的dat由兩部分組成:
type,由4個(gè)ASCII字符組成,代表RIFF文件的類型,如'WAV','AVI ';或者'LIST'塊的類型,如avi文件中的列表'hdrl','movi'。
restdat,dat中除type4個(gè)字節(jié)后剩余的數(shù)據(jù),包括塊內(nèi)容,包含若干chunk和'LIST'