Win10系列:VC++媒體播放

來源:互聯網
上載者:User

標籤:ssm   分享   ace   library   指令   顯示   form   定義   end   

媒體播放包括視頻播放和音頻播放,在開發Windows市集應用的過程中可以使用MediaElement控制項來播放視頻檔案和音頻檔案。本節將通過一個具體的樣本介紹如何使用MediaElement控制項來播放視頻檔案,以及如何控制MediaElement控制項中視頻的播放。

20.6.1 視頻載入

首先來看如何讀取一個視頻檔案並載入到MediaElement控制項中,在Visual Staudio 2012中建立一個Visual C++的Windows市集的空白應用程式項目,並命名為FileDemo。接下來開啟MainPage.xaml檔案,並在Grid元素中添加如下的代碼用於布局前台介面。

<StackPanel>

<Button x:Name="FileButton" Content="開啟檔案" FontSize="20" Margin="114,30,0,0" Click="FileButtonClick" Width="113" Height="53"></Button>

<MediaElement x:Name="Video" HorizontalAlignment="Left" Height="400" Margin="114,10,0,0" VerticalAlignment="Top" Width="780" AutoPlay="False"/>

</StackPanel>

在上面的代碼中,添加一個MediaElement控制項和一個"開啟檔案"按鈕。將MediaElement控制項命名為Video,使用此控制項播放載入的視頻檔案。"開啟檔案"按鈕用於通過檔案開啟選取器來選取視頻檔案。

布局了前台介面以後,接著開啟MainPage.xaml.cpp源檔案,並引用如下的標頭檔和命名空間:

#include "ppltasks.h"

using namespace Windows::Storage;

using namespace Windows::Storage::Streams;

using namespace Windows::Storage::Pickers;

using namespace Concurrency;

using namespace Windows::System;

在上面的代碼中,使用include關鍵字引用一個ppltasks.h標頭檔,然後使用using指令引用命名空間Windows::Storage、Windows::Storage::Streams、Windows::Storage::Pickers、Concurrency和Windows::System,在後面讀取視頻檔案的過程中,將會用到定義在這些標頭檔和命名空間內的類。

引用了上述的標頭檔和命名空間以後,接下來為"開啟檔案"按鈕添加單擊事件處理函數FileButtonClick。開啟MainPage.xaml.h標頭檔,並添加如下的代碼,用於聲明FileButtonClick函數和成員變數localFile。

private:

????//載入視頻檔案

????void FileButtonClick(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);

private:

????//聲明成員變數localFile

????Windows::Storage::StorageFile^ localFile;

聲明了FileButtonClick函數以後,在MainPage.xaml.cpp源檔案中添加FileButtonClick函數的實現代碼,具體代碼如下所示:

//載入視頻檔案

void FileDemo::MainPage::FileButtonClick(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)

{

????//建立檔案選取器

????FileOpenPicker^ openPicker =ref new FileOpenPicker();

????//設定視圖為縮圖

????openPicker->ViewMode = PickerViewMode::Thumbnail;

????//設定訪問的初始位置為視頻庫

????openPicker->SuggestedStartLocation = PickerLocationId::VideosLibrary;

????//設定可選取的檔案類型,允許播放的檔案類型

????openPicker->FileTypeFilter->Append(".mp4");

????openPicker->FileTypeFilter->Append(".avi");

????//顯示檔案選取器,選擇檔案

????create_task(openPicker->PickSingleFileAsync()).then([this](StorageFile^ file)

????{

????????//判斷是否已選擇檔案

????????if (file)

????????{

????????????localFile = file;

????????????//將檔案寫入到IRandomAccessStream流中

????task<IRandomAccessStream^>(file->OpenAsync(FileAccessMode::Read)).then(

????????????????[this](IRandomAccessStream^ stream)

????????????{

????????????????if (stream)

????????????????{

????????????????????//讀取視頻檔案到 MediaElement控制項

????????????????????Video->SetSource(stream, localFile->ContentType);

????????????????}

????????????});

????????}

????});

}

在FileButtonClick函數中,首先建立一個FileOpenPicker類的對象openPicker,並將PickerViewMode枚舉中的枚舉成員Thumbnail賦值給openPicker對象的ViewMode屬性,設定檔案開啟選取器的視圖模式為縮圖模式。接著將PickerLocationId枚舉中的枚舉成員VideosLibrary賦值給openPicker對象的SuggestedStartLocation屬性,設定檔案開啟選取器的初始位置為視頻庫。然後使用openPicker對象的FileTypeFilter屬性得到檔案開啟選取器顯示的檔案類型集合,並調用Append函數將檔案類型".mp4"和".avi"添加到這個集合中。

接下來調用openPicker對象的PickSingleFileAsync函數選取單個檔案,並得到一個StorageFile類型的對象file。然後調用file對象的OpenAsync函數得到一個IRandomAccessStream類型的對象stream。當stream對象不為空白時,調用MediaElement控制項的SetSource函數將視頻檔案載入到此控制項中。

運行項目,單擊"開啟檔案"按鈕,並在檔案開啟選取器介面中選擇一個視頻檔案,前台介面的顯示效果20-8所示。

圖20-8載入視頻檔案

Win10系列:VC++媒體播放

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.