MediaElement 可以播放许多不同类型的音频和视频媒体。

  MediaElement 是一个可以在其表面显示视频的矩形区域,也可以播放音频。MediaElement 支持触控输入事件。 使用属性 Height 和 Width 可以指定视频显示图面的高度和宽度。为了获得最佳性能,应避免显式设置 MediaElement 的宽度和高度。而是将这些值保留为默认。 指定源之后,媒体将以其实际大小显示,布局将重新计算该大小。如果需要更改媒体显示的大小,最好使用媒体编码工具将媒体重新编码为所需大小。

  默认情况下,加载 MediaElement 对象后,将立即播放由 Source 属性定义的媒体。若要禁止媒体自动启动,需要将 AutoPlay 属性设置为 false。

  MediaElement 将具有为 0 的 ActualWidth 和 ActualHeight,直到它开始播放。如果您正侦听 MouseLeftButtonDown 事件以触发视频的启动,这可能导致后果。一种简单的解决方法是将 Rectangle 放在 MediaElement 后面,并将鼠标事件与 Rectangle 挂接。然后,将 MediaElement 上的 IsHitTestVisible 属性设置为 false。

使用 MediaElement API 播放视频文件

  使用 MediaElement API 播放本地视频文件的步骤:

    1.在 Visual Studio 中打开一个新的或现有的解决方案。

    2.在“解决方案资源管理器”中,右键单击您项目的名称,单击“添加”,然后单击“现有项”。

    3.导航到现有视频文件并将其添加到项目。在“属性”窗口中,将“生成操作”设置为“内容”。

    4.在 XAML 代码中设置媒体的路径,并设置是否自动播放。

  使用 MediaElement API 播放远程视频文件的步骤:

    1.在 Visual Studio 中打开一个新的或现有的解决方案。

    2.在 XAML 代码中设置媒体的路径,并设置是否自动播放。

    (注意:以上播放文件,视频必须使用支持的 Windows Phone 8 媒体编解码器中列出的编解码器进行编码。)

MediaElement 属性

  MediaElement 对象提供几个媒体特定的属性。下面的列表描述了常用的属性。

    1.AutoPlay:指定 MediaElement 是否应自动开始播放。默认值为 True。

    2.IsMuted:指定 MediaElement 是否静音。

    3.True 值将使 MediaElement 静音。默认值为 false。

    4.Stretch:指定如何拉伸视频以填充 MediaElement 对象。可能的值有 None、Uniform、UniformToFill 和 Fill。默认值为 Fill。

    5.Volume:指定介于 0 到 1 的 MediaElement 对象的音频音量值,1 表示最大音量。默认值为 0.5。

控制媒体播放

  可以使用 MediaElement 对象的 Play、Pause 和 Stop 方法来控制媒体播放。当 MediaElement 对象正在播放时,设备上的所有其他媒体播放将停止。

    下面例子是从网络上下载保存到本地,并进行播放:

      MainPage.xaml主要代码如下:

  1. <phone:PhoneApplicationPage.Resources>
  2. <ControlTemplate x:Key="PlayButtonControlTemplate" TargetType="Button">
  3. <Grid>
  4.  
  5. <Image x:Name="image" Margin="12,8,13,8" Source="appbar.transport.play.rest.png" RenderTransformOrigin="0.648,0.536">
  6. <Image.RenderTransform>
  7. <CompositeTransform/>
  8. </Image.RenderTransform>
  9. </Image>
  10. </Grid>
  11. </ControlTemplate>
  12. <ControlTemplate x:Key="PauseControlTemplate" TargetType="Button">
  13. <Grid>
  14. <Image Margin="8" Source="appbar.transport.pause.rest.png"/>
  15. </Grid>
  16. </ControlTemplate>
  17. </phone:PhoneApplicationPage.Resources>
  18.  
  19. <!--LayoutRoot is the root grid where all page content is placed-->
  20. <Grid x:Name="LayoutRoot" Background="Transparent">
  21. <Grid.RowDefinitions>
  22. <RowDefinition Height="Auto"/>
  23. <RowDefinition Height="*"/>
  24. </Grid.RowDefinitions>
  25.  
  26. <!--TitlePanel contains the name of the application and page title-->
  27. <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
  28. <TextBlock x:Name="ApplicationTitle" Text="演示程序" Style="{StaticResource PhoneTextNormalStyle}"/>
  29. <TextBlock x:Name="PageTitle" Text="WebClicent下载" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
  30. </StackPanel>
  31.  
  32. <!--ContentPanel - place additional content here-->
  33. <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
  34. <Rectangle Height="54" HorizontalAlignment="Left" Margin="39,0,0,83" Name="rectangle1" Stroke="#FFF5F2F2" StrokeThickness="1" VerticalAlignment="Bottom" Width="280" />
  35. <TextBlock Height="54" HorizontalAlignment="Left" Margin="408,470,0,0" Name="TextBlock1" Text="%" VerticalAlignment="Top" FontSize="32" Width="33" />
  36. <TextBlock Height="30" HorizontalAlignment="Left" Margin="39,434,0,0" Name="textBlock2" Text="下载进度:" VerticalAlignment="Top" />
  37. <Rectangle Height="54" HorizontalAlignment="Left" Margin="39,470,0,0" Name="DownProgressRectangle" Stroke="Black" StrokeThickness="1" VerticalAlignment="Top" Width="160" Fill="#FFFCF2F2" />
  38. <MediaElement Height="278" HorizontalAlignment="Left" Margin="0,6,0,0" Name="mediaElement1" VerticalAlignment="Top" Width="450" />
  39. <Button Content="Button" Height="72" HorizontalAlignment="Left" Margin="0,344,0,0" Name="PlayButton" VerticalAlignment="Top" Width="160" Template="{StaticResource PlayButtonControlTemplate}" />
  40. <TextBlock FontSize="28" Height="54" HorizontalAlignment="Left" Margin="325,470,0,0" Name="DownProgressTextBlock" Text="0" VerticalAlignment="Top" Width="69" TextAlignment="Right" />
  41. <TextBlock Height="30" HorizontalAlignment="Left" Margin="186,366,0,0" Name="MesgTextBlock" Text="" VerticalAlignment="Top" Width="228" />
  42. </Grid>
  43. </Grid>

      MainPage.xaml.cs主要代码如下:

  1. namespace WebClientDownload
  2. {
  3. public partial class MainPage : PhoneApplicationPage
  4. {
  5. // 构造函数
  6. public static string fileName = "01.wmv";
  7.  
  8. public MainPage()
  9. {
  10. InitializeComponent();
  11. PlayButton.IsEnabled = false;
  12. mediaElement1.Source = null;
  13. this.DownProgressRectangle.Width = ;
  14. WebClient webclient = new WebClient();
  15. if (webclient.IsBusy)
  16. {
  17. webclient.CancelAsync();
  18. }
  19. webclient.OpenReadCompleted += new OpenReadCompletedEventHandler(webclient_OpenReadCompleted);
  20. webclient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(webclient_DownloadProgressChanged);
  21. //下载资源包
  22. webclient.OpenReadAsync(new Uri("http://mschannel9.vo.msecnd.net/o9/mix/09/wmv/key01.wmv" + fileName, UriKind.RelativeOrAbsolute));
  23. PlayButton.Click += new RoutedEventHandler(PlayButton_Click);
  24. //检测MediaElement播放状态
  25. mediaElement1.CurrentStateChanged += new RoutedEventHandler(mediaElement1_CurrentStateChanged);
  26. }
  27. //播放状态
  28. void mediaElement1_CurrentStateChanged(object sender, RoutedEventArgs e)
  29. {
  30. switch (mediaElement1.CurrentState.ToString())
  31. {
  32. case "Opening":
  33. PlayButton.Template = Resources["PlayButtonControlTemplate"] as ControlTemplate;
  34. MesgTextBlock.Text = "正准备播放";
  35. break;
  36. case "Playing":
  37. PlayButton.Template = Resources["PauseControlTemplate"] as ControlTemplate;
  38. MesgTextBlock.Text = "播放中...";
  39. break;
  40. case "Paused":
  41. PlayButton.Template = Resources["PlayButtonControlTemplate"] as ControlTemplate;
  42. MesgTextBlock.Text = "暂停...";
  43. break;
  44. case "Stopped":
  45. PlayButton.Template = Resources["PlayButtonControlTemplate"] as ControlTemplate;
  46. MesgTextBlock.Text = "已经播放完毕";
  47. break;
  48. }
  49. }
  50. //下载进度
  51. void webclient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
  52. {
  53. this.DownProgressRectangle.Width = e.ProgressPercentage * 2.8;
  54. this.DownProgressTextBlock.Text = e.ProgressPercentage.ToString();
  55. }
  56. //下载完成
  57. void webclient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
  58. {
  59. using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
  60. {
  61. if (file.FileExists(fileName))
  62. {
  63. file.DeleteFile(fileName);
  64.  
  65. }
  66. else
  67. {
  68. IsolatedStorageFileStream cFileStream = file.CreateFile(fileName);
  69. //关闭文件流
  70. cFileStream.Close();
  71.  
  72. }
  73. //将文件保存到IsolatedStorage
  74. using (IsolatedStorageFileStream FileStream = file.OpenFile(fileName, FileMode.Create, FileAccess.ReadWrite))
  75. {
  76.  
  77. byte[] bytesInStream = new byte[e.Result.Length];
  78. e.Result.Read(bytesInStream, , (int)bytesInStream.Length);
  79. FileStream.Write(bytesInStream, , bytesInStream.Length);
  80. FileStream.Flush();
  81. }
  82. }
  83. //将数据流读出
  84. using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
  85. {
  86. using (IsolatedStorageFileStream FileStream = file.OpenFile(fileName, FileMode.Open, FileAccess.ReadWrite))
  87. {
  88. mediaElement1.SetSource(FileStream);
  89. }
  90. }
  91. PlayButton.IsEnabled = true;
  92. }
  93.  
  94. void PlayButton_Click(object sender, RoutedEventArgs e)
  95. {
  96.  
  97. if (mediaElement1.CurrentState.ToString() != "Playing")
  98. {
  99.  
  100. mediaElement1.Play();
  101. }
  102. else
  103. {
  104.  
  105. mediaElement1.Pause();
  106. }
  107. }
  108.  
  109. }

windows phone媒体应用开发的更多相关文章

  1. 课程上线 -“新手入门 : Windows Phone 8.1 开发”

    经过近1个月的准备和录制,“新手入门 : Windows Phone 8.1 开发”系列课程已经在Microsoft 虚拟学院上线,链接地址为:http://www.microsoftvirtuala ...

  2. Windows Phone 8初学者开发—第11部分:设置SounBoard应用程序

    原文 Windows Phone 8初学者开发—第11部分:设置SounBoard应用程序 原文地址: http://channel9.msdn.com/Series/Windows-Phone-8- ...

  3. Windows Phone 8初学者开发—第3部分:编写第一个Windows Phone 8应用程序

    原文 Windows Phone 8初学者开发—第3部分:编写第一个Windows Phone 8应用程序 原文地址: http://channel9.msdn.com/Series/Windows- ...

  4. Windows下USB磁盘开发系列二:枚举系统中所有USB设备

    上篇 <Windows下USB磁盘开发系列一:枚举系统中U盘的盘符>介绍了很简单的获取系统U盘盘符的办法,现在介绍下如何枚举系统中所有USB设备(不光是U盘). 主要调用的API如下: 1 ...

  5. Windows平台下PHP开发环境的配置

    Windows平台下PHP开发环境的配置 一.基本环境 1.Windows XP 32位 2.Apache 2.2.25,下载地址:http://mirror.bit.edu.cn/apache/ht ...

  6. Windows Phone 8.1 开发技术概览 (Universal APP)

    前一阵真的比较懒 WP8.1 已经出来这么长时间了现在才更新BLOG让大家久等了,今天我先为大家介绍下 WP 8.1的开发框架,什么是微软所推崇的 Universal APP,以及我们要开发 Univ ...

  7. 《深入浅出Windows 10通用应用开发》

        <深入浅出Windows 10通用应用开发>采用Windows 10的SDK进行重新改版,整合了<深入浅出Windows Phone 8.1应用开发>和<深入解析 ...

  8. 2013-6-2 [转载自CSDN]如何入门Windows系统下驱动开发

    [序言]很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资料少有关系.大多学的驱动开发资料都以英文为主,这样让很多驱动初学者很头疼.本人从事驱动开发时间不长也不短,大概 ...

  9. Windows下搭建Git开发环境

    Windows下搭建Git开发环境主要有以下三种方法: 1,VS,vs2013和vs2015中已经集成了git插件了 2,msysGit+TortoiseGit 3,msysGit+SourceTre ...

随机推荐

  1. swift--Xcode7 使用Alamofire框架发送HTTP请求报错

    控制台打印的错误信息: Application Transport Security has blocked a cleartext HTTP (http://) resource load sinc ...

  2. SGU180 Inversions(树状数组求逆序数)

    题目: 思路:先离散化数据然后树状数组搞一下求逆序数. 离散化的方法:https://blog.csdn.net/gokou_ruri/article/details/7723378 自己对用树状数组 ...

  3. PostgreSQL使用总结

    最近项目用到了PostgreSQL数据库,网上一堆教程,这里自己整理一下做个笔记: 1,下载安装,我这边安装在Windows7,在这里找到大象一样的标志: 2,双击打开,这里的话按流程直接走: 3,这 ...

  4. windows下python-nmap运行过程中出现的问题及解决办法

    python-nmap 运行时出现了一下错误 D:\python\untitled5\Scripts\python.exe D:/python/untitled5/test.py Traceback ...

  5. [bzoj2989]数列_KD-Tree_旋转坐标系

    数列 bzoj-2989 题目大意:题目链接. 注释:略. 想法:显然,我们用x和a[x]两个值建立笛卡尔坐标系. 两个点之间的距离为曼哈顿距离. 修改操作就是插入... 查询操作就是查询一个点周围的 ...

  6. hibernate之一对多映射

    目录 第一章 课程简介 第二章 Hibernate中的单向一对多关联 2-1 一对多映射简介 2-2 hibernate的基础配置 2-3 创建HibernateUtil工具类 2-4 在mysql数 ...

  7. JDBC数据源(DataSource)数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用。

    JDBC数据源(DataSource)的简单实现   数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用. 2.数据源提供了一种简单获取数据库连接的方式,并能在内部通 ...

  8. LeetCode258——Add Digits

    Given a non-negative integer num, repeatedly add all its digits until the result has only one digit. ...

  9. VIM 移动

    基础 字符移动 k 上移 k h 左移 h l l 右移 j j 下移 你也可以使用键盘上的方向键来移动,但这么做h j k l的存在就失去了意义 之所以使用h j k l来控制方向,其主要目的是让你 ...

  10. 新手对ASP.NET MVC的疑惑

    习惯了多年的WEB FORM开发方式,突然转向MVC,一下子懵了,晕头转向,好多不习惯,好多不明白,直到现在也没弄明白,只好先记下来,在应用中一一求解. 主要集中在视图(View)这里. 1.@Htm ...