Обработчики схем и обработчики 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-адрес, если он доступен. Обработчик байтового потока считывает из потока байтов, пока не анализирует достаточно данных, чтобы создать источник мультимедиа.
Связанные разделы