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


     

  • 相关阅读:
    获取父类参数类型工具类
    date工具类
    Ascii工具类
    AES加解密工具类
    请求ip获取工具类
    对象和map互相转换工具类
    HTTP中get、post请求工具类
    时间日期各种工具类
    算法练习题——两数相除
    ETag
  • 原文地址:https://www.cnblogs.com/spilledlight/p/4893078.html
Copyright © 2011-2022 走看看