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


Настройка модуля записи ASF

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

При создании фильтра модуля записи WM ASF он настраивается автоматически с помощью профиля WMProfile_V80_256Video. В этом профиле используются кодеки Windows Media Audio и Windows Media Video версии 8, которые отличаются от кодеков Серии Windows Media 9. Рекомендуется создать пользовательский профиль, использующий кодеки серии Windows Media 9, и настроить модуль записи WM ASF с настраиваемым профилем, как описано в разделе Настройка профилей и других свойств файла ASF. Перед настройкой фильтра необходимо добавить фильтр модуля записи WM ASF в граф фильтров и настроить фильтр перед подключением к любым другим фильтрам.

Все входные данные должны иметь метку времени, а все входные контакты должны быть подключены перед запуском или приостановкой фильтра. Таким образом, если вы настроите фильтр с профилем, который содержит аудиопоток и видеопоток, фильтр создаст звуковой и видеовходящий контакт, и оба контакта должны быть подключены перед запуском фильтра. Так как для работы пакета SDK для формата Windows Media требуется аудиопоток, модуль записи WM ASF всегда должен иметь входной звуковой контакт, даже если он предназначен для фиктивного потока, то есть аудиопотока с низкой скоростью без звука.

Добавление расширений единиц данных

Вы можете настроить поток профиля для расширений единиц данных, таких как коды времени SMPTE, до или после подключения фильтра, при условии, что выполняется следующий порядок операций:

  1. Добавьте одно или несколько расширений единиц данных в поток с помощью IWMStreamConfig2::AddDataUnitExtension.
  2. Вызовите IWMProfile::ReconfigStream , чтобы обновить профиль.
  3. Вызовите IConfigAsfWriter::ConfigureFilterUsingProfile с обновленным объектом профиля.
  4. Найдите контакт для ввода видео и вызовите его метод IAMWMBufferPass::SetNotify , чтобы зарегистрировать интерфейс IAMWMBufferPassCallback , определенный приложением.

При выполнении графа метод IAMWMBufferPassCallback::Notify будет вызываться для каждого кадра, и вы сможете получить и задать свойства в примере с помощью методов интерфейса INSSBuffer3 .

Примечание

В некоторых сценариях с интенсивным использованием процессора, таких как обратная телесина, модуль записи WM ASF может требовать больше выходных буферов, чем могут поддерживать некоторые подчиненные фильтры. Декодер DV, например, не будет принимать более одного буфера для выходного контакта, и то же самое справедливо для распаковщика AVI в определенных условиях. Если при попытке подключения к этим фильтрам или при запуске графа возникают проблемы, может потребоваться написать промежуточный фильтр, который принимает любое количество буферов на выходе.

 

Создание ASF-файлов в DirectShow