MediaElement and MediaPlayer

Published 03 November 06 12:22 PM | hiroyuk 

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

Comments

No Comments
Anonymous comments are disabled

About hiroyuk

マイクロソフト㈱エバンジェリスト。早稲田大学IT研究機構・理工学術院客員教授。北海道大学理学部物理学科卒。リアルタイム3Dグラフィックスを専門とし、グラフィックスやシェーダに関する技術文章を執筆・講演。 DirectX SDK日本語ドキュメントの開発に携わるとともに、Windows Presentation Foundation プログラミング(オーム社)、Game Programming Gemsシリーズ、リアルタイム レンダリング第2版(ボーンデジタル)などを翻訳・監修、XAMLプログラミング(ソフトバンク クリエイティブ)を執筆。趣味は薪割り。
Page view tracker