在Windows Phone 7中播放视频有两种方式,

(1)使用MediaElement 控件来播放;用MediaElement 控件来播放视频比较灵活,你需要自己去实现播放暂停进度条等等的功能,播放屏幕的大小也可以由你来自定义。

(2)使用启动器MediaPlayerLanucher来实现视频的播放:用MediaPlayerLanucher来播放视频,相当于调用了系统的默认播放器来打开你的视频,修改不了系统默认的播放器。


第一种方式:MediaElement 控件播放视频。

MediaElement 可以播放许多不同类型的音频和视频媒体。MediaElement 基本上是一个矩形区域,可以在其图面上显示视频,或播放音频(在这种情况下将不显示视频,但 MediaElement 仍然充当具有相应 API 的播放器对象)。因为它是一个 UIElement,所以,MediaElement 支持输入操作,并可以捕获焦点或鼠标。使用属性 Height 和 Width 可以指定视频显示图面的高度和宽度。但是,为了获得最佳性能,应避免显式设置 MediaElement 的宽度和高度。而是将这些值保留为未设置。指定源之后,媒体将以其实际大小显示,布局将重新计算该大小。如果需要更改媒体显示的大小,最好使用媒体编码工具将媒体重新编码为所需大小。默认情况下,加载 MediaElement 对象后,将立即播放由 Source 属性定义的媒体。

播放本地视频文件的XAML语法如下:

  1. <MediaElement Source="test.wmv" AutoPlay="True"/> <MediaElement Source="test.wmv" AutoPlay="True"/>

播放远程视频文件的XAML语法如下:

  1. <MediaElement Source="http://mschannel9.v​​o.msecnd.net/o9/mix/09/wmv/key01.wmv" AutoPlay="True"/>

MainPage.xaml

  1. <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
  2. <Grid.RowDefinitions>
  3. <RowDefinition Height="*" />
  4. <RowDefinition Height="40" />
  5. </Grid.RowDefinitions>
  6. <!--添加MediaElement多媒体播放控件-->
  7. <MediaElement Name="myMediaElement" AutoPlay="True" Grid.Row="0" />
  8. <ProgressBar Name="pbVideo" Grid.Row="1" />
  9. </Grid>
  1. <!--3个菜单栏:播放、暂停和停止-->
  2. <phone:PhoneApplicationPage.ApplicationBar>
  3. <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True" >
  4. <shell:ApplicationBarIconButton IconUri="/icons/play.png" Click="Play_Click" Text="播放"/>
  5. <shell:ApplicationBarIconButton IconUri="/icons/pause.png" Click="Pause_Click" Text="暂停"/>
  6. <shell:ApplicationBarIconButton IconUri="/icons/stop.png" Click="Stop_Click" Text="停止"/>
  7. </shell:ApplicationBar>
  8. </phone:PhoneApplicationPage.ApplicationBar>

MainPage.xaml.cs

  1. using System;
  2. using System.Windows;
  3. using System.Windows.Media;
  4. using Microsoft.Phone.Controls;
  5. using System.Windows.Threading;
  6. using Microsoft.Phone.Shell;
  7.  
  8. namespace MediaPlayer
  9. {
  10. public partial class MainPage : PhoneApplicationPage
  11. {
  12. // 使用定时器来处理视频播放的进度条
  13. DispatcherTimer currentPosition = new DispatcherTimer();
  14.  
  15. // 页面的初始化
  16. public MainPage()
  17. {
  18. InitializeComponent();
  19. //定义多媒体流可用并被打开时触发的事件
  20. myMediaElement.MediaOpened += new RoutedEventHandler(myMediaElement_MediaOpened);
  21. //定义多媒体停止时触发的事件
  22. myMediaElement.MediaEnded += new RoutedEventHandler(myMediaElement_MediaEnded);
  23. //定义多媒体播放状态改变时触发的事件
  24. myMediaElement.CurrentStateChanged += new RoutedEventHandler(myMediaElement_CurrentStateChanged);
  25. //定义定时器触发的事件
  26. currentPosition.Tick += new EventHandler(currentPosition_Tick);
  27. //设置多媒体控件的网络视频资源
  28. myMediaElement.Source = new Uri("123.wmv", UriKind.Relative);
  29. }
  30.  
  31. //视频状态改变时的处理事件
  32. void myMediaElement_CurrentStateChanged(object sender, RoutedEventArgs e)
  33. {
  34.  
  35. if (myMediaElement.CurrentState == MediaElementState.Playing)
  36. {//播放视频时各菜单的状态
  37. currentPosition.Start();
  38. ((ApplicationBarIconButton)ApplicationBar.Buttons[]).IsEnabled = false; // 播放
  39. ((ApplicationBarIconButton)ApplicationBar.Buttons[]).IsEnabled = true; // 暂停
  40. ((ApplicationBarIconButton)ApplicationBar.Buttons[]).IsEnabled = true; // 停止
  41. }
  42. else if (myMediaElement.CurrentState == MediaElementState.Paused)
  43. { //暂停视频时各菜单的状态
  44. currentPosition.Stop();
  45. ((ApplicationBarIconButton)ApplicationBar.Buttons[]).IsEnabled = true;
  46. ((ApplicationBarIconButton)ApplicationBar.Buttons[]).IsEnabled = false;
  47. ((ApplicationBarIconButton)ApplicationBar.Buttons[]).IsEnabled = true;
  48. }
  49. else
  50. {//停止视频时各菜单的状态
  51. currentPosition.Stop();
  52. ((ApplicationBarIconButton)ApplicationBar.Buttons[]).IsEnabled = true;
  53. ((ApplicationBarIconButton)ApplicationBar.Buttons[]).IsEnabled = false;
  54. ((ApplicationBarIconButton)ApplicationBar.Buttons[]).IsEnabled = false;
  55. }
  56. }
  57. //多媒体停止时触发的事件
  58. void myMediaElement_MediaEnded(object sender, RoutedEventArgs e)
  59. {
  60. //停止播放
  61. myMediaElement.Stop();
  62. }
  63. //多媒体流可用并被打开时触发的事件
  64. void myMediaElement_MediaOpened(object sender, RoutedEventArgs e)
  65. {
  66. //获取多媒体视频的总时长来设置进度条的最大值
  67. pbVideo.Maximum = (int)myMediaElement.NaturalDuration.TimeSpan.TotalMilliseconds;
  68. //播放视频
  69. myMediaElement.Play();
  70. }
  71. //定时器触发的事件
  72. void currentPosition_Tick(object sender, EventArgs e)
  73. {
  74. //获取当前视频播放了的时长来设置进度条的值
  75. pbVideo.Value = (int)myMediaElement.Position.TotalMilliseconds;
  76. }
  77. //播放视频菜单事件
  78. private void Play_Click(object sender, EventArgs e)
  79. {
  80. myMediaElement.Play();
  81. }
  82. //暂停视频菜单事件
  83. private void Pause_Click(object sender, EventArgs e)
  84. {
  85. myMediaElement.Pause();
  86. }
  87. //停止视频菜单事件
  88. private void Stop_Click(object sender, EventArgs e)
  89. {
  90. myMediaElement.Stop();
  91. }
  92. }
  93. }

第二种方式:使用启动器MediaPlayerLanucher来实现视频的播放。

利用了系统内部的多媒体播放器直接全屏显示播放多媒体文件。下面来看一下MediaPlayerLanucher类的一些重要的属性。

(1) Location属性,Location 是描述文件是放置在什么样的位置,有下面三种类型。

    MediaLocationType.Install:指的就是跟着你的xap文件一起部署过去的相关文件,也就是位于程序安装的目录中。

    MediaLocationType.Data:指的是位于隔离储存区当中的文件,也就是说如果你的文件是执行之后才会取得或是产生的(例如说从网络下载),而会将档案写入到隔离储存区当中,这个时候就要设定为这个属性。

    MediaLocationType.None:这个属性目前来说是没有作用的,如果设定为None,那么呼叫Show 的方法之后,直接就会丢出异常FileNotFroundException。

(2) Meida 属性,Media 是文件的位置以及文件名称,是以Uri 的方式来表示

(3) Controls 属性,Controls 是设定MediaPlayer 出现之后,在画面上会出现哪一些控制按钮,而各个项目也可以利用OR 的方式去设定。

  1. <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
  2. <Button Content="播放视频" Height="116" HorizontalAlignment="Left" Margin="100,81,0,0" Name="Start" VerticalAlignment="Top" Width="273" Click="Start_Click" />
  3. </Grid>
  1. private void Start_Click(object sender, RoutedEventArgs e)
  2. {
  3. //创建一个多媒体的启动器
  4. MediaPlayerLauncher mpl = new MediaPlayerLauncher();
  5. //设置播放文件放置的位置属性
  6. mpl.Location = MediaLocationType.Install;
  7. //设置所有控制纽都出现
  8. mpl.Controls = MediaPlaybackControls.All;
  9. //设置出现停止按钮以及暂停按钮
  10. mpl.Controls = MediaPlaybackControls.Pause | MediaPlaybackControls.Stop;
  11. //设置播放的文件
  12. mpl.Media = new Uri(@"Media\123.wmv", UriKind.Relative);
  13. //启动播放
  14. mpl.Show();
  15. }

Windows Phone 之播放视频的更多相关文章

  1. Windows Phone 7 播放视频

    在Windows Phone 7中播放视频有两种方式,一种是使用MediaElement 控件来播放,一种是使用启动器MediaPlayerLanucher来实现视频的播放.用MediaElement ...

  2. Windows Media Player播放视频导致程序闪退

    在有的电脑上发现,使用Windows Media Player组件播放视频导致程序闪退. 发现是显卡问题,独立显卡换成集成显卡 解决: 打开显卡控制面板->管理3D设置->集成图形-> ...

  3. windows media player 播放视频

    一.新建windows应用程序项目,添加vedioForm窗体 二.在com组件中找到windows media player,添加引用 三.代码如下: public partial class Ve ...

  4. Windows及Android倍速播放视频软件下载

    目录 1. 更多推荐 2. 关键字 3. 按 4. 软件下载 4.1. IOS应用商店 4.2. 网盘下载 5. 软件介绍 5.1. PotPlayer(Windows) 5.2. MoboPlaye ...

  5. WPF播放视频

    在现在的项目中需要使用到播放视频的功能,本来打算使用VLC来做的.后来发现WPF 4.0之后新增了MediaElement类,可以实现视频播放. <Grid> <Grid.RowDe ...

  6. 在Winform中播放视频等【DotNet,C#】

    在项目中遇到过这样的问题,就是如何在Winform中播放视频.当时考察了几种方式,第一种是直接使用Windows Media Player组件,这种最简单:第二种是利用DirectX直接在窗体或者控件 ...

  7. OpenCV播放视频带滚动条(3)

      演示 :一个带有滚动条的播放视频的代码.   #include "stdafx.h" #include <opencv2/core/core.hpp> #inclu ...

  8. Unity3D基础学习 利用NGUI的Texture播放视频

    利用NGUI播放视频,首先你得导入你的视频 你的电脑中必须安装QuickTime软件,没有,去下一个,如果是Windows系统,安装完之后重启. 接下来转换你的视频格式,如果你的视频在QuickTim ...

  9. 用vlc SDK创建一个播放视频文件和RTSP流视频的Demo

    #include <stdio.h> #include <tchar.h> #include <time.h> #include <windows.h> ...

随机推荐

  1. openstack liberty 版本按照官方文档手动整合 完成后 基于dashboard-horizon 创建虚拟机报错 用CL却是成功的 网络等验证都是正确的通过启动的虚拟实例测试以成功

  2. 第十一章、认识与学习 BASH Bash Shell 的操作环境

    bash中的变量动不动就说环境变量,真是奇怪,bash只是一个c语言编写的程序而已,跟环境变量有什么关系?如果知道dos的历史的话就知道有个时代是只有命令行界面而没有图形用户界面,这只小小的程序就包揽 ...

  3. advanced dom scripting dynamic web design techniques Chapter 2 CREATING YOUR OWN REUSABLE OBJECTS

    JavaScript is all about objects. Objects are the foundation of everything, so if you’re unfamiliar w ...

  4. hdoj 2063 过山车【匈牙利算法+邻接矩阵or邻接表】

    过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  5. C++的静态分发(CRTP)和动态分发(虚函数多态)的比较

    虚函数是C++实现多态的工具,在运行时根据虚表决定调用合适的函数.这被称作动态分发.虚函数很好的实现了多态的要求,但是在运行时引入了一些开销,包括: 对每一个虚函数的调用都需要额外的指针寻址 虚函数通 ...

  6. postgresql9.5 run 文件linux安装后配置成开机服务

    网上出现的比较多安装方法要么是源码安装,要么是yum安装,我发觉都要配置很多属性,比较麻烦,所以现在我在centos7长用 run文件来安装 http://get.enterprisedb.com/p ...

  7. 关于编译Lambda时报告返回的为void的错误

    这个错误的信息是这样的: a lambda that has been specified to have a void return type cannot return a value 报告错误的 ...

  8. 【HDU 2014 Multi-University Training Contest 1 1002】/【HDU 4862】Jump

    多校训练就这么华丽丽的到了 ,于是乎各种华丽丽的被虐也開始了. 这是多校的1002; 最小费用最大流. 题目大意: 有n*m个方格,每一个方格都一个的十进制一位的数.你能够操作K次. 对于每一次操作, ...

  9. 2014 百度之星题解 1002 - Disk Schedule

    Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取.为了提高效率,须要人为安排磁盘读取.然而,在现实中,这样的做法非常复杂.我们考虑一个相对简单的场景. 磁盘 ...

  10. 从robots.txt開始网页爬虫之旅

    做个网页爬虫或搜索引擎(下面统称蜘蛛程序)的各位一定不会陌生,在爬虫或搜索引擎訪问站点的时候查看的第一个文件就是robots.txt了.robots.txt文件告诉蜘蛛程序在server上什么文件是能 ...