Аппаратное ускорение видео в DirectShow / WinForms - PullRequest
6 голосов
/ 26 января 2010

В настоящее время создается прототип приложения для Windows .NET, которое должно воспроизводить видео высокой четкости WMV и H264. Мои тестовые файлы заполнены 1080p.

Целевое оборудование имеет слабые процессоры Atom, но сильную графику NVidia 9400. Я знаю, что графика интегрирована, но я понимаю, что она хороша для воспроизведения видео.

Тестирование в Windows 7, если я воспроизводю свои тестовые файлы в WPF, используя элемент управления MediaElement, загрузка моего процессора равна 0.

Однако , целевой ОС является Windows XP, и у нас может не быть .NET 3.0. Поэтому приложение должно работать в WinForms. По различным причинам Windows Media Player ActiveX не вариант. Итак, мы смотрим на DirectShow.

Я собрал плеер с помощью DirectShow.NET, воспроизводя видео в полноэкранном режиме с помощью VMR9. Используя этот подход, мои файлы WMV потребляют где-то между 20 - 30% ЦП. Мне пришлось установить mp4 muxer / demuxer, чтобы заставить воспроизводиться файлы H264, а затем они потребляли 40 - 50% ЦП.

  • Я знаю, что Windows 7 поддерживает H264 из коробки. Однако, похоже, это не фильтр DirectShow?
  • Почему мое видео ускоряется с помощью WPF, а не при использовании DirectShow? Насколько я понимаю, DirectShow поддерживает DXvA.

tldr: как мне добиться аппаратного ускорения воспроизведения видео WMV и H264 в WinForms?

Спасибо!

Ответы [ 3 ]

4 голосов
/ 27 января 2010

Есть много коммерческих аппаратных фильтров h264 с ускорением, доступных там. Некоторые используют DXVA, некоторые используют Cuda. Ни один из них не является бесплатным, но большинство из них не дорогие. Ffdshow и связанные с ним проекты ffmpeg великолепны, но они абсолютно не поддерживают HD h264 на процессоре Atom. (Если кто-то может доказать обратное, я бы хотел услышать от вас.)

Я воспроизводил HD h264 на той же платформе Ion, которую вы описали, используя DirectShow в XP. Он является граничным по производительности для 1080p, но может управлять им, если вы можете ограничить битрейт и не выполнять много других операций с процессором или графическим процессором одновременно. 720p намного удобнее, особенно если вы можете обойтись с 24 или 30 кадрами в секунду вместо 60.

Вдобавок ко всему, кодеками, которые лучше всего работали на Ion для h264, были MainConcept, CoreAVC и Cyberlink.

Я бы также предложил попробовать VMR7 вместо VMR9, если это вариант для вас. Некоторые кодеки DXVA более надежны и лучше работают с VMR7.

2 голосов
/ 27 января 2010

Я провел некоторую проверку с помощью утилиты DXVA, рекомендованной Джереми Морилом.

У меня довольно хорошее представление о том, что происходит сейчас ...

  • Я думаю, что поддержка H264 в Windows 7 обеспечивается MediaFoundation, что объясняет, почему мое приложение DirectShow не может его использовать!
  • Запуск видео WMV с использованием фильтра DirectShow в Windows 7 обеспечивает разные уровни производительности в зависимости от средства визуализации (VMR7 / VMR9 / EVR). VMR7 имеет наименьшую нагрузку на процессор (6–7% ЦП), но худшее качество, EVR (8–12% ЦП) немного более эффективен, чем VMR9 (12–13% ЦП), однако они оба выглядят одинаково. Тем не менее, кикером является фильтр MediaFoundation - который явно полностью ускорен и использует 0% ЦП. Поэтому я бы предположил, что в Windows 7 MediaElement использует MediaFoundation?

Итак, суть в том, что мне нужно протестировать Windows XP с графикой 9400. Похоже, полное аппаратное ускорение будет невозможно (поскольку у нас нет MediaFoundation и, следовательно, у нас нет DXvA2) ...

Еще раз спасибо за помощь!

2 голосов
/ 26 января 2010

У меня нет прямого ответа, но утилита проверки DXVA помогла мне отладить проблемы DXVA в прошлом. Вот ссылка для скачивания: http://bluesky23.hp.infoseek.co.jp/en/index.html

...