Использование мультимедийных потоков в приложениях
[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи аудио- и видеозахватом в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код MediaPlayer, IMFMediaEngine и аудио-видеозахват в Media Foundation вместо DirectShowпо возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
Заметка
Эти API устарели. Приложения должны использовать фильтр Sample Grabber или реализовать пользовательский фильтр для получения данных из графа фильтра DirectShow.
Интерфейсы потоковой передачи мультимедиа значительно упрощают процесс обработки мультимедийных данных, удаляя зависимость от конкретных характеристик источника оборудования или программного обеспечения и обеспечивая поддержку всех форматов мультимедиа Microsoft DirectX®. Потоки абстрагируют данные на очень высокий уровень; приложения могут даже перемещать данные из одного потока в другой, не зная ничего о формате данных.
Выполните следующие действия, чтобы создать мультимедийный поток.
- Создайте мультимедийный поток. Метод создания и инициализации потока специфичен для архитектуры. DirectShow поддерживает интерфейс IAMMultiMediaStream, который используется для инициализации потока. Другие реализации внутрипроцессного сервера IMultiMediaStream будут созданы и инициализированы с помощью различных механизмов.
- После инициализации объекта мультимедиа приложение будет использовать QueryInterface для получения интерфейса IMultiMediaStream для объекта. Используйте этот интерфейс для определения свойств потока и перечисления самих потоков. Чтобы получить определенный поток, вызовите метод IMultiMediaStream::GetMediaStream с определенным идентификатором назначения. MSPID_PrimaryVideo и MSPID_PrimaryAudio, которые представляют основной видеопоток и аудиопотоки, являются наиболее часто используемыми идентификаторами назначений.
- Вызовите IUnknown::QueryInterface для интерфейса, специфичного для типа медиа потока. Если вы хотите выполнить рендеринг видеопотока, например, получите его интерфейс IDirectDrawMediaStream. Интерфейсы для конкретных носителей определяют дополнительные методы, необходимые для использования возможностей формата.
- Создайте один или несколько примеров из данных потока. Каждый поток мультимедиа поддерживает метод IMediaStream::CreateSharedSample для создания примера. Полученный пример поддерживает интерфейс IStreamSample, который обеспечивает контроль над образцом и его характеристиками. Как правило, медиапоток поддерживает метод создания образца, специфичный для формата, который является более мощным, чем указанные выше методы IStreamSample. IDirectDrawMediaStream, например, может создавать образцы, подключенные к требуемой поверхности DirectDraw и области отсечения. Однако в некоторых ситуациях необходимо обрабатывать данные, не зная о его формате данных. Если вы хотите передавать данные независимо от его формата, используйте метод IMediaStream::CreateSharedSample для создания примеров данных.
- После создания всех требуемых примеров потоков запустите поток, вызвав метод IMultiMediaStream::SetState и передайте флаг STREAMSTATE_RUN в качестве параметра.
- Вызовите IStreamSample::Update для обновления примера потока. Когда метод IStreamSample::Update завершает работу, вы можете получить доступ к данным примера. Если требуется триггер определенного события или вызова функции при возвращении обновления, передайте соответствующие указатели на метод IStreamSample::Update.
Дополнительные сведения об интерфейсах мультимедийного потокового вещания см. в .