2010-09-08 23 views
1

J'ai écrit une application WPF (dans Visual C# 2010 Express) qui a 2 fenêtres. Le 1er a plusieurs boutons, l'autre affiche la vidéo en utilisant le contrôle MediaElement. Lorsqu'un bouton est enfoncé, une vidéo associée est lue ou arrêtée si elle est déjà en cours de lecture.Lecture de vidéos dans une application C# via Windows Media Player. Existe-t-il une solution stable et performante?

Sur ma machine de développement (Windows 7, bonne carte graphique, beaucoup de mémoire, etc.), cela fonctionne bien. Le seul problème que j'ai rencontré est que lorsqu'il est attaché au débogueur, il est très instable, mais lorsqu'il est exécuté normalement ces problèmes disparaissent.

Malheureusement, lorsqu'ils sont exécutés sur une machine XP beaucoup moins puissante, les vidéos tournent à 1-2fps. C'est malgré le fait que les vidéos fonctionnent bien dans Windows Media Player. Il semble y avoir beaucoup de rapports de mauvaises performances pour le contrôle MediaElement (sans parler des incohérences dans ce qu'il peut jouer) donc j'ai décidé d'examiner quelques alternatives.

J'ai essayé un appel de bibliothèque gratuit WPF MediaKit (http://wpfmediakit.codeplex.com) que je pensais pouvoir avoir un certain effet, mais alors que je l'ai pour travailler sur une machine XP, il refuse résolument d'afficher des vidéos sur ma machine de développement le même code. J'espère toujours que cela fonctionnera, mais je ne suis pas sûr que cela aidera, car il utilise toujours le contrôle MediaElement dans les coulisses. J'ai ensuite essayé d'utiliser le contrôle COM wmp.dll (Windows Forms plutôt que WPF) et même avec l'application la plus simple (nouveau projet Windows Form, contrôle WMP ajouté au formulaire, et 1 ligne de code pour définir l'URL en charge) J'ai un comportement étrange. Avec le débogueur connecté, il fonctionne sur plusieurs moniteurs, mais parfois, quand il commence à jouer, il bourdonne à plusieurs reprises sur les premières images et la seule façon de le sortir semble être de le déplacer vers l'autre moniteur. Si je n'utilise pas le débogueur, je ne vois pas le problème du bégaiement mais la vidéo n'est affichée que sur le moniteur principal, dès que je déplace la fenêtre vers le moniteur secondaire, elle devient noire.

Donc, ma question est de savoir si quelqu'un a vécu quelque chose comme ce qui précède et/ou d'avoir une solution décente? Il serait particulièrement agréable de trouver quelque chose qui fonctionne avec et sans le débogueur attaché!

Répondre

0

WPF MediaKit n'utilise pas MediaElement dans les coulisses, mais au lieu des utilisations la classe d'interopérabilité D3DImage pour fournir une vidéo haute performance à WPF.

WPF sous XP a toujours été un succès en termes de performances. Vous voudrez peut-être jeter un coup d'œil au niveau de rendu pour vous assurer que WPF accélère entièrement le matériel. Assurez-vous également que vous disposez des derniers pilotes vidéo disponibles et que le GPU est capable.

-Jer

+0

Vérifiez également que les codecs DirectShow sont installés. Voir https://github.com/Sascha-L/WPF-MediaKit/wiki/FAQ – xmedeko