AAC エンコーダー
Microsoft Media Foundation AAC エンコーダーは、ISO/IEC 13818-7 (MPEG-2 Audio Part 7) で定義されているように、Advanced Audio Coding (AAC) Low Complexity (LC) プロファイルをエンコードする Media Foundation Transform です。
AAC エンコーダーでは、Main、SSR、LTP などの他の AAC プロファイルへのエンコードはサポートされていません。
クラス識別子
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 | 1 秒あたりのサンプル数。 | サポートされている値を次に示します。
|
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 | 1 秒あたりのサンプル数。 | 入力の種類と一致する必要があります。 |
MF_MT_AUDIO_NUM_CHANNELS | チャネルの数。 | 入力の種類と一致する必要があります。 |
MF_MT_AUDIO_AVG_BYTES_PER_SECOND | エンコードされた AAC ストリームのビット レート (1 秒あたりのバイト数)。 | サポートされている値を次に示します。
モノラルとステレオの両方の既定値は 12000 (96 Kbps) です。 6 チャネルの既定値は 60000 です。 |
MF_MT_AAC_PAYLOAD_TYPE | AAC ペイロードの種類。 | 省略可能。 設定する場合、値は 0 である必要があります。これは、ストリームにraw_data_block要素のみが含まれていることを示します。 省略可能。 属性が設定されていない場合、既定値は 0 で、ストリームにraw_data_block要素のみが含まれていることを示します (生の AAC)。 Windows 7 では、この属性が設定されている場合、値は 0 である必要があります。 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 属性を追加して型を更新します。 この属性には、WAVEFORMATEX 構造体 (つまり wfx メンバーの後) の後に表示される HEAACWAVEINFO 構造体の部分が含まれます。 その後に、ISO/IEC 14496-3 で定義されている AudioSpecificConfig() データが続きます。
各出力サンプルには、ヘッダーのない圧縮された AAC フレームが 1 つ含まれています。 この形式は、MPEG-2 で定義された raw_data_block() 要素と同じです。 出力の種類に存在する場合は、 MF_MT_AAC_PAYLOAD_TYPE 属性を 0 に設定して、このペイロードの種類を示す必要があります。
各出力サンプルには、1024 個の PCM サンプルに対応する圧縮された AAC フレームが 1 つ含まれています。 たとえば、48 Khz サンプリング レートでは、1 つの圧縮フレームの継続時間は 21.33 ミリ秒です。
MF_MT_AAC_PAYLOAD_TYPEがゼロ (既定値) の場合、各出力サンプルには、ISO/IEC 13818-7 で定義されている 1 つの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 はサンプリング レート (1 秒あたりのサンプル数) です。
注意
現在の実装のバグにより、サンプル期間が 0 に設定されている場合、 ProcessInput 呼び出しは成功しますが、後続 の IMFTransform::P rocessOutput の呼び出しでは 0 除算例外がスローされます。 このエラーを回避するには、各入力サンプルで有効な 0 以外の期間を設定します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント |
Windows 7 [デスクトップ アプリのみ] |
サポートされている最小のサーバー |
Windows Server 2008 R2 [デスクトップ アプリのみ] |
[DLL] |
|