Language: HTML | XAML

快速入門:視訊和音訊 (XAML)

使用 MediaElement 在使用 C++、C# 或 Visual Basic 的 Windows 執行階段應用程式中播放音訊和視訊媒體。

藍圖: 這個主題與其他主題的相關性?請參閱:

簡介

若要在使用 C++、C# 或 Visual Basic 的 Windows 執行階段應用程式中播放音訊和視訊媒體,請使用 MediaElement 類別。MediaElement 提供許多屬性和方法控制音訊和視訊播放。 我們將複習建立和使用 MediaElement 的基本概念。

Windows 8.1 為 MediaElement 引進了內建的傳輸控制項。 這些控制項可處理播放、停止、暫停、音量、靜音、搜尋/進度,以及音訊追蹤選擇。 若要啟用這些控制項,請將 AreTransportControlsEnabled 設定為 true。若要停用,請將 AreTransportControlsEnabled 設定為 false

Windows 8.1 引進 IsFullWindow 屬性,可啟用與停用完整視窗呈現。 這可確保當切換到完整視窗呈現時,啟用系統最佳化。 在 Windows 8.1 和更新版本中,您應該一律使用 IsFullWindow 屬性來啟用與停用完整視窗呈現。

在 Windows 8.1 以前的系統,開發人員要負責建立自訂 UI,以控制音訊和視訊播放。 例如,若要在應用程式中啟動媒體,您可以建立 Button,然後在 Button 事件處理常式中呼叫 Play。 儘管 Windows 8.1 已經引進內建傳輸控制項,在某些時候您仍然需要建立自訂 UI 以支援其他功能,或者使用自己的控制項取代內建控制項。 如需有關建立自訂傳輸控制項更深入的討論,請參閱如何建立自訂媒體傳輸控制項

MediaElement 基本概念

使用 XAML 建立 MediaElement 物件來新增媒體到您的應用程式,並將 Source 設定成指向音訊或視訊檔案的統一資源識別項 (URI)。

以下部分程式碼會建立 MediaElement 並將其 Source 屬性設定成指向視訊檔案的 URI。MediaElement 會在頁面載入之後開始播放。 如果想抑制媒體立即播放,您可以將 AutoPlay 屬性設定成 false


<MediaElement x:Name="mediaSimple" 
              Source="Videos/video1.mp4" 
              Width="400" AutoPlay="False"/>


以下部分程式碼會建立已啟用傳輸控制項的 MediaElement,並將 AutoPlay 屬性設定成 false.


<MediaElement x:Name="mediaPlayer" 
              Source="Videos/video1.mp4" 
              Width="400" 
              AutoPlay="False"
              AreTransportControlsEnabled="True" />


使用 MediaElement 屬性

MediaElement 物件提供許多媒體特定的屬性。以下是一些常用的屬性。 請參閱 MediaElement 參考頁面,以取得屬性、方法和事件的完整清單。

屬性說明
AutoPlay 指定 MediaElement 是否應該自動開始播放。預設值為 true
IsMuted 指定是否應該靜音。 預設值為 false
IsFullWindow

在 Windows 8.1 中引進。

可啟用或停用完整視窗呈現。 您應該一律使用 IsFullWindow 屬性來啟用和停用完整視窗呈現。這樣可以保證啟用系統最佳化。

AreTransportControlsEnabled

在 Windows 8.1 中引進。

可啟用或停用內建傳輸控制項。

Volume 指定音訊音量,值從 0 到 1,1 表示最大聲。
Balance 指定立體聲喇叭的音量比例,值從 -1 到 1。預設值為 0。
CurrentState 指定 MediaElement 的目前狀態。
IsAudioOnly 指定目前的媒體來源是否為僅限音訊。
IsLooping 指定當目前的媒體到達媒體尾端時是否從頭重新開始。
NaturalDuration 指定目前開啟的媒體檔案的持續時間。
Position 指定目前的播放位置。您可以移到媒體時間軸上的其他點,方法是將 Position 設定成時間軸上的特定點。
PosterSource 指定影像來源作為載入媒體時的預留位置影像。
Source 指定音訊或視訊檔案的來源 URI。
AudioStreamCount 指定目前媒體檔案中存在的音訊串流數目。
AudioStreamIndex 指定隨著視訊元件播放的音訊串流。
Stretch

在 Windows 8.1 中引進。

MediaElement.Stretch 屬性定義 MediaElement 填入所在容器的空間的方式。Stretch 狀態和許多電視器上的影像大小設定類似。您可以將勾點設定在按鈕上,並允許使用者依偏好選擇所要的設定。

  • None 會以原始大小顯示內容的原生解析度。
  • Uniform 會盡可能地填滿空間,同時維持影像內容的外觀比例。這會導致視訊邊緣出現水平或垂直的黑色長條。這和寬螢幕模式類似。
  • UniformToFill 會填滿個空間,同時維持外觀比例。這會導致部分影像被裁切。這和全螢幕模式類似。
  • Fill 會填滿整個空間,但不會維持外觀比例。 影像不會被裁切,但可能發生延展現象。這和延展模式類似。
伸展列舉值

 

控制媒體播放

Windows 8.1 引進了內建傳輸控制項以控制媒體播放。若要啟用內建傳輸控制項,請將 AreTransportControlsEnabled 設定成 true。這是控制 MediaElement 播放最簡單的方法。但如果您想要新增自己的 UI 來控制播放,此區段會示範如何手動連結到 MediaElement 上的播放方法。這可以用來新增內建控制項不提供的功能支援,或者以自己的自訂控制項取代內建控制項。

MediaElement 物件提供許多媒體特定的方法以控制媒體播放。以下是一些常用的方法。 請參閱 MediaElement參考頁面,取得完整清單。

方法說明
Play 從目前位置播放媒體。
Pause 在目前位置暫停媒體。
Stop 停止媒體然後將媒體 Position 重設為 0。
SetSource 使用提供的串流設定來源屬性。

 

MediaElement 物件提供許多媒體特定事件。以下是一些常見的事件。 請參閱 MediaElement參考頁面,取得完整清單。

方法說明
MediaOpened 當媒體串流已經驗證並開啟,以及已經讀取檔案標題時發生。
MediaEnded MediaElement 完成播放音訊或視訊時發生。
MediaFailed Source 媒體發生相關錯誤時發生
CurrentStateChange CurrentState 屬性的值變更時發生。

 

以下部分程式碼會建立 MediaElement 以及數個 Button 物件以控制媒體播放。MediaElement 會接聽 MediaOpenedMediaEndedMediaFailed 事件。它會建立 UI 以處理 PlayStopPause


<StackPanel HorizontalAlignment="Center">
    <MediaElement x:Name="media" 
                  Source="Videos/Video1.mp4" 
                  Width="300"
                  AreTransportControlsEnabled="False"
                  MediaFailed="Media_MediaFailed"
                  MediaOpened="Media_MediaOpened"
                  MediaEnded="Media_MediaEnded" />
    
    <StackPanel Orientation="Horizontal"
                HorizontalAlignment="Center">
        
        <Button Content="Play" Click="Play_Click"/>
        <Button Content="Pause" Click="Pause_Click"/>
        <Button Content="Stop" Click="Stop_Click" />
        
    </StackPanel>
</StackPanel>



void Play_Click(object sender, RoutedEventArgs e)
{
    media.Play();
}

void Pause_Click(object sender, RoutedEventArgs e)
{
    if (media.CanPause)
    {
        media.Pause();
    }
}

void Stop_Click(object sender, RoutedEventArgs e)
{
    media.Stop();
}

void Media_MediaFailed(object sender, ExceptionRoutedEventArgs e)
{
    // Handle failed media event
}

void Media_MediaOpened(object sender, RoutedEventArgs e)
{
    // Handle open media event
}

void Media_MediaEnded(object sender, RoutedEventArgs e)
{
    // Handle media ended event
}


注意  除了停止、暫停或播放媒體之外,您也可以設定 MediaElement 物件的 Position 屬性,尋找特定的位置。

設定媒體來源

您可以使用 Source 屬性或 SetSource 方法設定 MediaElement 的來源。

Source 屬性類型為 Uri。若要設定來源媒體檔案,請將 Source 設定成包含檔案路徑的 Uri

SetSource 方法可進行 IRandomAccessStream,它是媒體來源以及 MIME 類型的媒體。 對於本機檔案系統或 Microsoft OneDrive 上的檔案,FileOpenPicker 是取得其串流物件的簡便方法。如需使用 FileOpenPicker 控制項的詳細資訊,請參閱 如何使用 FileOpenPicker 控制項開啟媒體檔案

若要開啟位於網際網路上或內嵌在應用程式中的檔案,請將 Source 屬性設定成媒體檔案的 Uri。將設定來源的程式碼放置在 try/catch 區塊中是很好的做法。如需開啟網路上的媒體檔案的詳細資訊,請參閱如何播放網路上的媒體檔案

防止螢幕變成暗灰色

若要防止顯示器在未偵測到使用者動作時停用 (例如應用程式播放全螢幕視訊時),您可以呼叫 DisplayRequest.RequestActive

若要節省電力及電池使用時間,您應該在不再需要顯示要求時呼叫 DisplayRequest.RequestRelease 來釋放顯示要求,例如媒體已經暫停或停止、媒體已經結束,或應用程式已經暫停時。

如需詳細資訊,請參閱顯示器電源狀態範例如何在音訊/視訊播放期間保持顯示

「播放至」和媒體

您可以使用「播放至」,讓使用者將電腦中的音訊、視訊或影像輕易地串流到家用網路中的裝置。 如需在使用 C++、C# 或 Visual Basic 的 Windows 市集應用程式中啟用「播放至」功能的詳細資訊,請參閱 快速入門:在應用程式中使用「播放至」功能

支援的媒體格式

如需 Windows 市集應用程式支援的音訊與視訊媒體格式相關資訊,請參閱支援的音訊與視訊格式

相關主題

藍圖
使用 C# 和 Visual Basic 建立 Windows 執行階段應用程式的藍圖
使用 C++ 建立 Windows 執行階段應用程式的藍圖
設計應用程式的 UX
新增多媒體
範例
XAML 媒體播放範例
轉碼媒體範例
媒體擷取範例
顯示器電源狀態範例
媒體播放,從開始到完成
工作
如何建立自訂媒體傳輸控制項
如何使用 FileOpenPicker 控制項開啟媒體檔案
如何選取不同語言的音軌
如何開啟網路上的媒體檔案
如何使用系統媒體傳輸控制項
如何調整視訊大小和延展視訊
如何在背景播放音訊
參考
MediaElement
Play
PlaybackRate
IValueConverter
AudioStreamIndex
其他資源
支援的音訊與視訊格式
最佳化媒體資源

 

 

顯示:
© 2015 Microsoft