zoukankan      html  css  js  c++  java
  • 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>
    View Code

          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     }
    View Code


     

  • 相关阅读:
    Windows Azure Cloud Service (14) 使用Windows Azure诊断收集日志记录数据
    Windows Azure Cloud Service (13) 用Visual Studio 2010 将应用程序部署到Windows Azure平台
    Windows Azure Cloud Service (15) 多个VM Instance场景下如何处理ASP.NET Session
    Windows Azure Storage (5) Windows Azure Drive
    Windows Azure Storage (7) 使用工具管理Windows Azure Storage
    SQL Azure(二) SQL Azure vs SQL Server
    webbrowser的自动提交
    提取视频的背景声音的软件
    Listview列排序的bug原因
    两个奇怪的问题
  • 原文地址:https://www.cnblogs.com/spilledlight/p/4893078.html
Copyright © 2011-2022 走看看