Поделиться через


Обработчики схем и обработчики Byte-Stream

В этом разделе описываются внутренние сведения о том, как сопоставитель источника создает источник мультимедиа. Ознакомьтесь с этой статьей, если вы реализуете пользовательский источник мультимедиа для Media Foundation, и вы хотите, чтобы источник мультимедиа был доступен для приложений с помощью средства разрешения источника.

Сопоставитель источника данных может создать источник мультимедиа из URL-адреса или из потока байтов (то есть указателя МВФByteStream). Для этого использует вспомогательные объекты, называемые обработчиками . Для 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), содержащая краткое описание обработчика, например "My Scheme Handler". Важная часть записи — CLSID. Исходный сопоставитель создает обработчик, вызывая CoCreateInstance с этим CLSID.

Обработчики схем предоставляют интерфейс IMFSchemeHandler. Если исходный сопоставитель находит обработчик схемы, соответствующий схеме URL- адреса, то исходный сопоставитель вызывает МВФSchemeHandler::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), содержащая краткое описание обработчика, например "My Byte-Stream Handler". Исходный сопоставитель вызывает CoCreateInstance для создания обработчика из CLSID. Вы можете зарегистрировать один и тот же обработчик в нескольких типах расширения или MIME.

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

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