DirectShow, Media Foundation, DXVA, что?

Мне поручено пересмотреть приложение, которое использует DirectShow для рендеринга видео. Старое приложение работает нормально, но начинает показывать возраст.

Поскольку у меня есть игровой опыт, я решил, что должен просто подойти к этому как таковому. После того, как я сделал несколько прототипов с использованием различных методов, я был почти уверен, что смогу использовать рендеринг видео в текстуру и использовать DirectX для выполнения всех запросов клиентов.

Тем не менее, я сейчас нахожусь в точке, я должен выбрать технику, чтобы идти, и я не мог быть более потерянным...

  • DirectShow
  • Медиа Фонд
    • Медиа-сессия (
    • Media Engine (> Windows 8)
  • DXVA1
  • DXVA2
  • DXVA-HD

DirectShow, очевидно, является самым старым, но все еще работает довольно хорошо, также в основном из-за ОГРОМНОГО количества доступных кодеков.

Media Foundation был представлен с Windows Vista и имел что-то под названием "Media Session" вплоть до Windows 8, после чего они представили "Media Engine". Если я правильно, кодеки называются MFT? Есть ли на самом деле сайты, которые имеют такие же, как free-codecs.com?

Помимо этих двух методов, есть DXVA, который позволяет вам выгружать декодирование видео в графический процессор. В настоящее время я столкнулся с 3 различными типами. DXVA1 - это реализация, которая существует с XP, DXVA2 - более новый API. Но что такое DXVA-HD? Это новее, чем DXVA2, или это эквивалентное имя?

Я действительно хочу перейти к Media Foundation, готовые кодеки действительно хорошо работают с форматами, которые хочет использовать клиент. Все, что меня беспокоит, это то, как легко получить кодеки для него... У медиаплеера по умолчанию в Windows 8+ есть пути рендеринга DirectShow и MF, и они меняются на лету, или Microsoft полностью прекращает DirectShow?

Я также не могу понять, как DXVA должен работать. Поскольку я хочу в основном рендерить видео в игре, имеет смысл только сделать так, чтобы весь рендеринг действительно происходил на GPU, и сохранить логику приложения на CPU, но я не могу найти хороших примеров того, как использовать его с помощью Media Фонд. В основном это связано с тем, что я не знаю разницу между DXVA2 и DXVA-HD. Windows 7 SDK поставляется с образцами для всех 3 реализаций...

Если бы кто-то мог ответить на мои вопросы жирным шрифтом, исправить мою дезинформацию и указать мне правильный пример (ы) (DirectX + Media Foundation + DXVA-что угодно), я был бы очень благодарен! Это может быть так просто, как "объединить эти 3 примера Windows 7 SDK, чтобы получить то, что вы хотите).

Цель всего задания - снова получить приложение в первоклассной форме, и я хочу быть абсолютно уверенным, что выберу методы, которые будут работать в течение следующего десятилетия, как уже было в DirectShow:P

1 ответ

Решение

Если я правильно, кодеки называются MFT? Есть ли на самом деле сайты, которые имеют такие же, как free-codecs.com?

Кодеки, как правило, представляют собой программные элементы, которые либо распаковывают из сжатого формата в несжатый (декодеры), либо наоборот (кодеры). Ни один из API не работает именно с кодеками и вместо этого определяет общий интерфейс для компонента с вводом и выводом, например, фильтр в DirectShow, DirectX Media Object (DMO) или его эволюция - Media Foundnation Transform (MFT).

MFT является базовым компонентом Media Foundation: кодеры, декодеры, эффекты, средства масштабирования, устройства захвата видео - все они имеют MFT внутри, и на их основе построен API более высокого уровня.

Из-за ограниченного интереса к Media Foundation, сторонние MFT являются редкостью. Хотя вы можете найти практически все в форм-факторе фильтра DirectShow, это не относится к Media Foundation и MFT.

Но что такое DXVA-HD? Это новее, чем DXVA2, или это эквивалентное имя?

DXVA-HD является частью семейства API-интерфейсов DXVA 2.0 и охватывает аппаратно-ускоренную обработку видео. Доступный как общедоступный низкоуровневый интерфейс, он также интегрирован в стандартные компоненты DirectShow и Media Foundation.

Использует ли медиаплеер по умолчанию в Windows 8+ пути рендеринга DirectShow и MF и заменяет их "на лету", или Microsoft полностью отказывается от DirectShow?

Да, WMP 12 все еще имеет оба. Проигрыватель Windows 10 Movies & TV предназначен только для MF.

Поскольку я хочу в основном рендерить видео в игре, имеет смысл только сделать так, чтобы весь рендеринг действительно происходил на GPU, и сохранить логику приложения на CPU, но я не могу найти хороших примеров того, как использовать его с помощью Media Фонд.

И DirectShow, и Media Foundation предлагают стандартные декодеры с поддержкой DXVA (в основном для H.264, но не только). Я бы сказал, что реализация DirectShow довольно негибкая и предназначена для использования с EVR. Media Foundation более гибко реализован и может использоваться вне конвейера MF как MFT. И то и другое сделано, чтобы скрыть всю сложность и использовать декодирование DXVA автоматически за кулисами.

... и я хочу быть абсолютно уверенным, что выберу методы, которые будут работать в течение следующего десятилетия, как уже было в DirectShow

DirectShow все еще здесь, как унаследованный API, с гораздо более щедрым предложением в примерах, коде, публичной информации, документации, сторонней расширяемости. Media Foundation является намеренной заменой, привлекающей к ней весьма ограниченный интерес. По сути, он не предлагает много по сравнению с DirectShow, Microsoft не разработала его, чтобы охватить набор функций DirectShow - что часто ожидается от более нового API, не предлагает полезных инструментов для разработчиков. Похоже, предполагалось, что MF, будучи новичком, должен продавать его самостоятельно, но в итоге это не сработало:

... Чудо DirectShow заключается в том, что, несмотря на то, что он был написан в 1995 году, этот оригинальный код все еще поддерживает множество диких и разнообразных мультимедийных форматов, которые были разработаны с тех пор. Последнее обновление базовых классов, о котором я знаю, было выпущено в 2009 году в Windows 7 SDK, но даже оно имеет незначительные изменения по сравнению с первоначальным выпуском.

[...]

Но помните, что даже 7 лет назад DirectShow было уже 15 лет. Базовые классы были выпущены в исходной форме с самого начала. Программисты, которым небезразлично, уделяют им более двух десятилетий внимания. Проблемы были устранены давным-давно.

[...]

Сказав все это, это правда, что люди в Редмонде считают DirectShow мертвой технологией. Они перешли в Media Foundation по причинам, которые полностью меня избегают. У меня все еще есть проблема, которую Media Foundation решает лучше, чем DirectShow. Его внутренние ограничения означают, что есть проблемы, которые он просто не может решить. Я никогда не пойму, почему они решили начать все сначала, вместо того, чтобы исправлять то, что им не нравилось в DShow. Фундаментальные понятия абсолютно идентичны, хотя словарь другой. Это просто пустая трата ресурсов.

Другие вопросы по тегам