AAC 인코더

Microsoft Media Foundation AAC 인코더는 ISO/IEC 13818-7(MPEG-2 오디오 파트 7)에 정의된 대로 AAC(Advanced Audio Coding) LC(Low Complexity) 프로필을 인코딩하는 Media Foundation 변환 입니다.

AAC 인코더는 Main, SSR 또는 LTP와 같은 다른 AAC 프로필에 대한 인코딩을 지원하지 않습니다.

클래스 식별자

AAC 인코더의 CLSID(클래스 식별자)는 헤더 파일 wmcodecdsp.h에 정의된 CLSID_AACMFTEncoder.

미디어 형식

AAC 인코더는 다음 미디어 유형을 지원합니다. 먼저 순서 입력 형식 또는 출력 형식으로 형식을 설정할 수 있습니다.

입력 형식

입력 미디어 형식에서 다음 특성을 설정합니다.

attribute Description 설명
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(44.1KHz)
  • 48000(48KHz)
MF_MT_AUDIO_NUM_CHANNELS 채널 수입니다. 1(모노) 또는 2(스테레오) 또는 6(5.1)이어야 합니다. 참고: 6개의 오디오 채널에 대한 지원은 Windows 10 도입되었으며 이전 버전의 Windows에서는 사용할 수 없습니다.

입력 형식이 설정되면 인코더는 다음 값을 파생하고 미디어 형식에 추가합니다.

출력 형식

출력 미디어 형식에서 다음 특성을 설정합니다.

attribute Description 설명
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
  • 16000
  • 20000
  • 24000
6개 채널을 사용하는 경우 이러한 값을 6으로 곱합니다.
모노 및 스테레오의 기본값은 12000(96Kbps)입니다. 6개 채널의 기본값은 60000입니다.
MF_MT_AAC_PAYLOAD_TYPE AAC 페이로드 유형입니다. 선택 사항입니다. 설정된 경우 스트림에 raw_data_block 요소만 포함함을 나타내는 값은 0이어야 합니다.
선택 사항입니다. 특성이 설정되지 않은 경우 기본값은 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 프레임이 포함되어 있습니다. 이 형식은 MPEG-2에서 정의한 raw_data_block() 요소와 동일합니다. 출력 형식에 있는 경우 이 페이로드 유형을 나타내려면 MF_MT_AAC_PAYLOAD_TYPE 특성을 0으로 설정해야 합니다.

각 출력 샘플에는 1024 PCM 샘플에 해당하는 하나의 압축된 AAC 프레임이 포함되어 있습니다. 예를 들어 48Khz 샘플링 속도에서 압축된 프레임의 지속 시간은 21.33msec입니다.

MF_MT_AAC_PAYLOAD_TYPE 0(기본값)인 경우 각 출력 샘플에는 ISO/IEC 13818-7에서 정의한 대로 하나의 raw_data_block() 요소가 포함됩니다.

미디어 형식 예제

다음은 44.1kHz, 160Kbps 스테레오 오디오에서 원시 AAC로 인코딩하는 데 필요한 미디어 유형의 예입니다.

입력 미디어 유형:

attribute
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(선택 사항)

출력 미디어 유형:

attribute
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 은 샘플링 속도(초당 샘플)입니다.

참고

현재 구현의 버그로 인해 샘플 기간이 0으로 설정된 경우 ProcessInput 호출은 성공하지만 IMFTransform::P rocessOutput 에 대한 후속 호출은 0으로 나누기 예외를 throw합니다. 이 오류를 방지하려면 각 입력 샘플에서 유효한 0이 아닌 기간을 설정합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트
Windows 7 [데스크톱 앱만 해당]
지원되는 최소 서버
Windows Server 2008 R2 [데스크톱 앱만 해당]
DLL
Mfaacenc.dll

추가 정보

코덱 개체

AAC 디코더

AAC 미디어 형식

오디오 미디어 유형

Media Foundation의 MPEG-4 지원

미디어 파운데이션에서 지원되는 미디어 형식