Мне поручено пересмотреть приложение, которое использует 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
Во-первых, спасибо за этот обширный ответ, очень полезно! «Оба они созданы, чтобы скрыть всю сложность и автоматически использовать декодирование DXVA за кулисами». > Должен ли я еще сказать MediaEngine или что-то еще, чтобы использовать его, или это происходит автоматически, когда декодер поддерживает его (если это так, из любопытства, как я могу сказать, чтобы отключить его - мне трудно найти это) ? Что касается вашего последнего замечания: рекомендуете ли вы придерживаться DirectShow и просто отдавать обработку рендеринга текстуре или все же перемещаться по MF? –
'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. –
У меня создалось впечатление, что на устройстве можно установить какой-либо параметр создания, чтобы полностью отключить (или включить) DXVA - данное приложение должно отображать множество типов, от H.264 MP4 до WMV и AVI, которого я не знаю заранее? –