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载入视频文件
Win10系列:VC++媒体播放的更多相关文章
- Win10系列:VC++媒体播放控制4
(7)音量控制 MediaElement控件具有一个Volume属性,通过设置此属性的值可以改变视频音量的大小.接下来介绍如何实现视频的音量控制,首先打开MainPage.xaml文件,并在Grid元 ...
- Win10系列:VC++媒体播放控制3
(5)添加视频进度条 视频进度条可以用来显示当前视频的播放进度,并可以通过拖动视频进度条来改变视频的播放进度.接下来介绍如何实现视频进度条,首先打开MainPage.xaml文件,并在Grid元素中添 ...
- Win10系列:VC++媒体播放控制1
在MediaElement控件中定义了用于控制视频播放的函数,如Play.Pause和Stop等函数.本小节将在20.6.1小节所新建的项目基础上继续来介绍如何为视频添加播放控制,并在最后一部分给出项 ...
- Win10系列:VC++媒体播放控制2
(3)停止视频播放 接下来添加对视频文件播放的停止控制,打开MainPage.xaml文件,并在Grid元素中添加一个"停止"按钮,用于停止视频的播放,代码如下所示: <Bu ...
- Movist for Mac(高清媒体播放器)v2.0.7中文特别版
Movist for Mac中文破解版是目前Mac平台上最好用的视频播放器,功能强大简单好用.movist mac版拥有美观简洁的用户界面,提供多种功能,支持视频解码加速高品质的字幕,全屏幕浏览,是与 ...
- JavaScript自定义媒体播放器
使用<audio>和<video>元素的play()和pause()方法,可以手工控制媒体文件的播放.组合使用属性.事件和这两个方法,很容易创建一个自定义的媒体播放器,如下面的 ...
- iPhone系列设备媒体查询:
这就引出一个问题,我们在对iPhone设备适配时候,又多出几种情况.iPhone系列设备媒体查询: @media only screen and (min-device-width: 320px){ ...
- (原创)jQuery Media Plugin-jQuery的网页媒体播放器插件的使用心得
jQuery Media Plugin是一款基于jQuery的网页媒体播放器插件,它支持大部分的网络多媒体播放器和多媒体格式,比如:Flash, Windows Media Player, Real ...
- Plyr – 简单,灵活的 HTML5 媒体播放器
Plyr 是一个简单的 HTML5 媒体播放器,包含自定义的控制选项和 WebVTT 字幕.它是只支持现代浏览器,轻量,方便和可定制的媒体播放器.还有的标题和屏幕阅读器的全面支持. 在线演示 ...
随机推荐
- centos如何查看linux内核,版本号
[root@localhost ~]# uname -a Linux localhost.localdomain -.el7.x86_64 # SMP Thu Nov :: UTC x86_64 x8 ...
- JAVA中”单引号”,“双引号”,“没有单引号和双引号”区别:
单引号引的数据 是char类型的——>单引号只能引一个字符(表示单个字符)双引号引的数据 是String类型的——>而双引号可以引0个及其以上(引用字符串) char类型的值用单引号引起来 ...
- 雷林鹏分享:jQuery EasyUI 表单 - 表单验证
jQuery EasyUI 表单 - 表单验证 本教程将向您展示如何验证一个表单.easyui 框架提供一个 validatebox 插件来验证一个表单.在本教程中,我们将创建一个联系表单,并应用 v ...
- 20165327 2017-2018-2 《Java程序设计》第6周学习总结
20165327 2017-2018-2 <Java程序设计>第6周学习总结 教材内容总结 第八章 String类常用方法 public int length() public boole ...
- 使用VisualStudio进行脚本|样式文件压缩
在vs的Optimization中有个Bundle是专门用来压缩样式和脚本文件 .他有两个继承:StyleBundle.ScriptBundle,从名字上就可看出,StyleBundle专门压缩样式文 ...
- Flutter学习之路---------第一个Flutter项目
Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面. Flutter可以与现有的代码一起工作.在全世界,Flutter正在被越来越多的开发者和组织使用,并且 ...
- vue.js用select实现省,市,提交后,默认显示省,市信息
<select v-model="citys" name="cityVal" @change="schoolName(citys)"& ...
- Northcott Game HDU - 1730
Tom和Jerry正在玩一种Northcott游戏,可是Tom老是输,因此他怀疑这个游戏是不是有某种必胜策略,郁闷的Tom现在向你求救了,你能帮帮他么? 游戏规则是这样的: 如图所示,游戏在一个n行m ...
- 『Re』正则表达式模块_常用方法记录
『Re』知识工程作业_主体识别 一个比较完备的正则表达式介绍 几个基础函数 re.compile(pattern, flags=0) 将正则表达式模式编译成一个正则表达式对象,它可以用于匹配使用它的m ...
- python迭代器概念与应用
结论 )可迭代对象包含迭代器.2)如果一个对象拥有__iter__方法,其是可迭代对象:如果一个对象拥有next方法,其是迭代器.3)生成器是一种特殊的迭代器,生成器自动实现了“迭代器协议”(即__i ...