Master thesis

News

Back to overview

18 Nov Video brush

2008-11-18 Jonathan

Met een MediaElement control in WPF kan je video embedden in een WPF window. Volgende code gebruik ik om een Video applicatie te maken.

<UserControl x:Class="EverywhereExampleApplications.VideoWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="600" Width="800">
    <!-- This requires at least Windows Media Player 10 -->
    <MediaElement ScrubbingEnabled="True" LoadedBehavior="Play" x:Name="_media" />
</UserControl>

Doordat de render engine een VisualBrush gebruikt waar deze UserControl aan wordt gekoppeld, wordt de video op de muur geprojecteerd.

Hier wordt "Astérix et les Viking" in high definition (720p) gespeeld, zonder merkbare vertraging in het beeld.

De klok die je hieronder kan zien werkt live, net zoals de video rechtstreeks kan afspelen uit het videobestand.

Onderstaande code is alles wat nodig is om van deze video-UserControl een ED applicatie te maken. Hier accepteren we nog twee parameters om het bronbestand en de startpositie vanuit de everywhere-config mee te geven.

using Everywhere.ApplicationInterface;
using Everywhere.Model;

namespace EverywhereExampleApplications
{
   public class Video : EverywhereApplication
   {
       public Video(IEverywhereModel model, Dictionary<string, string> parameters, RegisterWindowHandler register)
           : base(model, parameters, register)
       {
           if (!parameters.ContainsKey("source"))
               throw new Exception("VideoApp expects parameter 'source'");
   
       		TimeSpan t = new TimeSpan(0, 0, 0);
       		if (parameters.ContainsKey("position"))
       			t = new TimeSpan(
       				int.Parse(parameters["position"].Split(':')[0]),
       				int.Parse(parameters["position"].Split(':')[1]),
       				int.Parse(parameters["position"].Split(':')[2]));
   
           string source = parameters["source"];
           register("main", new VideoWindow(source, t));
       }
   }
   
   public partial class VideoWindow : UserControl
   {
       public VideoWindow(string source, TimeSpan position)
       {
           InitializeComponent();
           _media.Source = new Uri(source);
       		_media.Position = position;
       }
   }
}

Comments