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


Использование детектора мультимедиа

[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи аудио и видеозахват в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код MediaPlayer, IMFMediaEngine и аудио-видеозахват в Media Foundation вместо DirectShowпо возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]

[Этот API не поддерживается и может быть изменен или недоступен в будущем.]

Детектор мультимедиа — это вспомогательный объект, который может получить сведения о файле, например количество потоков, их тип и их длительность. Он также содержит методы получения кадров плаката из видеопотока. Он предоставляет доступ к интерфейсу IMediaDet.

Детектор мультимедиа работает в одном из двух режимов. При создании экземпляра детектора мультимедиа он не присоединяется к определенному исходному файлу. В этом режиме можно получить данные потока из нескольких исходных файлов. Однако после использования детектора мультимедиа для получения рамки плаката, детектор переключается на режим захвата растрового изображения. В режиме захвата растрового изображения детектор мультимедиа подключен к определенному видеопотоку, а методы потоковой информации больше не работают. Кроме того, нет способа переключить детектор мультимедиа обратно в его начальный режим. Таким образом, получите все необходимые сведения о потоке перед получением кадров постера или создайте новые экземпляры медиа-детектора для каждого потока.

Чтобы получить сведения о потоке, сделайте следующее:

  1. Вызовите IMediaDet::put_Filename с именем исходного файла.
  2. Вызовите IMediaDet::get_OutputStreams, чтобы получить количество потоков в источнике.
  3. Укажите номер потока с IMediaDet::put_CurrentStream. Затем вызовите один или несколько следующих методов:

Чтобы получить кадр постера, укажите номер потока, как на предыдущем шаге. Затем вызовите IMediaDet::GetBitmapBits, который копирует кадр плаката в буфер или IMediaDet::WriteBitmapBits, который сохраняет кадр плаката в файл.

Работа с источниками