체계 처리기 및 Byte-Stream 처리기

이 항목에서는 원본 확인자에서 미디어 원본을 만드는 방법에 대한 내부 세부 정보를 설명합니다. Media Foundation에 대한 사용자 지정 미디어 원본을 구현하고 소스 확인자를 통해 애플리케이션에서 미디어 원본을 사용할 수 있도록 하려는 경우 이 항목을 읽어보세요.

원본 확인자는 URL 또는 바이트 스트림(즉, IMFByteStream 포인터)에서 미디어 원본을 만들 수 있습니다. 이렇게 하려면 처리기라는 도우미 개체를 사용합니다. URL의 경우 원본 확인자는 스키마 처리기를 사용합니다. 바이트 스트림의 경우 바이트 스트림 처리기를 사용합니다.

스키마 처리기는 URL을 입력으로 사용하고 미디어 원본 또는 바이트 스트림을 만듭니다. 바이트 스트림을 만드는 경우 원본 확인자는 이를 바이트 스트림 처리기에 전달하여 미디어 원본을 만듭니다. 다음 이미지는 이 프로세스를 보여 줍니다.

원본 확인 프로세스를 보여 주는 다이어그램

체계 처리기

스키마 처리기는 애플리케이션이 IMFSourceResolver::CreateObjectFromURL 또는 해당 비동기 동등한 BeginCreateObjectFromURL을 호출할 때 사용됩니다.

원본 확인자는 레지스트리에서 스키마 처리기를 찾습니다. 스키마 처리기는 다음 키 아래에 URL 구성표로 나열됩니다.

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows Media Foundation
            SchemeHandlers
               <scheme>
                  {00000000-0000-0000-0000-000000000000} = REG_SZ
HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows Media Foundation
            SchemeHandlers
               <scheme>
                  {00000000-0000-0000-0000-000000000000} = REG_SZ

여기서 <스키마> 는 처리기가 구문 분석하도록 설계된 URL 스키마입니다. 스키마에는 후행 ':' 문자가 포함됩니다. 예: "http:".

새 스키마 처리기를 등록하려면 이름이 체계 처리기의 CLSID인 항목을 정식 문자열 형식 {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}으로 추가합니다. 항목의 값은 "내 체계 처리기"와 같은 처리기에 대한 간략한 설명을 포함하는 문자열(REG_SZ)입니다. 항목의 중요한 부분은 CLSID입니다. 원본 확인자는 이 CLSID를 사용하여 CoCreateInstance 를 호출하여 처리기를 만듭니다.

체계 처리기는 IMFSchemeHandler 인터페이스를 노출합니다. 원본 확인자가 URL 스키마와 일치하는 스키마 처리기를 찾으면 원본 확인자는 IMFSchemeHandler::BeginCreateObject를 호출하여 원래 URL을 전달합니다. 스키마 처리기는 URL을 열고 내용을 구문 분석하려고 시도합니다. 이 시점에서 스키마 처리기에는 두 가지 옵션이 있습니다.

  • 미디어 원본을 만듭니다.
  • 바이트 스트림을 만듭니다.

미디어 원본을 만드는 경우 원본 확인자는 미디어 원본을 애플리케이션에 반환합니다. 바이트 스트림을 만드는 경우 원본 확인자는 다음 섹션에 설명된 대로 적절한 바이트 스트림 처리기를 찾으려고 시도합니다.

Byte-Stream 처리기

바이트 스트림 처리기는 애플리케이션이 IMFSourceResolver::CreateObjectFromByteStream 또는 비동기 동등인 BeginCreateObjectFromByteStream을 호출할 때 사용됩니다. 이전에 설명한 대로 스키마 처리기가 바이트 스트림을 반환할 때도 사용됩니다.

스키마 처리기와 마찬가지로 바이트 스트림 처리기가 레지스트리에 나열됩니다. 다음 키 아래에 파일 이름 확장명 또는 MIME 형식(또는 둘 다)으로 나열됩니다.

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows Media Foundation
            ByteStreamHandlers
               <ExtensionOrMimeType>
                  {00000000-0000-0000-0000-000000000000} = REG_SZ
HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows Media Foundation
            ByteStreamHandlers
               <ExtensionOrMimeType>
                  {00000000-0000-0000-0000-000000000000} = REG_SZ

여기서 <ExtensionOrMimeType> 은 파일 이름 확장명 또는 MIME 형식입니다. 파일 확장명 에는 초기 '.' 문자가 포함됩니다. 예: ".wmv".

파일 이름 확장명은 애플리케이션에서 제공하는 URL의 일부입니다. MIME 형식은 바이트 스트림의 MF_BYTESTREAM_CONTENT_TYPE 특성을 통해 사용할 수 있습니다.

새 바이트 스트림 처리기를 등록하려면 이름이 처리기의 CLSID인 항목을 정식 문자열 형식으로 추가합니다. 항목의 값은 "내 Byte-Stream 처리기"와 같은 처리기에 대한 간략한 설명을 포함하는 문자열(REG_SZ)입니다. 소스 확인자는 CoCreateInstance 를 호출하여 CLSID에서 처리기를 만듭니다. 둘 이상의 확장 또는 MIME 형식에서 동일한 처리기를 등록할 수 있습니다.

바이트 스트림 처리기는 IMFByteStreamHandler 인터페이스를 노출합니다. 원본 확인자가 일치하는 바이트 스트림 처리기를 찾으면 IMFByteStreamHandler::BeginCreateObject를 호출합니다. 이 메서드에 대한 입력은 바이트 스트림에 대한 포인터와 사용 가능한 경우 원래 URL입니다. 바이트 스트림 처리기는 미디어 원본을 만들기에 충분한 데이터를 구문 분석할 때까지 바이트 스트림에서 읽습니다.

원본 확인자