다음을 통해 공유


특정 인코딩 모드에 대한 오디오 형식 열거(Microsoft Media Foundation)

오디오 인코더에서 허용하는 입력 및 출력 미디어 형식은 매우 구조화되어 있습니다. IMediaObject::GetOutputType 메서드 또는 IMFTransform::GetOutputType호출하여 지원되는 출력 형식을 가져와야 합니다. 출력 형식을 받은 후에는 변경해서는 안 됩니다.

원패스 CBR 이외의 인코딩 모드를 사용하려면 모드를 설정한 다음 해당 모드의 출력 형식을 열거해야 합니다. 인코더는 모드 집합에 따라 지원되는 출력 형식을 변경합니다. 인코딩 모드를 제어하는 속성은 MFPKEY_VBRENABLEDMFPKEY_PASSESUSED. 모드가 인코더에서 설정되면 CBR과 마찬가지로 변경 없이 사용하여 출력 형식을 열거하고 선택해야 합니다.

품질 기반 VBR 유형 식별

품질 기반 VBR 형식을 식별하는 절차는 인코더가 DMO(DirectX Media Object) 역할을 하는지 아니면 MFT(Media Foundation Transform) 역할을 하는지에 따라 달라집니다. 인코더가 DMO 또는 MFT 역할을 하는 경우에 대한 자세한 내용은 Codec Objects아래의 개별 코덱 참조 페이지를 참조하세요.

오디오 인코더가 DMO 역할을 하고 원패스 VBR을 사용하도록 인코더를 구성하는 경우 지원되는 모든 출력 형식을 열거합니다. 그러나 일반적으로 품질 매개 변수에 따라 원패스 VBR 형식을 선택하려고 합니다. 인코더는 DMO_MEDIA_TYPE.pbFormat가리키는 WAVEFORMATEX 구조체의 nAvgBytesPerSec 멤버에 원패스 VBR 출력 형식의 품질 값을 넣습니다.

이 값은 0x7FFFFFXX 형식으로 저장됩니다. 여기서 XX는 품질 값(0에서 100까지)입니다. 예를 들어 0x7FFFFF62 nAvgBytesPerSec 값은 품질 수준 98(0x62 = 98)을 지정합니다.

다음 예제에서는 인코더가 DMO 역할을 할 때 형식의 품질 수준을 확인하는 방법을 보여 있습니다.

void ShowQuality(WAVEFORMATEX* pWave)
{
    // Store the average bytes per second in a local variable
    // with a more manageable name.
    DWORD dwBps = pWave->nAvgBytesPerSec;

    // Verify that the value is a VBR quality level by using 
    // a bitmask to check for the bit pattern 0x7FFFFFXX. 
    if(dwBps & 0x7FFFFF00 == 0x7FFFFF00)
        printf("VBR Quality: %d%%\n",(dwBps & 0x000000FF));
    else // Not a valid VBR quality value.
        printf("Not a valid one-pass VBR audio format.\n");
}

인코더가 MFT 역할을 하고 GetAvailableOutputType 호출 시 출력 형식을 열거하는 경우 MFPKEY_MOST_RECENTLY_ENUMERATED_VBRQUALITY 속성에 대한 MFT를 쿼리할 수 있습니다. 반환된 값은 가장 최근에 반환된 출력 미디어 형식의 VBR 품질을 나타냅니다. 그런 다음 이 값을 사용하여 인코더의 MFPKEY_DESIRED_VBRQUALITY 속성을 설정할 수 있습니다.

최대 제약 조건 설정

품질 기반 VBR(원패스) 및 비제한 2패스 VBR의 경우 출력 형식을 검색한 후에 추가 설정이 필요하지 않습니다. 최대 제한 VBR을 사용하려면 VBR이 활성화된 출력 형식과 두 개의 패스가 설정된 출력 형식을 검색합니다. 이 형식은 변경 없이 제한되지 않은 VBR 설정을 설명합니다. 최대 제약 조건을 설정하려면 MFPKEY_RMAXMFPKEY_BMAX 속성을 설정합니다.

오디오 인코딩 구성

오디오 인코더 출력 형식 찾기

Two-Pass 인코딩 사용

VBR 인코딩 사용