zoukankan      html  css  js  c++  java
  • Win10系列:VC++媒体播放

    媒体播放包括视频播放和音频播放,在开发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载入视频文件

  • 相关阅读:
    微信公众平台开发者中心安全模式消息体加解密实现
    AES对称加密算法原理
    Token验证失败
    PaySignKey
    UVA 11732
    lua中的pairs和ipairs差别
    【shell学习笔记】curl命令总结
    视频监控系统:C/S &amp; B/S
    Android app开发中用户协议(使用条款)文字自己主动换行
    uva 10154
  • 原文地址:https://www.cnblogs.com/finehappy/p/6645525.html
Copyright © 2011-2022 走看看