windows phone媒体应用开发

  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 = 0;
 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, 0, (int)bytesInStream.Length);
 79                     FileStream.Write(bytesInStream, 0, 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     }

时间: 2024-10-13 03:20:20

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

Windows下Ionic Android开发环境搭建

转自 http://www.itwap.net/ArticleContent.aspx?id=26 来源: itwap.net 作者: 词略 时间: 2015-4-2 16:57:28 (一)Ionic简单介绍:   首先,Ionic是什么. Ionic是一款基于PhoneGap及AngularJS开发Hybrid/Web APP的前端框架,类似的其他框架有:Intel XDK等. 简单来说就是可以将你的Web应用打包发布成IOS/Android APP,并且提供了PhoneGap之外很多强大的

在windows下进行linux开发:利用Vagrant+virtualbox(ShowDoc与mp3dish的作者)

1,介绍Vagrant 我们做web开发的时候经常要安装各种本地测试环境,比如apache,php,mysql,redis等等.出于个人使用习惯,可能我们还是比较习惯用windows.虽然说在windows下搭建各种开发环境是可行的,各大开发环境都有windows版本.然而在windows下配置有时候会显得繁琐,并且还会导致开发环境(windows)和生产环境(lunix)不一致.能不能在windows下也像linux那样开发?也许你想到了,用虚拟机.用虚拟机装个linux系统就好了.装完lin

Windows系统下Android开发环境搭建

“工具善其事,必先利其器”.要想学好Android,搭建好Android开发环境是一个良好的开端. Windows系统下Android开发环境主要有4个大的步骤.分别是: 1.JDK的安装 2.eclipse的安装 3.Android SDK 的安装 4.Android ADT插件的安装 ---------------------------------------------------------------------------------------------------------

C#学习(九)之Windows Store App &amp; WP 开发小记(一)

由于课程已经讲述完毕,所以本次学习记录就讨论记录一下我在Windows Store App & WP开发中遇到的一些问题与收获. 一.数据库(Sqlite)的使用 虽然资料很难找,但sqlite在这两个平台的使用还是很简单的. 首先是环境配置阶段: 1.工具->拓展与更新->联机,然后在右上搜索sqlite,之后下载安装下图两个打勾的拓展包,注意要重启VS方才生效. 2.项目->管理NuGet程序包->联机,搜索sqlite,安装下图打勾内容,如果项目多出下图两个文件即安装

Windows下搭建PHP开发环境

Windows下搭建PHP开发环境 一.准备工作-所需软件 ·   Apache  \php\httpd-2.2.25-win32-x86-no_ssl.msi ·   PHP \php\php-5.3.1-Win32-VC6-x86.zip ·   Oracle client 10g\php\client 二.安装软件 安装Apache: 双击安装,与安装其他Windows软件没有什么区别,在填Server Infomation时,并没有特殊规定,只要输入的信息符合格式即可. 安装完成之后,在

图文详解如何搭建Windows的Android C++开发环境

原地址:http://www.apkbus.com/android-18595-1-1.html //=====================================================================//TITLE://    图文详解如何搭建Windows的Android C++开发环境(一)//AUTHOR://    norains//DATE://    Thursday  14-April-2011//Environment://    Cygw

Windows下的PHP开发环境搭建——PHP线程安全与非线程安全、Apache版本选择,及详解五种运行模式。

今天为在Windows下建立PHP开发环境,在考虑下载何种PHP版本时,遭遇一些让我困惑的情况,为了解决这些困惑,不出意料地牵扯出更多让我困惑的问题. 为了将这些困惑一网打尽,我花了一下午加一晚上的时间查阅了大量资料,并做了一番实验后,终于把这些困惑全都搞得清清楚楚了. 说实话,之所以花了这么多时间,很大程度上是由于网上的资料几乎全都是支离破碎.以讹传讹的.既然我已经搞懂了,就花时间整理出来,即方便自己看,也便于大家阅读.相信通过这篇文章,可以解答很多在Windows下搭建PHP开发环境的朋友的

Go语言学习笔记(一) : 搭建Windows下的Go开发环境

最近突然对Go语言产生了兴趣,主要是因为在使用python的时候遇到了一些不爽的问题,然后发现了Go.Go是Google出的一个动态语言,语法和C++接近,性能也非常的好,而且还支持编译成exe发布,并且不依赖任何虚拟机(其实是打包在exe里面了),这种好语言怎么能够错过?所以便一时兴起,开始学习了起来.由于本人还处于异常小白的阶段,所以文章中可能不免有些错误,欢迎大家各种指正. 安装Go 前往Go语言的官方网站:http://golang.org/, 下载对应平台的安装包.如果是x86的系统可

使用minGW/cygwin在Windows是用于gcc开发

刚才记录了下用eclipse在linux下开发,突然想起来也另一种方法:MinGW. MinGW是Windows的gcc开发工具,直接使用Windows的运行库,所以可以在windows下面方便的用gcc进行编译. 但是这个方法很有局限,那就是没办法使用Linux下面的系统函数,除非自己的代码不依赖于任何系统api,然而这显然不可能.所以要在Windows下模拟Linux,仅仅是MinGW还是不够的. 但是还有另一种方法,那就是cygwin,它是一个在Window下模拟的简单的Linux环境,说