多媒體概觀

Windows Presentation Foundation (WPF) 中的多媒體功能可讓您將音訊和視訊整合到您的應用程式中,以增強使用者體驗。 本主題介紹 WPF 的多媒體功能。

媒體 API

MediaElementMediaPlayer 類別可用來呈現音訊或視訊內容。 您可以透過互動式的方式或是時鐘來控制這些類別。 這些類別可以在 Microsoft Windows 媒體播放機 10 控制項上使用來進行媒體播放。 使用的類別需視案例而定。

MediaElementUIElement是版 面配置所支援的 ,可做為許多控制項的內容來取用。 它也可在可延伸的應用程式標記語言 (XAML) 以及程式碼中使用。 MediaPlayer另一方面,是針對 Drawing 物件所設計,而且缺少版面配置支援。 使用 MediaPlayer 載入的媒體只能透過 直接 VideoDrawingDrawingContext 互動來呈現。 MediaPlayer 無法在 XAML 中使用。

如需繪圖物件和繪圖內容的詳細資訊,請參閱繪圖物件概觀

注意

在隨著您的應用程式散發媒體時,您無法使用媒體檔案做為專案資源。 在您的專案檔中,您必須改為將媒體類型設定為 Content,並將 CopyToOutputDirectory 設定為 PreserveNewestAlways

媒體播放模式

注意

MediaElement和 都有 MediaPlayer 類似的成員。 本節中的連結會參考 MediaElement 類別成員。 除非特別指出,否則您也可以在 類別中找到 MediaPlayer 連結至 類別的成員 MediaElement

若要瞭解 Windows Presentation Foundation 中的媒體播放(WPF),瞭解需要播放媒體的不同模式。 MediaElementMediaPlayer 都可用於兩種不同的媒體模式、獨立模式和時鐘模式。 媒體模式是由 Clock 屬性所決定。 當 為 nullClock ,媒體物件會處於獨立模式。 Clock當 為非 Null 時,媒體物件會處於時鐘模式。 根據預設,媒體物件是處於獨立模式。

獨立模式

在獨立模式中,媒體內容會驅動媒體播放。 獨立模式提供下列選項:

  • 您可以直接指定媒體的 Uri

  • 可以直接控制媒體播放。

  • 您可以修改媒體和 PositionSpeedRatio 屬性。

媒體會藉由設定 MediaElement 物件的 Source 屬性或呼叫 MediaPlayer 物件的 Open 方法載入。

若要在獨立模式中控制媒體播放,可以使用媒體物件的控制方法。 可用的控制項方法包括 PlayPauseCloseStop 。 針對 MediaElement ,只有在 設定為 ManualLoadedBehavior ,才能使用這些方法的互動式控制項。 當媒體物件處於時鐘模式時,無法使用這些方法。

如需獨立模式的範例,請參閱控制 MediaElement (播放、暫停、停止、音量和速度)

時鐘模式

在時鐘模式中,磁片 MediaTimeline 磁碟機媒體播放。 時鐘模式具有下列特性:

  • 媒體的 Uri 會透過 MediaTimeline 間接設定。

  • 可由時鐘來控制媒體播放。 無法使用媒體物件的控制方法。

  • 藉由設定 MediaTimeline 物件的 Source 屬性、從時間軸建立時鐘,以及將時鐘指派給媒體物件,以載入媒體。 當 MediaTimeline 目標 MediaElement 內的 Storyboard 時,也會以這種方式載入媒體。

若要在時鐘模式中控制媒體播放, ClockController 必須使用控制項方法。 ClockControllerClockControllerMediaClock 屬性取得 。 如果您在時鐘模式中嘗試使用 或 MediaPlayer 物件的控制項方法 MediaElementInvalidOperationException 則會擲回 。

如需時鐘和時間軸的詳細資訊,請參閱動畫概觀

如需時鐘模式的範例,請參閱使用分鏡腳本控制 MediaElement

MediaElement 類別

將媒體新增至應用程式就像將控制項新增 MediaElement 至應用程式的使用者介面 (UI) 一樣簡單,並提供 Uri 您想要包含的媒體。 Windows Presentation Foundation (WPF) 支援 Microsoft Windows 媒體播放機 10 支援的所有媒體類型。 下列範例顯示可延伸應用程式標記語言 (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 ,由 LoadedBehaviorUnloadedBehavior 屬性控制。

控制 MediaElement

和 屬性分別控制 當 為 truefalse 時的行為 IsLoadedMediaElementUnloadedBehaviorLoadedBehavior 屬性 MediaState 會設定為會影響媒體播放行為。 例如,預設值 LoadedBehaviorPlay ,而預設值 UnloadedBehaviorClose 。 這表示,一旦 MediaElement 載入 且預製完成,媒體就會開始播放。 一旦播放完成,系統就會關閉媒體並釋放所有媒體資源。

LoadedBehaviorUnloadedBehavior 屬性並不是控制媒體播放的唯一方式。 在時鐘模式中,時鐘可以控制 MediaElement ,而互動式控制項方法在 是 ManualLoadedBehavior 具有 控制權。 MediaElement 藉由評估下列優先順序來處理此競爭以控制。

  1. UnloadedBehavior. 當媒體卸載時取得控制權。 這可確保預設會釋放所有媒體資源,即使 與 相關聯也 MediaElement 一起 MediaClock

  2. MediaClock. 當媒體具有 時就 Clock 地。 如果卸載媒體,只要 是 Manual ,就會 MediaClock 生效 UnloadedBehavior 。 時鐘模式一律會覆寫 的 MediaElement 載入行為。

  3. LoadedBehavior. 當媒體載入時取得控制權。

  4. 互動式控制方法。 當 為 ManualLoadedBehavior 就位。 可用的控制項方法包括 PlayPauseCloseStop

顯示 MediaElement

若要顯示 MediaElement 它必須有要轉譯的內容,而且其 和 ActualHeight 屬性會 ActualWidth 設定為零,直到載入內容為止。 對於僅含音訊的內容,這些屬性一率為零。 針對視訊內容,一旦引發 ActualWidth 事件, MediaOpened 並將 ActualHeight 報告載入的媒體大小。 這表示在載入媒體之前,除非已設定 或 Height 屬性, MediaElement 否則 Width 不會佔用使用者介面 (UI) 中的任何實體空間。

Width設定 和 Height 屬性會導致媒體延展以填滿 提供給 MediaElement 的區域。 若要保留媒體的原始外觀比例, Width 應設定 或 Height 屬性,但不能同時設定兩者。 Width設定 和 Height 屬性會導致媒體以可能不想要的固定專案大小呈現。

為了避免有固定的大小元素,Windows Presentation Foundation (WPF) 可以預先捲動媒體。 這是藉由將 設定 LoadedBehaviorPlayPause 來完成。 Pause在狀態中,媒體會預先標籤,並呈現第一個畫面。 在狀態 Play 中,媒體將預先註冊並開始播放。

MediaPlayer 類別

當 類別是架構元素時 MediaElement ,類別 MediaPlayer 的設計目的是要用於 Drawing 物件中。 當您可以犧牲架構層級功能來獲得效能優勢或需要 Freezable 功能時,就會使用繪圖物件。 MediaPlayer 可讓您利用這些功能,同時在應用程式中提供媒體內容。 如同 MediaElementMediaPlayer 可用於獨立模式或時鐘模式,但沒有 MediaElement 物件的卸載和載入狀態。 這樣可減少 的 MediaPlayer 播放控制項複雜度。

控制 MediaPlayer

因為 MediaPlayer 是無狀態的,因此只有兩種方式可以控制媒體播放。

  1. 互動式控制方法。 就地處于獨立模式 ( nullClock 屬性) 時。

  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 觀 。

另請參閱