Интерфейс IAMPushSource (strmif.h)
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]
Интерфейс IAMPushSource
синхронизирует граф фильтра, который отрисовывает динамический источник. Динамический источник — это источник, который передает данные в режиме реального времени, например устройство захвата или сетевую трансляцию.
Исходные фильтры, выполняющие потоковую передачу динамических данных, должны предоставлять этот интерфейс на выходных контактах. Как правило, приложения не должны вызывать методы в этом интерфейсе; Вместо этого используйте интерфейс IAMGraphStreams .
Наследование
Интерфейс IAMPushSource наследуется от IAMLatency. IAMPushSource также содержит следующие типы элементов:
Методы
Интерфейс IAMPushSource содержит следующие методы.
IAMPushSource::GetMaxStreamOffset Метод GetMaxStreamOffset извлекает максимальное смещение потока, поддерживаемого фильтром. |
IAMPushSource::GetPushSourceFlags Метод GetPushSourceFlags извлекает сочетание флагов, описывающих поведение фильтра. |
IAMPushSource::GetStreamOffset Метод GetStreamOffset извлекает смещение, которое фильтр использует при создании меток времени. |
IAMPushSource::SetMaxStreamOffset Метод SetMaxStreamOffset указывает смещение потока, которое будет разрешено в графе фильтра. |
IAMPushSource::SetPushSourceFlags Метод SetPushSourceFlags задает флаги, определяющие поведение фильтра. В настоящее время приложения не должны вызывать этот метод, так как флаги запросов не поддерживаются и приложение не должно переопределять флаги, заданные фильтром. |
IAMPushSource::SetStreamOffset Метод SetStreamOffset задает смещение для меток времени, созданных этим фильтром. |
Комментарии
Диспетчер фильтров графов использует методы этого интерфейса для решения двух проблем, которые обычно возникают при отрисовке динамических источников:
- Задержка. Если диаграмма фильтра включает несколько динамических источников, источники часто имеют разные задержки, что может привести к их несинхронизированности. Например, если время задержки захвата звука превышает время захвата видео, звук будет отставать от видео, если граф не компенсирует разницу.
- Сопоставление скорости. Когда фильтр отрисовщика подключен к активному источнику, он должен настроить скорость потребления данных в соответствии с рабочей скоростью исходного фильтра. В противном случае в данных могут быть пробелы (если отрисовщик работает быстрее источника) или данные могут быть удалены (если источник работает быстрее).
IAMPushSource
интерфейс, и определяет максимальную задержку в графе. Затем он вызывает IAMPushSource::SetStreamOffset для любых фильтров с максимальной задержкой, чтобы они отрегулировали создаваемые ими метки времени с правильным смещением.
Чтобы выполнить сопоставление скорости, граф фильтра должен определить, может ли фильтр отрисовщика сопоставлять частоту часов с исходным фильтром. Метод IAMPushSource::GetPushSourceFlags возвращает набор флагов, указывающих, является ли отрисовщик безопасным для сопоставления скоростей с источником.
Эти проблемы не влияют на запись в файл. Фильтр записи файлов использует метки времени во входящих примерах для правильной записи файла; затем потоки синхронизируются во время воспроизведения. Что касается сопоставления скорости, данные всегда записываются в файл как можно быстрее.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | strmif.h (включая Dshow.h) |