RIFF文件格式詳解

By: Ailson Jack
Date: 2020.01.31
個人博客:http://www.only2fire.com/
本文在我博客的地址是:http://www.only2fire.com/archives/112.html,排版更好,便於學習,也可以去我博客逛逛,興許有你想要的內容呢。

1、簡介

RIFF(Resources Interchange File Format)中文翻譯爲資源互換文件格式,是Windows下大部分多媒體文件遵循的一種文件結構。RIFF文件所包含的數據類型由該文件的擴展名來標識,能以RIFF格式存儲的數據有:

  • 音頻視頻交錯格式數據 .AVI
  • 波形格式數據 .WAV
  • 位圖數據格式 .RDI
  • MIDI格式數據 .RMI
  • 調色板格式 .PAL
  • 多媒體電影 .RMN
  • 動畫光標 .ANI
  • 其他的RIFF文件 .BND

2chunk

chunk(區塊)是RIFF文件的基本單元,RIFF文件由不同數量的chunk組成,每個chunk由“標識符”、“數據大小”和“數據”三個部分組成,“標識符”和“數據大小”都是佔用 4 個字節空間,chunk的基本結構如下所示:

struct chunk

{

uint32_t ID; //塊標識符

uint32_t Size; //塊數據大小

uint8_t  Data[Size]; //塊數據

};

ID:由4個ASCII字符組成,用以識別塊中所包含的數據。如:'RIFF','LIST','fmt ','data','WAV ','AVI '等,這種文件結構最初是由Microsoft和IBM爲PC機所定義,所以RIFF文件是按照小端字節順序寫入的。

Size:塊數據大小,存儲在Data域中的數據長度,不包含IDSize的大小

Data:塊數據,數據以字爲單位存放,如果數據長度爲奇數(字節爲單位),則最後添加一個空字節。

chunk是可以嵌套的,但是隻有塊標識符爲'RIFF'或者'LIST'的chunk才能包含其他的chunk。

3FourCC

FourCC(Four Character Codes)是一個4字節32位的標識符,通常用來標識文件的數據格式。例如,在音視頻播放器中,可以通過文件的FourCC來決定調用哪種CODEC進行音視頻的解碼。例如:DIV3,DIV4,DIVX,H264等,對於音頻則有:WAV,MP3等。FourCC是4個ASCII字符,不足四個字符的則在最後補充空格(不是空字符)。比如,FourCC fmt,實際上是'f' 'm' 't' ' '。

4RIFF chunk和LIST chunk

塊標識符ID'RIFF'chunk是比較特殊的,每一個RIFF文件首先存放的必須是一個RIFF chunk,並且只能有一個標識符爲'RIFF'chunkRIFF chunk的數據域的起始位置是一個4字節的FormType(FourCC格式),用於標識RIFF chunk數據域中所包含的chunk的數據類型。緊接着FormType之後的數據域的內容則是RIFF chunk所包含的subchunk。一個簡單的RIFF chunk的示意圖如下所示:

上圖中的RIFF chunk包含有兩個subchunk,可以看出RIFF chunk的數據域首先是4字節的FormType,接着是兩個subchunk,每一個subchunk又包含有自己的標識符、數據域的大小以及數據域。

除了RIFF chunk可以嵌套其他的chunk外,另一個可以包含subchunk的就是LIST chunk,其示意圖如下所示:

 

上圖中,首先是RIFF文件必須的RIFF chunk,其數據域又包含有兩個subchunk,其中一個subchunk的類型爲'LIST',該LIST chunk又包含了兩個subchunk。

RIFF chunk和LIST chunk的基本結構如下所示:

struct chunk

{

uint32_t ID; //塊標識符: 'RIFF'或者'LIST'

uint32_t Size; //塊數據大小

struct ChunkData { //塊數據

uint32_t Type; //包含的subchunk的數據類型, 與上面圖中的FormTypeListType對應

uint8_t   Data[Size-4]; //包含的subchunk

};

};

備註:一個RIFF文件的總大小爲:RIFF chunk的Size+8,這裏的8是ID和Size所佔用的空間。

如果覺得文章寫的不錯,對你有幫助,歡迎點贊,關注博主喲!

排版更好的內容見我博客的地址:http://www.only2fire.com/archives/112.html
注:轉載請註明出處,謝謝!^_^

發佈了79 篇原創文章 · 獲贊 25 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章