Воспроизведение видео в приложении C# через проигрыватель Windows Media. Есть ли стабильное, прилично работающее решение?

Я написал приложение WPF (в Visual C# 2010 Express), которое имеет 2 окна. Первый имеет различные кнопки, другой отображает видео с помощью элемента управления MediaElement. При нажатии кнопки связанное с ней видео воспроизводится или останавливается, если оно уже воспроизводится.

На моем компьютере для разработки (Windows 7, хорошая видеокарта, много памяти и т. д.) все работает нормально. Единственная проблема, с которой я столкнулся, заключается в том, что при подключении к отладчику он очень нестабилен, но при обычном запуске эти проблемы исчезают.

К сожалению, при запуске на гораздо менее мощной машине XP видео работает со скоростью 1-2 кадра в секунду. И это несмотря на то, что видео нормально воспроизводится в проигрывателе Windows Media.

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

Я попробовал вызов бесплатной библиотеки WPF MediaKit (http://wpfmediakit.codeplex.com), который, как я думал, мог некоторый эффект, однако, хотя я заставил его работать на компьютере с XP, он решительно отказывается отображать видео на моем компьютере для разработки, несмотря на использование точно такого же кода. Я все еще надеюсь, что это сработает, но я не уверен, что это поможет, учитывая, что он все еще использует элемент управления MediaElement за кулисами.

Затем я попытался использовать COM-элемент wmp.dll (формы Windows, а не WPF) и даже с самым простым приложением (новый проект Windows Form, элемент управления WMP, добавленный в форму, и 1 строка кода для установки URL-адреса при загрузке) я получаю странное поведение . С подключенным отладчиком он работает на нескольких мониторах, но иногда, когда он начинает играть, он просто неоднократно заикается на первых нескольких кадрах, и единственный способ вырваться из этого, кажется, - переместить его на другой монитор. Если я не использую отладчик, у меня не возникает проблемы с заиканием, но видео отображается только на основном мониторе, как только я перемещаю окно на дополнительный монитор, оно становится черным.

Итак, мой вопрос: кто-нибудь сталкивался с чем-то подобным вышеизложенному и/или имел достойное решение? Было бы особенно приятно найти что-то, что стабильно работает как с подключенным отладчиком, так и без него!


person rcarrington    schedule 08.09.2010    source источник


Ответы (2)


Вы пробовали эту библиотеку?

http://directshownet.sourceforge.net/about.html

Также есть этот интерфейс .NET для медиаплеера VideoLAN, но он вводит зависимость от VLC:

http://wiki.videolan.org/.Net_Interface_to_VLC

person code4life    schedule 08.09.2010

WPF MediaKit не использует MediaElement за кулисами, а вместо этого использует класс взаимодействия D3DImage для предоставления высокопроизводительного видео в WPF.

WPF в XP всегда был хитом с точки зрения производительности. Возможно, вы захотите взглянуть на уровень рендеринга, чтобы убедиться, что WPF полностью аппаратно ускоряется. Также убедитесь, что у вас установлены новейшие видеодрайверы и поддерживает ли их графический процессор.

-Джер

person Jeremiah Morrill    schedule 12.09.2010
comment
Также убедитесь, что у вас установлены кодеки DirectShow. См. github.com/Sascha-L/WPF-MediaKit/wiki/FAQ - person xmedeko; 04.09.2017