さて、今回WPFを学習する主動機であるこれのうち、動画の再生を取り上げてみます。

 

さて、この段階では

 

こんなものを見つけました。

『このページWindows メディア プレーヤーSDKに関連付けられている機能は、レガシ機能です。 MediaPlayerに置き換わりました。MediaPlayerは、Windows 10とWindows 11用に最適化されています。新しいコードでは、可能な場合は SDK ではなく MediaPlayerWindowsメディア プレーヤー使用することを強くお勧めします。Microsoftは、従来のAPIを使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。』

 

を引用しましたが、今よく見るとこれはまだまだレガシーなんですね。(Microsoft Learningの範疇が「アプリ/Win32/デスクトップ テクノロジ/音声とビデオ/Windows メディア プレーヤー SDK」になっています。)これは.NETでも.NET Frameworkでもないです。事実、自分でも気が付いて、

 

『じゃあ、MediaPlayerクラスのC#コードの記述』を調べようとしていると、またこんなものを見つけました。

(注)

注:はっきりと"Windows Presentation Foundation"とか"WPF"とか書かれていますが、私はその段階ではまだその本当の意味が分かっていませんでした。

 

と書いています。これは(今は断言できますが)正解ですね。そして、このWPFのサイトで動画再生について、

 

メディア API
....(後述)

MediaElementおよびMediaPlayerクラスは、オーディオまたはビデオのコンテンツを表示するために使用されます。これらのクラスは、対話式またはクロックで制御できます。これらのクラスは、Microsoft Windows Media Player 10 コントロールでメディアの再生に使用できます。どちらのクラスを使用するかは、シナリオによって決まります。
MediaElementは、レイアウトでサポートされている UIElement であり、多くのコントロールのコンテンツとして利用できます。また、Extensible Application Markup Language (XAML) とコードでも使用できます。それに対し、MediaPlayer は Drawing オブジェクト向けに設計されていて、レイアウトではサポートされていません。MediaPlayerを使用して読み込まれたメディアは、VideoDrawing を使用するか、DrawingContext を直接操作することでのみ表示できます。MediaPlayer は XAML では使用できません。

 

この文章の意味を当時は正確に理解していませんでしたが、今は分かります。要すれば、

 

動画再生は(Win32のコントロールのようにオブジェクト化できる)UIElementとしての("形のあるものとしてXAMLでレイアウトできる")MediaElementと、(XAMLでレイアウトする為の形を伴わない)"描画機能"としてのMediaPlayer

 

の二通りのソリューションがある、ということですね。

 

「じゃぁ、どっちを使えばいいの?」という当然の疑問が生じますが、それに対して前出のMicrosoft Learningでは,

 

メディア API
MediaElement および MediaPlayer クラスは、オーディオまたはビデオのコンテンツを表示するために使用されます。 これらのクラスは、対話式またはクロックで制御できます。 これらのクラスは、Microsoft Windows Media Player 10 コントロールでメディアの再生に使用できます。 どちらのクラスを使用するかは、シナリオによって決まります。

 

としか書いていません。

 

じゃ、どーするの?

 

ということで、

 

両方ともやっちゃいましょう!

 

というソリューションを採ることにしました!(まぁ、簡単な解法ですよね?)

 

ps. 順序はWin32でもわかりやすいUIElement(Win32なら「コントロール」と言い換えてもよいかと)のMediaElement

から行きましょう。実際、MediaPlayerは

Win32の感覚では「うへぇ、大変だねぇ」というような、WPFらしいものだったからです。(って、見た目は全く変わりありませんが...)