FOURCC 代碼

[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議使用舊版 API 的現有程式碼盡可能重寫為使用新的 API。

許多數位媒體格式都指派了 FOURCC 代碼。 FOURCC 程式碼是串連四個 ASCII 字元所建立的 32 位不帶正負號的整數。 例如,YUY2 影片的 FOURCC 程式碼是 'YUY2'。 對於壓縮的視訊格式和非 RGB 視訊格式 (,例如 YUV) ,BITMAPINFOHEADER結構的biCompression成員應該設定為 FOURCC 程式碼。

有各種 C/C++ 宏可讓您更輕鬆地在原始程式碼中宣告 FOURCC 值。 例如, MAKEFOURCC 宏是在 Mmsystem.h 中宣告,而在 Aviriff.h 中宣告 了一個 SMS 宏。 請使用它們,如下所示:

DWORD fccYUY2 = MAKEFOURCC('Y','U','Y','2');
DWORD fccYUY2 = FCC('YUY2');

您也可以藉由反轉字元的順序,直接將 FOURCC 程式碼宣告為字串常值。 例如:

DWORD fccYUY2 = '2YUY';  // Declares the FOURCC 'YUY2'.

需要反轉順序,因為 Microsoft Windows 作業系統使用一些端端架構。 'Y' = 0x59、'U' = 0x55,而 '2' = 0x32,因此 '2YUY' 0x32595559。

將 FOURCC 程式碼轉換為子類型 GUID

2*32 GUID 的範圍保留給代表 FOURC。 這些 GUID 是四CC 程式碼的所有表單 XXXXXXXX-0000-0010-8000-00AA00389B71XXXXXXXX 。 因此,YUY2 的子類型 GUID 為 32595559-0000-0010-8000-00AA00389B71

其中許多 GUID 都已經定義在標頭檔 Uuids.h 中。 例如,YUY2 子類型定義為MEDIASUBTYPE_YUY2。 DirectShow 基類庫也提供 Helper 類別 FOURCCMap,可用來將 FOURCC 程式碼轉換成 GUID 值。 FOURCCMap建構函式會採用 FOURCC 程式碼作為輸入參數。 然後,您可以將 FOURCCMap 物件轉換成對應的 GUID:

FOURCCMap fccMap(FCC('YUY2'));
GUID g1 = (GUID)fccMap;

// Equivalent:
GUID g2 = (GUID)FOURCCMap(FCC('YUY2'));

音訊子類型

影片子類型

使用編解碼器