Воспроизведение видео в приложении C # через Windows Media Player.Есть ли стабильное, достойно работающее решение? - PullRequest
1 голос
/ 08 сентября 2010

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

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 12 сентября 2010

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

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

-Jer

0 голосов
/ 08 сентября 2010

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

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

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

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

...