Share via


マルチメディアの概要

Windows Presentation Foundation (WPF) のマルチメディア機能を使用すると、オーディオおよびビデオをアプリケーションに統合し、ユーザー エクスペリエンスを向上させることができます。ここでは、WPF のマルチメディア機能について説明します。

このトピックは、次のセクションで構成されています。

  • メディア API
  • メディアの再生モード
  • MediaElement クラス
  • MediaPlayer クラス
  • 関連トピック

メディア API

MediaElement クラスと MediaPlayer クラスは、オーディオ コンテンツまたはビデオ コンテンツの表示に使用されます。 これらのクラスは対話型またはクロックでの制御に対応しています。 これらのクラスは、Microsoft Windows Media Player 10 コントロールでメディアを再生するために使用できます。シナリオに応じてクラスを使い分けてください。

MediaElement は、レイアウト システムによってサポートされる UIElement で、多数のコントロールのコンテンツとして使用できます。 また、Extensible Application Markup Language (XAML) およびコードで使用できます。一方、MediaPlayer は、Drawing オブジェクト向けに設計されており、レイアウト サポートはありません。 MediaPlayer を使用して読み込まれたメディアは、VideoDrawing を使用するか、DrawingContext と直接対話することによってのみ再生できます。 MediaPlayer は、XAML では使用できません。

描画オブジェクトおよび描画コンテキストの詳細については、「Drawing オブジェクトの概要」を参照してください。

メモメモ

アプリケーションでメディアを配布する場合、メディア ファイルをプロジェクト リソースとして使用することはできません。代わりにプロジェクト ファイルでメディアの種類を 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 メソッドを呼び出すことのいずれかによって読み込まれます。

独立モードでメディアの再生を制御するために、メディア オブジェクトのコントロール メソッドを使用することはできません。 使用可能なコントロール メソッドは、PlayPauseCloseStop です。 MediaElement では、これらのメソッドを使用して対話的に制御できるのは、LoadedBehaviorManual に設定されている場合です。 メディア オブジェクトがクロック モードの場合、これらのメソッドは使用できません。

独立モードの使用例については、「方法 : MediaElement (再生、一時停止、停止、ボリューム、および速度) を制御する」を参照してください。

クロック モード

クロック モードでは、MediaTimeline によって、メディアの再生が実行されます。 クロック モードには次の特徴があります。

  • メディアの Uri は、MediaTimeline を通じて間接的に設定されます。

  • メディアの再生をクロックで制御できます。 メディア オブジェクトのコントロール メソッドは使用できません。

  • メディアは、MediaTimeline オブジェクトの Source プロパティを設定すること、タイムラインからクロックを作成すること、およびメディア オブジェクトにクロックを割り当てることによって読み込まれます。 Storyboard 内の MediaTimelineMediaElement をターゲットとする場合にも、メディアはこの方法によって読み込まれます。

クロック モードでメディアの再生を制御するには、ClockController コントロール メソッドを使用する必要があります。 ClockController は、MediaClockClockController プロパティから取得します。 クロック モードで MediaElement オブジェクトまたは MediaPlayer オブジェクトのいずれかのコントロール メソッドを使用しようとすると、InvalidOperationException がスローされます。

クロックとタイムラインの詳細については、「アニメーションの概要」を参照してください。

クロック モードの使用例については、「方法 : ストーリーボードを使用して MediaElement を制御する」を参照してください。

MediaElement クラス

アプリケーションへのメディアの追加は、アプリケーションのuser interface (UI) に MediaElement コントロールを追加し、含めるメディアに Uri を提供するというように簡単に行うことができます。 Windows Presentation Foundation (WPF) では、Microsoft Windows Media Player 10 でサポートされているすべての種類のメディアがサポートされています。Extensible Application Markup Language (XAML) で、MediaElement を簡単に使用する例を次に示します。

<!-- This page shows a simple usage of MediaElement -->
<Page x:Class="MediaElementExample.SimpleUsage"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    Title="SimpleUsage"
    >
  <StackPanel Margin="20">
    <MediaElement Source="media/numbers-aud.wmv" />
  </StackPanel>
</Page>

このサンプルでは、メディアは、読み込まれるとすぐに自動的に再生されます。 再生が終わると、メディアは閉じられ、すべてのメディア リソース (ビデオ メモリを含む) は解放されます。 これは、MediaElement オブジェクトの既定の動作で、LoadedBehavior プロパティと UnloadedBehavior プロパティによって制御されます。

MediaElement の制御

IsLoaded が true または false のとき、それぞれ、LoadedBehavior プロパティと UnloadedBehavior プロパティは、MediaElement の動作を制御します。 プロパティで設定される MediaState は、メディアの再生動作に影響します。 たとえば、既定の LoadedBehaviorPlay で、既定の UnloadedBehaviorClose です。 したがって、MediaElement が読み込まれ、プリロールが完了するとすぐにメディアは再生を始めます。 再生が終わるとメディアは閉じられ、すべてのメディア リソースは解放されます。

LoadedBehavior プロパティと UnloadedBehavior プロパティ以外にも、メディアの再生を制御する方法があります。 クロック モードでは、クロックによって MediaElement を制御できるほか、LoadedBehaviorManual の場合は、コントロール メソッドで対話的に制御できます。 MediaElement は、制御に対するこのような競合を、次の優先順位によって解決します。

  1. UnloadedBehavior. メディアがアンロードされた場合。 すべてのメディア リソースが、既定で解放されます。MediaClockMediaElement に関連付けられているときでも同様です。

  2. MediaClock. メディアに Clock が含まれている場合に有効になります。 メディアがアンロードされた場合、UnloadedBehaviorManual である限り、MediaClock が有効になります。 クロック モードは、MediaElement が読み込まれたときの動作を常にオーバーライドします。

  3. LoadedBehavior. メディアが読み込まれた場合。

  4. 対話型コントロール メソッド。 LoadedBehaviorManual の場合。 使用可能なコントロール メソッドは、PlayPauseCloseStop です。

MediaElement の表示

MediaElement を表示するには、描画されるコンテンツが必要で、コンテンツが読み込まれるまでは、その ActualWidth プロパティと ActualHeight プロパティは 0 に設定されます。 オーディオのみのコンテンツでは、これらのプロパティは常に 0 です。 ビデオ コンテンツでは、MediaOpened イベントが発生すると、ActualWidthActualHeight は読み込まれたメディアのサイズを報告します。 したがって、メディアが読み込まれるまでは、Width プロパティまたは Height プロパティが設定されていない限り、MediaElement は user interface (UI) 内の物理的なスペースを占めません。

Width プロパティと Height プロパティの両方を設定すると、メディアは、MediaElement に提供された領域に合うように引き伸ばされます。 メディアの元の縦横比を維持するには、Width プロパティまたは Height プロパティのいずれか一方のみを設定する必要があります。 Width プロパティと Height プロパティの両方を設定すると、メディアが要素の固定サイズに含まれ、望ましくない場合もあります。

固定サイズの要素を含まないようにするため、Windows Presentation Foundation (WPF) では、メディアをプリロールすることができます。 これを行うには、LoadedBehaviorPlay または Pause のいずれかに設定します。 Pause 状態では、メディアはプリロールされ、最初のフレームが表示されます。 Play 状態では、メディアはプリロールされ、再生が始まります。

MediaPlayer クラス

MediaElement クラスはフレームワーク要素ですが、MediaPlayer クラスは Drawing オブジェクトで使用するために設計されています。 Drawing オブジェクトは、パフォーマンス上の利点を得るためにフレームワーク レベルの機能を犠牲にしてもかまわない場合や、Freezable 機能が必要な場合に使用されます。 MediaPlayer を使用すると、メディア コンテンツをアプリケーションに提供すると共に、これらの機能を利用できます。 MediaElement と同様に、MediaPlayer は、独立モードまたはクロック モードで使用できますが、MediaElement オブジェクトのアンロードされた状態および読み込まれた状態はありません。 これにより、MediaPlayer の再生制御の複雑さが軽減されています。

MediaPlayer の制御

MediaPlayer はステートレスであるため、メディアの再生を制御するには 2 つの方法しかありません。

  1. 対話型コントロール メソッド。 独立モード (null Clock プロパティ) の場合。

  2. 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 オブジェクトの詳細については、「Drawing オブジェクトの概要」を参照してください。

参照

参照

DrawingGroup

概念

レイアウト システム

その他の技術情報

オーディオとビデオに関する「方法」トピック