Обработчики схем и обработчики 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. Сопоставитель источника создает обработчик, вызывая CoCreateInstance с этим ИДЕНТИФИКАТОРом CLSID.

Обработчики схем предоставляют интерфейс 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 обработчика, в канонической строковой форме. Значение записи — это строка (REG_SZ), содержащая краткое описание обработчика, например "Мой обработчик Byte-Stream". Сопоставитель источника вызывает CoCreateInstance , чтобы создать обработчик из CLSID. Вы можете зарегистрировать один и тот же обработчик в нескольких расширениях или типах MIME.

Обработчики потока байтов предоставляют интерфейс IMFByteStreamHandler . Если сопоставитель источника находит соответствующий обработчик байтового потока, он вызывает IMFByteStreamHandler::BeginCreateObject. Входные данные этого метода являются указателем на поток байтов, а также исходный URL-адрес, если он доступен. Обработчик байтового потока считывает данные из потока байтов, пока не будет проанализировано достаточно данных для создания источника мультимедиа.

Сопоставитель источника