マルチメディアの概要
Windows Presentation Foundation (WPF) のマルチメディア機能を使用すると、オーディオとビデオをアプリケーションに統合して、ユーザー エクスペリエンスを向上させることができます。 このトピックでは、WPF のマルチメディア機能について説明します。
Media API
MediaElement クラスと MediaPlayer クラスは、オーディオまたはビデオコンテンツを表示するために使用されます。 これらのクラスは、対話形式またはクロックによって制御できます。 これらのクラスは、メディアの再生に Microsoft Windows Media Player 10 コントロールで使用できます。 使用するクラスは、シナリオによって異なります。
MediaElement は、レイアウト でサポートされ、多くのコントロールのコンテンツとして使用できる UIElement です。 また、拡張アプリケーション マークアップ言語 (XAML) とコードでも使用できます。 一方、MediaPlayerは Drawing オブジェクト用に設計されており、レイアウトのサポートがありません。 MediaPlayer を使用して読み込まれたメディアは、VideoDrawing を使用するか、DrawingContextと直接対話することによってのみ表示できます。 MediaPlayer は XAML では使用できません。
描画オブジェクトと描画コンテキストの詳細については、「描画オブジェクトの概要を参照してください。
手記
アプリケーションでメディアを配布する場合、メディア ファイルをプロジェクト リソースとして使用することはできません。 プロジェクト ファイルでは、代わりにメディアの種類を Content
に設定し、CopyToOutputDirectory
を PreserveNewest
または Always
に設定する必要があります。
メディア再生モード
手記
MediaElement と MediaPlayer の両方に同様のメンバーがあります。 このセクションのリンクは、MediaElement クラス メンバーを参照します。 特に明記されていない限り、MediaElement クラスにリンクされているメンバーは、MediaPlayer クラスでも見つけることができます。
Windows Presentation Foundation (WPF) でのメディア再生を理解するには、メディアを再生できるさまざまなモードを理解する必要があります。 MediaElement と MediaPlayer の両方を、独立モードとクロック モードの 2 つの異なるメディア モードで使用できます。 メディア モードは、Clock プロパティによって決まります。 Clock が null
されると、メディア オブジェクトは独立モードになります。 Clock が null 以外の場合、メディア オブジェクトはクロック モードになります。 既定では、メディア オブジェクトは独立モードです。
独立モード
独立モードでは、メディア コンテンツによってメディアの再生が促進されます。 独立モードでは、次のオプションが有効になります。
メディアの Uri を直接指定できます。
メディアの再生を直接制御できます。
メディアの Position プロパティと SpeedRatio プロパティは変更できます。
メディアは、MediaElement オブジェクトの Source プロパティを設定するか、MediaPlayer オブジェクトの Open メソッドを呼び出すことによって読み込まれます。
メディアの再生を独立モードで制御するには、メディア オブジェクトの制御メソッドを使用できます。 使用できる制御メソッドは、Play、Pause、Close、および Stopです。 MediaElementの場合、これらのメソッドを使用した対話型コントロールは、LoadedBehavior が Manualに設定されている場合にのみ使用できます。 メディア オブジェクトがクロック モードの場合、これらのメソッドは使用できません。
独立モードの例については、「MediaElement (Play、Pause、Stop、Volume、Speed) を制御する」を参照してください。
クロック モード
クロック モードでは、MediaTimeline がメディアの再生を駆動します。 クロック モードには、次の特性があります。
メディアの Uri は、MediaTimelineによって間接的に設定されます。
メディア再生はクロックで制御できます。 メディア オブジェクトの制御メソッドは使用できません。
メディアは、MediaTimeline オブジェクトの Source プロパティを設定し、タイムラインからクロックを作成し、そのクロックをメディア オブジェクトに割り当てることによって読み込まれます。 メディアは、Storyboard 内の MediaTimeline が MediaElementを対象とする場合にも、この方法で読み込まれます。
クロック モードでメディアの再生を制御するには、ClockController 制御メソッドを使用する必要があります。 ClockController は、MediaClockの ClockController プロパティから取得されます。 クロックモード中にMediaElementまたはMediaPlayerオブジェクトの制御メソッドを使用しようとすると、InvalidOperationExceptionが発生します。
クロックとタイムラインの詳細については、「アニメーションの概要」 を参照してください。
クロック モードの例については、「ストーリーボード を使用して MediaElement を制御する」を参照してください。
MediaElement クラス
アプリケーションへのメディアの追加は、アプリケーションのユーザー インターフェイス (UI) に MediaElement コントロールを追加し、含めるメディアに Uri を提供するのと同じくらい簡単です。 Microsoft Windows Media Player 10 でサポートされているすべてのメディアの種類は、Windows Presentation Foundation (WPF) でサポートされています。 次の例は、拡張アプリケーション マークアップ言語 (XAML) での MediaElement の簡単な使用方法を示しています。
<!-- This page shows a simple usage of MediaElement -->
<Page x:Class="MediaElementExample.SimpleUsage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="SimpleUsage"
>
<StackPanel Margin="20">
<MediaElement Source="media/numbers-aud.wmv" />
</StackPanel>
</Page>
このサンプルでは、メディアは読み込まれるとすぐに自動的に再生されます。 メディアの再生が完了すると、メディアは閉じられ、すべてのメディア リソースが解放されます (ビデオ メモリを含む)。 これは、MediaElement オブジェクトの既定の動作であり、LoadedBehavior および UnloadedBehavior プロパティによって制御されます。
MediaElement の制御
LoadedBehavior プロパティと UnloadedBehavior プロパティは、IsLoaded が true
または false
されたときの MediaElement の動作をそれぞれ制御します。 メディア再生の動作に影響を与えるようにMediaStateのプロパティが設定されています。 たとえば、既定の LoadedBehavior は Play で、既定の UnloadedBehavior は Closeです。 つまり、MediaElement が読み込まれ、プリロールが完了すると、メディアの再生が開始されます。 再生が完了すると、メディアは閉じられ、すべてのメディア リソースが解放されます。
メディアの再生を制御する唯一の方法は、LoadedBehavior プロパティと UnloadedBehavior プロパティではありません。 クロック モードでは、クロックは MediaElement を制御でき、対話型制御メソッドは、LoadedBehavior が Manualされたときに制御できます。 MediaElement は、次の優先順位を評価することで、この競合を制御するために処理します。
UnloadedBehavior. メディアがアンロードされるときに配置されます。 これにより、MediaClock が MediaElementに関連付けられている場合でも、すべてのメディア リソースが既定で解放されます。
MediaClock. メディアに Clockがある場合に配置されます。 メディアがアンロードされると、UnloadedBehavior が Manualされている限り、MediaClock が有効になります。 クロック モードは常に、MediaElementの読み込まれた動作をオーバーライドします。
LoadedBehavior. メディアが読み込まれる際に配置されます。
対話型の制御メソッド。 LoadedBehavior が Manualされている場合にインプレース. 使用できる制御メソッドは、Play、Pause、Close、および Stopです。
MediaElement の表示
MediaElement を表示するには、レンダリングするコンテンツが必要であり、コンテンツが読み込まれるまで、ActualWidth プロパティと ActualHeight プロパティが 0 に設定されます。 オーディオのみのコンテンツの場合、これらのプロパティは常に 0 です。 ビデオコンテンツの場合、MediaOpened イベントが発生すると、ActualWidth と ActualHeight が読み込まれたメディアのサイズを報告します。 つまり、メディアが読み込まれるまで、Width または Height プロパティが設定されていない限り、MediaElement はユーザー インターフェイス (UI) の物理領域を占有しません。
Width プロパティと Height プロパティの両方を設定すると、メディアが拡大されて MediaElementに指定された領域全体に合わせられます。 メディアの元の縦横比を維持するには、Width または Height プロパティを設定する必要がありますが、両方を設定する必要はありません。 Width プロパティと Height プロパティの両方を設定すると、メディアが固定の要素サイズで表示され、望ましくない可能性があります。
固定サイズの要素を使用しないようにするために、Windows Presentation Foundation (WPF) はメディアを事前登録できます。 これを行うには、LoadedBehavior を Play または Pauseに設定します。 Pause 状態では、メディアはプリロールされ、最初のフレームが表示されます。 Play 状態では、メディアがプリロールされ、再生が開始されます。
MediaPlayer クラス
MediaElement クラスがフレームワーク要素である場合、MediaPlayer クラスは Drawing オブジェクトで使用されるように設計されています。 描画オブジェクトは、パフォーマンス上の利点を得るためにフレームワーク レベルの機能を犠牲にできる場合や、Freezable 機能が必要な場合に使用されます。 MediaPlayer を使用すると、アプリケーションでメディア コンテンツを提供しながら、これらの機能を利用できます。 MediaElementと同様に、MediaPlayer は独立モードまたはクロック モードで使用できますが、MediaElement オブジェクトのアンロードおよび読み込み状態はありません。 これにより、MediaPlayerの再生コントロールの複雑さが軽減されます。
MediaPlayer の制御
MediaPlayer はステートレスであるため、メディアの再生を制御する方法は 2 つだけです。
対話型の制御メソッド。 独立モード (
null
Clock プロパティ) の場合はインプレース。MediaClock. メディアに Clockがある場合に配置されます。
MediaPlayer の表示
技術的には、物理的な表現がないため、MediaPlayer を表示できません。 ただし、VideoDrawing クラスを使用して、Drawing でメディアを表示するために使用できます。 次の例では、VideoDrawing を使用してメディアを表示する方法を示します。
//
// Create a VideoDrawing.
//
MediaPlayer player = new MediaPlayer();
player.Open(new Uri(@"sampleMedia\xbox.wmv", UriKind.Relative));
VideoDrawing aVideoDrawing = new VideoDrawing();
aVideoDrawing.Rect = new Rect(0, 0, 100, 100);
aVideoDrawing.Player = player;
// Play the video once.
player.Play();
Drawing オブジェクトの詳細については、「図面オブジェクトの概要」 を参照してください。
関連項目
.NET Desktop feedback