Oct.21

[WPF] S’amuser avec le MediaElement sous WPF

Le contrôle MediaElement que j’ai decouvert au cours de cette semaine a revolutionné ma petite vie de developpeur 🙂 Ce contrôle permet de contenir des images, sons ou videos.
Pour charger un media, rien de plus simple :

Sachant que mon Uri peut pointer sur un fichier local (c:\….) ou distant (http://…..) que se soit une video, une image ou un son….

Le media sera joué immédiatement. Bien que vous disposez des methodes Play(), Stop() et Pause() pour contrôler le media, utilisez plutot la proprieté LoadedBehavior qui permet de definir et/ou obtenir l’etat du media :

A ce sujet, pour pouvoir jouer une video (ou son) en boucle, la seule doc que j’avais trouvé sur le msdn2 était de mettre un MediaTimeline. Chose un peu tordu dans le code alors qu’il y a une solution toute simple :
1) Abonnez-vous à l’evenement MediaEnded (fin du media) :

2) Remettez la position du media à zero (debut) et relancez le media :

Ce qui est quand même beaucoup plus simple 🙂

C’est bien beau tout ca, mais la vous n’avez aucun apercu à l’ecran ce qui est quand meme un peu dommage ^^ Mais là où ca devient fort bien interressant, c’est qu’un VisualBrush peut prendre en parametre un MediaElement pour pouvoir remplir un rectangle par exemple :

Et hop la, votre video (par exemple) sera joué dans ce rectangle. Enfin pour rajouter votre rectangle à un canvas que vous aurez au préalable placé dans votre code XAML :

A partir de la on peut vraiement s’amuser et aller plus loin dans la démarche.. Par exemple, les rectangles ont une proprieté Clip qui va nous permettre de clipper notre media, OpacityMask pour appliquer un masque d’opacité, et bien d’autre chose pour appliquer differents effets a notre rectangle/video, … Et encore je ne parle que des rectangles, a partir du moment où votre controle pourra etre remplit par un VisualBrush on pourra tout y mettre 🙂
Je ne vais pas vous devoiler sur ce quoi je travaille en ce moment, mais il faut bien se rendre compte de tout ce qu’on peut faire avec car c’est carrement dément…

Dev,WPF
Share this Story:
  • facebook
  • twitter
  • gplus

Comments(5)

  1. Leclercq Jean-Christophe
    le 22 février 2009 à 01:05

    Thx !
    Ca m’a bien servi pour me faire mon petit player :p

  2. xxx
    le 24 mars 2009 à 11:19

    Merci !

    Ça m’as bien servi à moi aussi 🙂

  3. Mathieu
    le 3 mai 2009 à 16:12

    Bonjour,

    Article très intéressant !

    Quelqu’un a-t-il une solution pour jouer un son/vidéo depuis un fichier lié dans les ressources de l’application ?

    merci d’avance.

  4. alt157
    le 22 mai 2009 à 09:51

    Bonjour,

    je trouve l article très intéressant, vraiment bien fait.

    Et pour répondre à Matthieu personnellement je créerai le fichier de facon temporaire sur le DD puis je le lirai et a la fin du media je le supprime.

    Un petit exemple avec un mp3 :

    [code]

    string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @ »\test.mp3″;

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
    // recopie le fichier dans les ressources sur le DD
    System.IO.File.WriteAllBytes(path, Properties.Resources._04___Entities);
    mediaElement1.Source = new Uri(path);
    mediaElement1.LoadedBehavior = MediaState.Play;
    }

    private void mediaElement1_MediaEnded(object sender, RoutedEventArgs e)
    {
    // libere les ressources
    mediaElement1.LoadedBehavior = MediaState.Close;
    // supprime le fichier du DD
    System.IO.File.Delete(path);
    }

    [/code]

    J espere que cela t aidera.

    Merci encore pour l article 🙂

  5. souma
    le 19 janvier 2011 à 10:21

    merci bcp, ça m’a aidé !!!

Leave a comment

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Comment