WPFでビデオやオーディオなどのメディアを再生するには、多くの場合次のようにMediaElementを使います。MediaElementはStackPanelやCanvasレイアウト上に配置できるので、単独で使えて便利です。
<MediaElement Source = "..\..\intro.wmv" Width="300" Height="200" />
WPFには、もう一つのメディア再生用の要素として、MediaPlayerがあります。これはMediaElementと違って、レイアウト上に単独では使えず、DrawingBrushと組み合わせて使います。つまり、メディアで何らかの形状を塗りつぶすときに使います。また、MediaPlayer要素はXAML内で記述できません、次のようにC#などのコードビハインドで記述します。
<Rectangle Width="300" Height="200" Stroke="Black" MouseDown="OnClick1"> <Rectangle.Fill> <DrawingBrush> <DrawingBrush.Drawing> <VideoDrawing x:Name="MyVideoDrawing" Rect="0,0,300,200" /> </DrawingBrush.Drawing> </DrawingBrush> </Rectangle.Fill></Rectangle>
void OnClick1(object sender, RoutedEventArgs e){ MediaPlayer MyPlayer = new MediaPlayer(); MyPlayer.Open(new Uri(@"..\..\intro.wmv", UriKind.Relative)); MyVideoDrawing.Player = MyPlayer; MyPlayer.Play();}
MediaElementとVisualBrushを使えば、同じことがXAMLだけで実現できます。わざわざMediaPlayer要素を使うメリットはなんでしょうか?実は、MediaPlayer+DrawingBrushを使うと(あるいはMediaElement単独だと)、内部での(レンダラによってはGPUでの)コピー回数を、MediaElement+VisualBrushより1回減らすことができます。小さなビデオでは問題にならないかもしれませんが、HDビデオや多数のビデオを同時再生するような場合には、効果があるかもしれません。