AAC 編碼器
Microsoft Media Foundation AAC 編碼器是一種 媒體基礎轉換 ,可編碼進階音訊編碼 (AAC) 低複雜度 (LC) 設定檔,如 ISO/IEC 13818-7 (MPEG-2 音訊第 7 部分) 所定義。
AAC 編碼器不支援編碼至任何其他 AAC 設定檔,例如 Main、SSR 或 LTP。
類別識別碼
AAC 編碼器的類別識別碼 (CLSID ) 是在頭檔 wmcodecdsp.h 中定義的CLSID_AACMFTEncoder。
媒體類型
AAC 編碼器支援下列媒體類型。 您可以先依順序輸入類型或輸出類型先設定類型。
輸入類型
在輸入媒體類型上設定下列屬性。
屬性 | 描述 | 備註 |
---|---|---|
MF_MT_MAJOR_TYPE | 主要類型。 | 必須 MFMediaType_Audio。 |
MF_MT_SUBTYPE | 亞。 | 必須是 MFAudioFormat_PCM。 |
MF_MT_AUDIO_BITS_PER_SAMPLE | 每個範例的位數。 | 必須是 16。 |
MF_MT_AUDIO_SAMPLES_PER_SECOND | 每秒範例數。 | 支援下列值:
|
MF_MT_AUDIO_NUM_CHANNELS | 通道數目。 | 必須是 1 (單聲道) 或 2 個 (立體) ,或 6 (5.1) 。
注意:6 個音訊通道的支援是透過 Windows 10 引進,不適用於舊版 Windows。 |
設定輸入類型之後,編碼器會衍生下列值,並將其新增至媒體類型:
輸出型別
在輸出媒體類型上設定下列屬性。
屬性 | 描述 | 備註 |
---|---|---|
MF_MT_MAJOR_TYPE | 主要類型。 | 必須 MFMediaType_Audio。 |
MF_MT_SUBTYPE | 音訊子類型。 | 必須 MFAudioFormat_AAC。 |
MF_MT_AUDIO_BITS_PER_SAMPLE | 每個範例的位數。 | 必須是 16。 |
MF_MT_AUDIO_SAMPLES_PER_SECOND | 每秒範例數。 | 必須符合輸入類型。 |
MF_MT_AUDIO_NUM_CHANNELS | 通道數目。 | 必須符合輸入類型。 |
MF_MT_AUDIO_AVG_BYTES_PER_SECOND | 編碼 AAC 資料流程的位元速率,每秒以位元組為單位。 | 支援下列值:
單聲道和身歷聲的預設值為 12000 (96 Kbps) 。 6 個通道的預設值為 60000。 |
MF_MT_AAC_PAYLOAD_TYPE | AAC 承載類型。 | 選擇性。 如果設定,該值必須是零,表示資料流程只包含raw_data_block元素。 選擇性。 如果未設定屬性,則預設值為零,表示資料流程只包含原始 AAC) (元素raw_data_block。 在 Windows 7 中,如果設定這個屬性,此值必須是零。 從 Windows 8 開始,此值可以是 0 (原始 AAC) 或 1 (ADTS AAC) 。 |
MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION | AAC 音訊設定檔和層級。 | 選擇性。 支援下列值:
|
下表列出可用於 MF_MT_AAC_PROFILE_LEVEL_INDICATION 屬性的值。
MF_MT_AAC_PROFILE_LEVEL_INDICATION值 | 設定檔 |
---|---|
0x29 | AAC 設定檔 L2 |
0x2A | AAC 設定檔 L4 |
0x2B | AAC 設定檔 L5 |
0x2C | 高效能 v1 AAC 設定檔 L2 |
0x2E | 高效能 v1 AAC 設定檔 L4 |
0x2F | 高效能 v1 AAC 設定檔 L5 |
0x30 | 高效能 v2 AAC 設定檔 L2 |
0x31 | 高效能 v2 AAC 設定檔 L3 |
0x32 | 高效能 v2 AAC 設定檔 L4 |
0x33 | 高效能 v2 AAC 設定檔 L5 |
設定輸出類型之後,AAC 編碼器會藉由新增 MF_MT_USER_DATA 屬性來更新類型。 這個屬性包含HEAACWAVEINFO結構的部分,該結構出現在在Wfx成員) 之後的WAVEATEX結構 (之後。 後面接著 AudioSpecificConfig () 資料,如 ISO/IEC 14496-3 所定義。
每個輸出範例都包含一個沒有標頭的壓縮 AAC 框架。 此格式相當於 MPEG-2 所定義的 raw_data_block () 元素。 如果存在於輸出類型中, MF_MT_AAC_PAYLOAD_TYPE 屬性必須設定為零,才能指出此承載類型。
每個輸出範例都包含一個對應至 1024 PCM 範例的壓縮 AAC 框架。 例如,在 48 Khz 取樣率中,一個壓縮框架的持續時間是 21.33 毫秒。
如果 MF_MT_AAC_PAYLOAD_TYPE 為零 (預設值) ,則每個輸出範例都包含 ISO/IEC 13818-7 所定義的一個raw_data_block () 元素。
範例媒體類型
以下是從 44.1-kHz 編碼所需的媒體類型範例,160-Kbps 立體音訊到原始 AAC
輸入媒體類型:
屬性 | 值 |
---|---|
MF_MT_MAJOR_TYPE | MFMediaType_Audio |
MF_MT_SUBTYPE | MFAudioFormat_PCM |
MF_MT_AUDIO_BITS_PER_SAMPLE | 16 |
MF_MT_AUDIO_SAMPLES_PER_SECOND | 44100 |
MF_MT_AUDIO_NUM_CHANNELS | 2 |
MF_MT_AUDIO_AVG_BYTES_PER_SECOND | 176400 (選擇性) |
MF_MT_AUDIO_BLOCK_ALIGNMENT | 4 (選擇性) |
MF_MT_ALL_SAMPLES_INDEPENDENT | 1 (選擇性) |
MF_MT_AVG_BITRATE | 1411200 (選擇性) |
MF_MT_FIXED_SIZE_SAMPLES | 1 (選擇性) |
輸出媒體類型:
屬性 | 值 |
---|---|
MF_MT_MAJOR_TYPE | MFMediaType_Audio |
MF_MT_SUBTYPE | MFAudioFormat_AAC |
MF_MT_AUDIO_BITS_PER_SAMPLE | 16 |
MF_MT_AUDIO_SAMPLES_PER_SECOND | 44100 |
MF_MT_AUDIO_NUM_CHANNELS | 2 |
MF_MT_AUDIO_AVG_BYTES_PER_SECOND | 20000 |
MF_MT_AAC_PAYLOAD_TYPE | 0 (選擇性) |
MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION | 0x29 (選擇性) |
MF_MT_AUDIO_BLOCK_ALIGNMENT | 1 (選擇性) |
MF_MT_ALL_SAMPLES_INDEPENDENT | 0 (選擇性) |
MF_MT_AVG_BITRATE | 160000 (選擇性) |
MF_MT_USER_DATA | {0x00、0x00、0x29、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x12、0x10} (選擇性) |
備註
在目前的實作中,每個輸入範例都必須有有效的時間和持續時間。 若要設定範例時間,請呼叫 IMFSample::SetSampleTime。 若要設定範例持續時間,請呼叫 IMFSample::SetSampleDuration。
如果未設定取樣時間,編碼器的 IMFTransform::P rocessInput 方法會傳回 MF_E_NO_SAMPLE_TIMESTAMP。 如果未設定範例持續時間, ProcessInput 方法會傳回 MF_E_NO_SAMPLE_DURATION。
範例持續時間的計算方式如下:
LONGLONG hnsSampleDuration =
( nAudioSamplesPerChannel * (LONGLONG)10000000 )/nSamplesPerSec;
其中 nAudioSamplesPerChannel 是輸入緩衝區中每個通道的 PCM 音訊樣本數目, 而 nSamplesPerSec 是每秒樣本的取樣率。
注意
由於目前實作中的 Bug,如果範例持續時間設定為零, ProcessInput 呼叫會成功,但對 IMFTransform::P rocessOutput 的後續呼叫將會擲回零除例外狀況。 若要避免此錯誤,請在每個輸入範例上設定有效的非零持續時間。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 |
Windows 7 [僅限傳統型應用程式] |
最低支援的伺服器 |
Windows Server 2008 R2 [僅限傳統型應用程式] |
DLL |
|