媒体播放包括视频播放和音频播放,在开发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++媒体播放的更多相关文章

  1. Win10系列:VC++媒体播放控制4

    (7)音量控制 MediaElement控件具有一个Volume属性,通过设置此属性的值可以改变视频音量的大小.接下来介绍如何实现视频的音量控制,首先打开MainPage.xaml文件,并在Grid元 ...

  2. Win10系列:VC++媒体播放控制3

    (5)添加视频进度条 视频进度条可以用来显示当前视频的播放进度,并可以通过拖动视频进度条来改变视频的播放进度.接下来介绍如何实现视频进度条,首先打开MainPage.xaml文件,并在Grid元素中添 ...

  3. Win10系列:VC++媒体播放控制1

    在MediaElement控件中定义了用于控制视频播放的函数,如Play.Pause和Stop等函数.本小节将在20.6.1小节所新建的项目基础上继续来介绍如何为视频添加播放控制,并在最后一部分给出项 ...

  4. Win10系列:VC++媒体播放控制2

    (3)停止视频播放 接下来添加对视频文件播放的停止控制,打开MainPage.xaml文件,并在Grid元素中添加一个"停止"按钮,用于停止视频的播放,代码如下所示: <Bu ...

  5. Movist for Mac(高清媒体播放器)v2.0.7中文特别版

    Movist for Mac中文破解版是目前Mac平台上最好用的视频播放器,功能强大简单好用.movist mac版拥有美观简洁的用户界面,提供多种功能,支持视频解码加速高品质的字幕,全屏幕浏览,是与 ...

  6. JavaScript自定义媒体播放器

    使用<audio>和<video>元素的play()和pause()方法,可以手工控制媒体文件的播放.组合使用属性.事件和这两个方法,很容易创建一个自定义的媒体播放器,如下面的 ...

  7. iPhone系列设备媒体查询:

    这就引出一个问题,我们在对iPhone设备适配时候,又多出几种情况.iPhone系列设备媒体查询: @media only screen and (min-device-width: 320px){ ...

  8. (原创)jQuery Media Plugin-jQuery的网页媒体播放器插件的使用心得

    jQuery Media Plugin是一款基于jQuery的网页媒体播放器插件,它支持大部分的网络多媒体播放器和多媒体格式,比如:Flash, Windows Media Player, Real ...

  9. Plyr – 简单,灵活的 HTML5 媒体播放器

    Plyr 是一个简单的 HTML5 媒体播放器,包含自定义的控制选项和 WebVTT 字幕.它是只支持现代浏览器,轻量,方便和可定制的媒体播放器.还有的标题和屏幕阅读器的全面支持. 在线演示      ...

随机推荐

  1. 《剑指offer》第五十八题(翻转单词顺序)

    // 面试题58(一):翻转单词顺序 // 题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变. // 为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a ...

  2. 学习笔记42—Win7下安装Linux双系统

    1.下载Linux镜像:http://mirrors.163.com/ubuntu-releases/18.04.1/ 方法一: 1.用软通牒软件将Linux的镜像写入空的优盘中, 具体如下: 1) ...

  3. ssh REMOTE HOST IDENTIFICATION HAS CHANGED!

    连接到docker的时候,有时因为image重新buid过,就提示 It is also possible that a host key has just been changed. 不让连接. 解 ...

  4. AD中设置PCB线间距

    Design->Rules->Electrical->Clearance->Clearance

  5. mac软件

    1. http://www.ifunmac.com/ 2.Mac安装软件时提示已损坏的解决方法 http://www.jianshu.com/p/3d04a2292fcd 3.mac以后有时间在装的软 ...

  6. thinkphp5的Auth权限认证实战

    thinkphp5的Auth权限认证实战 一.总结 一句话总结:基于角色的权限管理(真正做一遍,就会发现很简单,不然一直都是半懂不懂的) 角色 权限 真正做一遍,就会发现很简单,不然一直都是半懂不懂的 ...

  7. 昂达 v891 v1 终于 删除 windows 分区 并且恢复了容量。

    参考了很多文章(最后列出重要的),却始终失败. 途中因为乱改分区表,竟然fastboot 都进不去了,当时真是欲哭无泪. 总结关键点: 1) partition.tbl不能把硬盘剩余空间全给data分 ...

  8. 雷林鹏分享:C# 数据类型

    C# 数据类型 在 C# 中,变量分为以下几种类型: 值类型(Value types) 引用类型(Reference types) 指针类型(Pointer types) 值类型(Value type ...

  9. javascript之封装(引用网络)

    一. 例:事件监听封装 jQuery 中的事件监听,完全可以用 addEventListener/attachEvent 模拟,分别对应于现代浏览器和 IE ,可以把两个方法封装一下,但是为了方便,这 ...

  10. Java基础加强总结(一)——注解(Annotation)

    一.认识注解 注解(Annotation)很重要,未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以上都是基于注解的,Hibernate3.x以后也是基于注解的,现在的Struts ...