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 秒あたりのサンプル数。 サポートされている値を次に示します。
  • 44100 (44.1 KHz)
  • 48000 (48 KHz)
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
  • 16000
  • 20000
  • 24000
6 つのチャネルを使用する場合は、これらの値に 6 を掛けます。
モノラルとステレオの両方の既定値は 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 オーディオ プロファイルとレベル。 任意。 サポートされている値を次に示します。
  • 0x29 (既定値)
  • 0x2A
  • 0x2B
  • 0x2C
  • 0x2E
  • 0x2F
  • 0x30
  • 0x31
  • 0x32
  • 0x33

次の表に、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]
Mfaacenc.dll

関連項目

コーデック オブジェクト

AAC デコーダー

AAC メディアの種類

オーディオ メディアの種類

Media Foundation での MPEG-4 サポート

メディア ファンデーションでサポートされるメディア形式