2016-08-01 30 views
5

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

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

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

  • DirectShow
  • Media Foundation
    • Медиа-сессия (< для Windows 8)
    • Медиа Двигатель (> Окна 8)
  • DXVA1
  • DXVA2
  • DXVA-HD

DirectShow, очевидно, самый старый, но все еще работает довольно хорошо, и в основном из-за огромного количества доступных кодеков.

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

В дополнение к этим двум методам существует DXVA, что позволяет отключать декодирование видео на GPU. В настоящее время я столкнулся с тремя разными типами. DXVA1 - это реализация, которая существует с тех пор, как XP, DXVA2 является новым API. Но что такое DXVA-HD? Является ли он более новым, чем DXVA2, или это эквивалентное имя?

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

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

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

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

ответ

6

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

Кодеки - это, как правило, программные элементы, которые либо распаковывают сжатый формат в несжатые (декодеры), либо наоборот (кодеры). Ни один из API не работает с точно кодеками и вместо этого определяет общий интерфейс для компонента со входом и выходом, например. фильтр в DirectShow, DirectX Media Object (DMO) или его эволюция - преобразование подстановки носителя (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 Media Player 8+ как DirectShow, так и MF-рендеринг и заменяет их на лету или Microsoft полностью отказывается от DirectShow?

Да, WMP 12 все еще имеет оба. Windows 10 Фильмы & ТВ-плеер - только MF.

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

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

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

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

... The miracle of DirectShow is that, even though it was written in 1995, that original code still supports the many wild and varied multimedia formats that have been developed since. The latest baseclasses update I'm aware of is from 2009, in the Windows 7 SDK, but even that has only minor modifications from the original release.

[...]

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

[...]

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

+0

Во-первых, спасибо за этот обширный ответ, очень полезно! «Оба они созданы, чтобы скрыть всю сложность и автоматически использовать декодирование DXVA за кулисами». > Должен ли я еще сказать MediaEngine или что-то еще, чтобы использовать его, или это происходит автоматически, когда декодер поддерживает его (если это так, из любопытства, как я могу сказать, чтобы отключить его - мне трудно найти это) ? Что касается вашего последнего замечания: рекомендуете ли вы придерживаться DirectShow и просто отдавать обработку рендеринга текстуре или все же перемещаться по MF? –

+0

'1' это автоматическое; с DirectShow вы отключите его на декодере, используя ICodecAPI, как описано в [здесь] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd390679) и с Media Foundation там, где описаны аналогичные атрибуты MFT [там] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd797815) '2' для рендеринга H.264 в текстуру с помощью аппаратного декодера я бы взял Media Foundation. –

+0

У меня создалось впечатление, что на устройстве можно установить какой-либо параметр создания, чтобы полностью отключить (или включить) DXVA - данное приложение должно отображать множество типов, от H.264 MP4 до WMV и AVI, которого я не знаю заранее? –