RIFF格式簡介


Resource Interchange File Format(簡稱RIFF),資源交換文件格式,是一種按照標記區塊存儲數據(tagged chunks)的通用文件存儲格式,多用於存儲音頻、視頻等多媒體數據。Microsoft在windows下的AVIANI 、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”文件結構。

RIFF chunk that contains two subchunks image

 包含在一個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 chunk that contains a LIST chunk image

 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) << 8) |  \ 
    ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 )); 

也可使用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM