인코더의 미디어 형식 협상

Microsoft Media Foundation에서 인코더는 하나의 입력과 하나의 출력을 사용하여 MFT( Media Foundation 변환 )로 구현됩니다. 인코딩 세션 전에 인코더는 입력으로 수신할 스트림의 특성과 출력으로 생성할 스트림의 형식을 알고 있어야 합니다. 인코더를 통해 데이터를 전달하기 전에 입력 및 출력 미디어 형식 및 관련 특성을 설정해야 합니다. 적절한 미디어 형식 GUID 를 지정하여 입력 및 출력 형식을 제공하고 출력 미디어 형식에서 관련 미디어 형식 특성을 설정하여 출력 스트림의 특성을 설정해야 합니다. 새로 인스턴스화된 인코더에는 설정된 미디어 형식이 없습니다.

입력 미디어 유형은 PCM 오디오 또는 RGB 비디오와 같은 압축되지 않은 형식입니다. 인코더에서 사용하는 형식 형식은 VIDEOINFOHEADERWAVEFORMATEX 구조체에서 설명하는 형식으로 제한됩니다. 이러한 구조에 대한 자세한 내용은 Windows SDK 설명서를 참조하세요. 미디어 파운데이션은 형식 구조에서 미디어 형식을 만드는 도우미 함수를 제공합니다. 예를 들어 MFInitMediaTypeFromVideoInfoHeader 함수는 VIDEOINFOHEADER 구조체에서 비디오 형식을 초기화하고 MFInitMediaTypeFromWaveFormatEx 함수는WAVEFORMATEX 또는 WAVEFORMATEXTENSIBLE 구조체에서 비디오 형식을 초기화 합니다 . 자세한 내용은 미디어 형식 변환을 참조하세요. IMFTransform::SetInputType을 호출하여 인코더에서 입력 미디어 형식을 설정해야 합니다.

출력 미디어 형식은 최종 소스 스트림 또는 파일에 사용되는 압축 형식입니다. 입력 미디어 형식을 설정한 후에만 사용 가능한 출력 미디어 형식을 설정할 수 있습니다. 인코더가 MF_E_NO_MORE_TYPES 반환될 때까지 루프에서 IMFTransform::GetOutputAvailableType 을 호출하여 지원되는 출력 형식을 검색할 수 있습니다. 각 반복을 사용하여 형식 인덱스 증분 적절한 미디어 형식을 찾으면 IMFTransform::SetOutputType을 호출하여 출력 미디어 형식을 설정합니다.

출력 미디어 형식을 선택하는 결정 요소는 인코딩 유형 및 인코딩 요구 사항에 따라 달라집니다. 예를 들어 CBR로 인코딩된 오디오 스트림의 경우 입력과 일치하고 대상 값에 가능한 한 가까운 비트 속도를 갖는 미디어 형식을 찾으려고 합니다.

CBR 이외의 인코딩 모드를 사용하려면 모드를 설정한 다음, 인코더가 모드 집합에 따라 지원되는 출력 형식을 변경하므로 해당 모드의 출력 형식을 열거해야 합니다. 인코딩 모드를 제어하는 속성은 MFPKEY_VBRENABLEDMFPKEY_PASSESUSED. 예를 들어 VBR 품질 인코딩을 위해 출력 형식을 열거하는 경우 미디어 형식은 사용하기로 결정한 품질 값에 따라 달라집니다. 이러한 속성을 설정하는 방법에 대한 자세한 내용은 속성 인코딩을 참조하세요.

인코더 MFT 인스턴스화

Windows Media 인코더