原文:与众不同 windows phone (14) - Media(媒体)之音频播放器, 视频播放器, 与 Windows Phone 的音乐和视频中心集成

[索引页]
[源码下载]

与众不同 windows phone (14) - Media(媒体)之音频播放器, 视频播放器, 与 Windows Phone 的音乐和视频中心集成

作者:webabcd

介绍
与众不同 windows phone 7.5 (sdk 7.1) 之媒体

  • 音频播放器
  • 视频播放器
  • 与 Windows Phone 的音乐和视频中心集成

示例
1、演示音频播放器
Audio.xaml

<phone:PhoneApplicationPage
x:Class="Demo.Media.Audio"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"
shell:SystemTray.IsVisible="True"> <Grid x:Name="LayoutRoot" Background="Transparent">
<StackPanel Orientation="Vertical">
<MediaElement x:Name="mediaElement" Source="Assets/SuperMario.mp3" AutoPlay="False" /> <Button x:Name="btnPlay" Content="播放" Click="btnPlay_Click" />
<Button x:Name="btnPause" Content="暂停" Click="btnPause_Click" /> <TextBlock x:Name="lblStatus" />
</StackPanel>
</Grid> </phone:PhoneApplicationPage>

Audio.xaml.cs

/*
* MediaElement - 用于播放视频或音频,本地地址或远程地址均可
* 支持的编码格式参见:http://msdn.microsoft.com/en-us/library/ff462087(v=vs.92)
*
* MediaElement 的详细说明参见:http://www.cnblogs.com/webabcd/archive/2008/12/01/1344632.html
* Launcher 方式参见:http://www.cnblogs.com/webabcd/archive/2012/06/14/2548776.html 中的 MediaPlayerLauncher
*
* XNA 播放音频参见:http://www.cnblogs.com/webabcd/archive/2011/07/11/2102713.html
*/ using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls; namespace Demo.Media
{
public partial class Audio : PhoneApplicationPage
{
public Audio()
{
InitializeComponent(); mediaElement.CurrentStateChanged += new RoutedEventHandler(mediaElement_CurrentStateChanged);
} void mediaElement_CurrentStateChanged(object sender, RoutedEventArgs e)
{
// 显示 MediaElement 的当前状态
lblStatus.Text = mediaElement.CurrentState.ToString();
} private void btnPlay_Click(object sender, RoutedEventArgs e)
{
// 播放
mediaElement.Play();
} private void btnPause_Click(object sender, RoutedEventArgs e)
{
// 暂停
mediaElement.Pause();
}
}
}

2、演示视频播放器
Video.xaml

<phone:PhoneApplicationPage
x:Class="Demo.Media.Video"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"
shell:SystemTray.IsVisible="True"> <Grid x:Name="LayoutRoot" Background="Transparent">
<StackPanel Orientation="Vertical">
<MediaElement x:Name="mediaElement" Source="Assets/Demo.mp4" AutoPlay="False" /> <Button x:Name="btnPlay" Content="播放" Click="btnPlay_Click" />
<Button x:Name="btnPause" Content="暂停" Click="btnPause_Click" /> <TextBlock x:Name="lblStatus" />
</StackPanel>
</Grid> </phone:PhoneApplicationPage>

Video.xaml.cs

/*
* MediaElement - 用于播放视频或音频,本地地址或远程地址均可
* 支持的编码格式参见:http://msdn.microsoft.com/en-us/library/ff462087(v=vs.92)
*
* MediaElement 的详细说明参见:http://www.cnblogs.com/webabcd/archive/2008/12/01/1344632.html
* Launcher 方式参见:http://www.cnblogs.com/webabcd/archive/2012/06/14/2548776.html 中的 MediaPlayerLauncher
*/ using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls; namespace Demo.Media
{
public partial class Video : PhoneApplicationPage
{
public Video()
{
InitializeComponent(); mediaElement.CurrentStateChanged += new RoutedEventHandler(mediaElement_CurrentStateChanged);
} void mediaElement_CurrentStateChanged(object sender, RoutedEventArgs e)
{
// 显示 MediaElement 的当前状态
lblStatus.Text = mediaElement.CurrentState.ToString();
} private void btnPlay_Click(object sender, RoutedEventArgs e)
{
// 播放
mediaElement.Play();
} private void btnPause_Click(object sender, RoutedEventArgs e)
{
// 暂停
mediaElement.Pause();
}
}
}

3、演示如何与 Windows Phone 的音乐和视频中心集成
IntegrateWithTheMusicAndVideoHub.xaml

<phone:PhoneApplicationPage
x:Class="Demo.Media.IntegrateWithTheMusicAndVideoHub"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"
shell:SystemTray.IsVisible="True"> <Grid x:Name="LayoutRoot" Background="Transparent">
<StackPanel Orientation="Vertical"> <TextBlock TextWrapping="Wrap">
<Run>本 app 会出现在“音乐视频中心”中的“应用程序”下</Run>
<LineBreak />
<Run>操作完成后,请去“音乐视频中心”看效果</Run>
</TextBlock> <Button x:Name="btnNow" Content="设置“音乐视频中心”中的“正在播放磁贴”" Click="btnNow_Click" />
<Button x:Name="btnRecent" Content="向“音乐视频中心”中的“历史记录”添加新的磁贴" Click="btnRecent_Click" />
<Button x:Name="btnAcquired" Content="向“音乐视频中心”中的“最新上市”添加新的磁贴" Click="btnAcquired_Click" /> </StackPanel>
</Grid> </phone:PhoneApplicationPage>

IntegrateWithTheMusicAndVideoHub.xaml.cs

/*
* 本例演示如何将 app 集成进“音乐视频中心”
*
* MediaHistoryItem - 出现在“音乐视频中心”中的磁贴对象(包括“正在播放”,“历史记录”和“最新上市”)
* ImageStream - 磁贴上需要显示的背景图片流
* Title - 磁贴的标题
* PlayerContext - key/value 对集合,用户点击“历史记录”或“最新上市”中的某个磁贴会进入到 app 的主页面,同时也会将对应的 key/value 数据一同带过去,参见 MainPage.xaml.cs
*
* MediaHistory - 管理 MediaHistoryItem 的类
* Instance - 获得 MediaHistory 实例
* NowPlaying - 指定“正在播放”对象,MediaHistoryItem 类型
* WriteRecentPlay(MediaHistoryItem item) - 在“历史记录”中增加一个指定的 MediaHistoryItem 对象
* WriteAcquiredItem(MediaHistoryItem item) - 在“最新上市”中增加一个指定的 MediaHistoryItem 对象
*
*
* 注意:
* 1、“正在播放”磁贴大小为 358 * 358,背景图不能大于 75 KB
* 2、“历史记录”和“最新上市”磁贴大小为 173 * 173
* 3、app 提交到商店审核时,如果认证程序检测到 app 调用了 MediaHistory 和 MediaHistoryItem,则此 app 就会出现在“音乐视频中心”的应用程序中
* 4、出于测试目的,如果想在 app 提交商店前使其出现在“音乐视频中心”的应用程序中的话,需要修改 manifest,在 <App /> 中增加 HubType="1"
* 5、MediaHistoryItem 的 PlayerContext 指定的 key/value 对集合是 MediaHistoryItem 的上下文数据,用户在“历史记录”或“最新上市”单击某个磁贴对象时,会跳转到 app 的主页面,同时将对应的 key/value 数据一同带过去,其可以在主页面通过 NavigationContext.QueryString[key] 获取到,参见 MainPage.xaml.cs
*/ using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls; using Microsoft.Devices;
using System.IO;
using System.Windows.Resources;
using System.IO.IsolatedStorage;
using Microsoft.Phone.BackgroundAudio; namespace Demo.Media
{
public partial class IntegrateWithTheMusicAndVideoHub : PhoneApplicationPage
{
public IntegrateWithTheMusicAndVideoHub()
{
InitializeComponent(); PlayAudio();
} // 播放一个音频
private void PlayAudio()
{
// 由于播放本地音频时只能从独立存储中播放,所以此处把示例用音频文件从程序包中复制到独立存储
using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
{
if (!storage.FileExists("SuperMario.mp3"))
{
StreamResourceInfo resource = Application.GetResourceStream(new Uri("Assets/SuperMario.mp3", UriKind.Relative)); using (IsolatedStorageFileStream file = storage.CreateFile("SuperMario.mp3"))
{
int chunkSize = ;
byte[] bytes = new byte[chunkSize];
int byteCount; while ((byteCount = resource.Stream.Read(bytes, , chunkSize)) > )
{
file.Write(bytes, , byteCount);
}
}
}
} BackgroundAudioPlayer.Instance.Play();
} private void btnNow_Click(object sender, RoutedEventArgs e)
{
StreamResourceInfo sri = Application.GetResourceStream(new Uri("Assets/TileBackgroundRed.png", UriKind.Relative)); MediaHistoryItem mediaHistoryItem = new MediaHistoryItem();
mediaHistoryItem.ImageStream = sri.Stream;
mediaHistoryItem.Title = "正在播放";
mediaHistoryItem.PlayerContext.Add("keyNow", "正在播放的音乐");
MediaHistory.Instance.NowPlaying = mediaHistoryItem;
} private void btnRecent_Click(object sender, RoutedEventArgs e)
{
StreamResourceInfo sri = Application.GetResourceStream(new Uri("Assets/TileBackgroundGreen.png", UriKind.Relative)); MediaHistoryItem mediaHistoryItem = new MediaHistoryItem();
mediaHistoryItem.ImageStream = sri.Stream;
mediaHistoryItem.Title = "最近播放";
mediaHistoryItem.PlayerContext.Add("keyRecent", "最近播放的音乐");
MediaHistory.Instance.WriteRecentPlay(mediaHistoryItem);
} private void btnAcquired_Click(object sender, RoutedEventArgs e)
{
StreamResourceInfo sri = Application.GetResourceStream(new Uri("Assets/TileBackgroundBlue.png", UriKind.Relative)); MediaHistoryItem mediaHistoryItem = new MediaHistoryItem();
mediaHistoryItem.ImageStream = sri.Stream;
mediaHistoryItem.Title = "最新上市";
mediaHistoryItem.PlayerContext.Add("keyAcquired", "最新上市的音乐");
MediaHistory.Instance.WriteAcquiredItem(mediaHistoryItem);
}
}
}

OK
[源码下载]

与众不同 windows phone (14) - Media(媒体)之音频播放器, 视频播放器, 与 Windows Phone 的音乐和视频中心集成的更多相关文章

  1. HTML5的音频播放和视频播放

    1.音频播放 audio(音频) html5提供了播放音频文件的标准   <audio src="anli.mp3" controls="controls" ...

  2. 与众不同 windows phone (15) - Media(媒体)之后台播放音频

    原文:与众不同 windows phone (15) - Media(媒体)之后台播放音频 [索引页][源码下载] 与众不同 windows phone (15) - Media(媒体)之后台播放音频 ...

  3. 与众不同 windows phone (16) - Media(媒体)之编辑图片, 保存图片到相册, 与图片的上下文菜单“应用程序...”和“共享...”关联, 与 Windows Phone 的图片中心集成

    原文:与众不同 windows phone (16) - Media(媒体)之编辑图片, 保存图片到相册, 与图片的上下文菜单"应用程序..."和"共享..." ...

  4. 背水一战 Windows 10 (14) - 动画: 线性动画, 关键帧动画

    [源码下载] 背水一战 Windows 10 (14) - 动画: 线性动画, 关键帧动画 作者:webabcd 介绍背水一战 Windows 10 之 动画 线性动画 - ColorAnimatio ...

  5. css3 media媒体查询器用法总结 兼容ie8以下的方法

    总结一下响应式设计的核心CSS技术Media(媒体查询器)的用法. http://www.360doc.com/content/14/0704/06/10734150_391862769.shtml ...

  6. CSS Media媒体查询使用大全,完整媒体查询总结

    前面的话 一说到响应式设计,肯定离不开媒体查询media.一般认为媒体查询是CSS3的新增内容,实际上CSS2已经存在了,CSS3新增了媒体属性和使用场景(IE8-浏览器不支持).本文将详细介绍媒体查 ...

  7. CSS3 media媒体查询器的使用方法

    最近几年随着响应式布局的发展,一次开发多次使用,自适应屏幕的响应式网站的需求越来越多.但是怎样使得网站能自适应屏幕呢?这里就需要提到一个css3里面新增的技术了-media媒体查询器. 那么什么是me ...

  8. 不可或缺 Windows Native (14) - C++: 文件

    [源码下载] 不可或缺 Windows Native (14) - C++: 文件 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 文件 示例CppIO2.h #prag ...

  9. css3 media媒体查询器用法总结

    随着响应式设计模型的诞生,Web网站又要发生翻天腹地的改革浪潮,可能有些人会觉得在国内IE6用户居高不下的情况下,这些新的技术还不会广泛的蔓延下去,那你就错了,如今淘宝,凡客,携程等等公司都已经在大胆 ...

随机推荐

  1. 删除: warning C4996: &#39;sprintf&#39;: This function or variable may be unsafe. Consider 方法

    可以使用的最简单的方法: 选项Project   |   Configuration   Properties   |   C/C++   |   Preprocessor   |   Preproc ...

  2. 使用ffmpeg将BMP图片编码为x264视频文件,将H264视频保存为BMP图片,yuv视频文件保存为图片的代码

    ffmpeg开源库,实现将bmp格式的图片编码成x264文件,并将编码好的H264文件解码保存为BMP文件. 实现将视频文件yuv格式保存的图片格式的測试,图像格式png,jpg, gif等等測试均O ...

  3. Linux: 信息查看

    Linux log日志查看  http://www.2cto.com/os/201307/227230.html

  4. AOP编程

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  5. c语言实现atoi和itoa函数。

    首先看atoi函数: C语言库函数名: atoi 功 能: 把字符串转换成整型数. 名字来源:ASCII to integer 的缩写. 原型: int atoi(const char *nptr); ...

  6. Python 文本解析器

    Python 文本解析器 一.课程介绍 本课程讲解一个使用 Python 来解析纯文本生成一个 HTML 页面的小程序. 二.相关技术 Python:一种面向对象.解释型计算机程序设计语言,用它可以做 ...

  7. UVa 二分图匹配 Biginners

    UVa 1045 - The Great Wall Game 最小权匹配 题意:给你一个n*n的棋盘,上面有n个棋子,要求通过移动各个棋子使得棋子在同一行或者同一列或者对角线上,求最小移动次数. 思路 ...

  8. getComputedStyle与currentStyle

    currentStyle:获取计算后的样式.也叫当前样式.终于样式. 长处:能够获取元素的终于样式.包含浏览器的默认值,而不像style仅仅能获取行间样式.所以更经常使用到. 注意:不能获取复合样式如 ...

  9. WS_EX_TOOLWINDOW 属性的陷阱

    WS_EX_TOOLWINDOW,带有这个属性的窗口有以下特点: 1. 不在任务栏显示. 2. 不显示在Alt+Tab的切换列表中. 3. 在任务管理器的窗口管理Tab中不显示. 我们可能会出于某种目 ...

  10. HDU 472 Hamming Distance (随机数)

    Hamming Distance Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) To ...