MediaElement and MediaPlayer
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ビデオや多数のビデオを同時再生するような場合には、効果があるかもしれません。