原文:与众不同 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. linux stat系统调用,获取文件信息。

    stat 函数原型: int stat(const char *path, struct stat *buf); struct stat 说明 struct stat { mode_t st_mode ...

  2. 关于负数的isdigit()判断

    -->the start 今天写作业的时候突然想到,一直使用isdigit()方法来处理用户的输入选择是不是数字,但是如果用户输入的是负数呢,会不会导致bug? 然后我就试了一下,居然不报错.. ...

  3. RPC通信框架——RCF介绍(替换COM)

    阅读目录 RPC通信框架 为什么选择RCF 简单的性能测试 参考资料 总结 现有的软件中用了大量的COM接口,导致无法跨平台,当然由于与Windows结合的太紧密,还有很多无法跨平台的地方.那么为了实 ...

  4. Qt 无边框窗体改变大小 完美实现

    近期,做项目用到无边框窗体,令人蛋疼的是无边框窗体大小的改变要像右边框那样,上下左右四周,而且要流畅. 网上也找了些代码,发现居然还要连接到windows事件,这显然不合常理,后来自己新建了demo, ...

  5. 新鲜出炉的Using Qt 3D to visualize music

    http://blog.qt.io/blog/2016/01/27/using-qt-3d-visualize-music/

  6. android一个页面上多个listview

    android一个页面上多个listview,在滚动的时候,需要两个listview能够一起滚动,看起来是一个view. 这个功能的具体实现,参考: http://blog.csdn.net/xia2 ...

  7. opencv分水岭算法对图像进行切割

    先看效果 说明 使用分水岭算法对图像进行切割,设置一个标记图像能达到比較好的效果,还能防止过度切割. 1.这里首先对阈值化的二值图像进行腐蚀,去掉小的白色区域,得到图像的前景区域.并对前景区域用255 ...

  8. SSH-Struts(一)——基本原理

    简单介绍 Struts框架是MVC的一个实现,它非常好的结合了JSP.Servlet.JavaBean.Taglib等技术.它为MVC的各层提供了良好的支持,就像房地产商盖房子时先盖的大楼框架. 仅仅 ...

  9. 圣魔大战3(Castle Fantisia)艾伦希亚战记完美攻略

    作为城堡幻想曲系列续作,艾伦希亚战记继承了前作的战棋+养成模式进行游戏. (城堡幻想曲3,纠正大家个错误哦,不是圣魔大战3,圣魔大战是城堡幻想曲2,圣魔大战不是个系列,艾伦西亚战记==艾伦希亚战记,一 ...

  10. Eclipse用法和技巧二十八:Eclipse插件Easy Explore的今世

    先说明一下easyexplore插件的功能,easyexplore是一个类似于 Windows Explorer的Eclipse插件,它可以帮助你在不退出Eclipse的环境下迅速浏览本地文件系统. ...