共用方式為


多媒體概觀

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

這個主題包含下列章節。

  • 媒體 API
  • 媒體播放模式
  • MediaElement 類別
  • MediaPlayer 類別
  • 相關主題

媒體 API

MediaElementMediaPlayer 類別都用於呈現音訊或視訊內容。 這兩個類別都以互動方式或以時脈控制。 這些類別可用在 Microsoft Windows Media Player 10 的媒體播放控制項。應採用哪個類別,依據案例而定。

MediaElement 是由 配置系統 支援的 UIElement,可取用為許多控制項的內容。 這個項目也可用於Extensible Application Markup Language (XAML) 和程式碼。另一方面,MediaPlayer 則是針對 Drawing 物件所設計,因此缺少配置支援。 使用 MediaPlayer 載入的媒體只能使用 VideoDrawing 呈現,或經由直接與 DrawingContext 互動來呈現。 MediaPlayer 無法用於 XAML 中。

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

注意事項注意事項

使用您的應用程式散發媒體時,您不能將媒體檔案當做專案資源來使用。在專案檔中,您必須改為將媒體類型設為 Content,並將 CopyToOutputDirectory 設為 PreserveNewest 或 Always。

媒體播放模式

注意事項注意事項

MediaElementMediaPlayer 兩者具有類似的成員。本節中的連結會參考 MediaElement 類別成員。除非特別註明,否則也可在 MediaPlayer 類別中找到連結至 MediaElement 類別的成員。

若要了解 Windows Presentation Foundation (WPF) 中的媒體播放,一定要了解可用以播放媒體的不同模式。 MediaElementMediaPlayer 都可用於兩種不同的媒體模式:獨立模式和時脈模式。 媒體模式是由 Clock 屬性所決定。 當 Clock 為 null 時,媒體物件為獨立模式。 當 Clock 不是 null 時,媒體物件則為時脈模式。 媒體物件預設為獨立模式。

獨立模式

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

  • 可以直接指定媒體的 Uri

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

  • 可以修改媒體的 PositionSpeedRatio 屬性。

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

若要在獨立模式中控制媒體播放,可以使用媒體物件的控制方法。 可用的控制方法為 PlayPauseCloseStop。 若為 MediaElement,當 LoadedBehavior 設為 Manual 時,才能使用採用這些方法的互動式控制。 當媒體物件為時脈模式時,則無法使用這些方法。

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

時脈模式

在時脈模式中,MediaTimeline 會驅動媒體播放。 時脈模式具有下列特性:

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

  • 時脈可以控制媒體播放。 但無法使用媒體物件的控制方法。

  • 設定 MediaTimeline 物件的 Source 屬性、從時刻表建立時脈,並指定時脈給媒體物件,便會載入媒體。 當 Storyboard 內的 MediaTimeline 將目標設定為 MediaElement 時,也可用此方式載入媒體。

若要在時脈模式中控制媒體播放,必須使用 ClockController 控制方法。 ClockController 是從 MediaClockClockController 屬性取得。 如果您在時脈模式中嘗試使用 MediaElementMediaPlayer 物件的控制方法,將會擲回 InvalidOperationException

如需時脈和時刻表的詳細資訊,請參閱動畫概觀

如需時脈模式的範例,請參閱 HOW TO:使用腳本控制 MediaElement

MediaElement 類別

將媒體加入至應用程式,就如同將 MediaElement 控制項加入至應用程式的user interface (UI) 及提供 Uri 給您要包含的媒體一樣簡單。 Windows Presentation Foundation (WPF) 可支援 Microsoft Windows Media Player 10 支援的所有媒體類型。下列範例顯示 MediaElement 在Extensible Application Markup Language (XAML) 中的簡單用法。

<!-- 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 物件的預設行為,而且由 LoadedBehaviorUnloadedBehavior 屬性所控制。

控制 MediaElement

IsLoaded 分別為 true 或 false 時,LoadedBehaviorUnloadedBehavior 屬性會控制 MediaElement 的行為。 設定 MediaState 屬性會影響媒體播放行為。 例如,預設 LoadedBehaviorPlay,而預設 UnloadedBehaviorClose。 這表示載入 MediaElement 和完成預轉後,就會立即開始播放媒體。 一旦播放完成,就會關閉媒體並釋放所有媒體資訊。

LoadedBehaviorUnloadedBehavior 屬性並非控制媒體播放的唯一方法。 在時脈模式中,時脈可以控制 MediaElement,而當 LoadedBehaviorManual 時,互動式控制方法具有控制權。 MediaElement 會評估下列優先順序,以處理這種控制權競爭。

  1. UnloadedBehavior. 適用於未載入媒體時。 這可確保會依預設釋放所有的媒體資源,即使 MediaClock 已與 MediaElement 相關聯時也是如此。

  2. MediaClock. 適用於媒體具有 Clock 時。 如果未載入媒體,只要 UnloadedBehaviorManualMediaClock 就會生效。 時脈模式一律會覆寫 MediaElement 的載入行為。

  3. LoadedBehavior. 適用於已載入媒體時。

  4. 互動式控制方法。 適用於 LoadedBehaviorManual 時。 可用的控制方法為 PlayPauseCloseStop

顯示 MediaElement

若要顯示 MediaElement,它必須有要呈現的內容,而且在載入內容以前,其 ActualWidthActualHeight 屬性會設為零。 對於僅包含音訊的內容,這些屬性永遠為零。 對於視訊內容,一旦引發 MediaOpened 事件,ActualWidthActualHeight 就會回報所載入媒體的大小。 這表示在載入媒體前,除非已設定 WidthHeight 屬性,否則 MediaElement 不會在user interface (UI) 中佔用任何實體空間。

同時設定 WidthHeight 屬性會導致媒體延伸填滿為 MediaElement 所提供的區域。 若要保留媒體的原始外觀比例,應設定 WidthHeight 屬性 (但不要同時設定)。 同時設定 WidthHeight 屬性將導致媒體以固定的項目大小呈現,而這可能不是您需要的大小。

若要避免大小固定的項目,Windows Presentation Foundation (WPF) 可以預轉媒體。 將 LoadedBehavior 設定為 PlayPause,就可以達成這項作業。 在 Pause 狀態中,媒體將會預轉並呈現第一個畫面格。 在 Play 狀態中,媒體將會預轉並開始播放。

MediaPlayer 類別

雖然 MediaElement 類別是架構項目,但 MediaPlayer 類別會設計成用於 Drawing 物件中。 繪製物件是在您可以犧牲架構層級功能以取得效能優點,或當您需要 Freezable 功能時使用。 MediaPlayer 可讓您利用這些功能,同時在您的應用程式中提供媒體內容。 像 MediaElement 一樣,MediaPlayer 可用於獨立或時脈模式中,但是沒有 MediaElement 物件的未載入和已載入狀態。 這可降低 MediaPlayer 的播放控制複雜度。

控制 MediaPlayer

因為 MediaPlayer 沒有狀態 (Stateless),所以只有兩種方法可以控制媒體播放。

  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 物件的詳細資訊,請參閱繪圖物件概觀

請參閱

參考

DrawingGroup

概念

配置系統

其他資源

音訊和視訊 HOW TO 主題