原文:与众不同 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. ubuntu apt-get 遇到的问题

    装软件的时候总是提示dpkg: warning: files list file for package `*****' missing, assuming package has no files ...

  2. 更换Winform 皮肤(下)----完全GDI+绘制

    skin皮肤和DLL程序及文件:下载 链接:http://www.cnblogs.com/DebugLZQ/archive/2013/04/15/3021659.html

  3. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) ( 莫队 )

    莫队..先按sqrt(n)分块, 然后按块的顺序对询问排序, 同块就按右端点排序. 然后就按排序后的顺序暴力求解即可. 时间复杂度O(n1.5) --------------------------- ...

  4. Java正则表达式基本应用

    一.概述 正则表达式因为其强大的字符串处理能力,刚开始被被广泛地应用到各种UNIX工具中,如大家熟知的 Perl脚本语言 .后来正则表达式在各种 计算机语言 和各种应用领域得到了广泛的应用和发展,目前 ...

  5. 获取操作系统版本Asp.Net

    /// <summary> /// 获取操作系统版本号 /// </summary> /// <returns></returns> public st ...

  6. 《C语言深度解剖》面试题整理

    请在40分钟内完成以下20道C语言基础题.在没有任何提示的情况下,如果能得满分,那么你可以扔掉本书了,你的水平已经大大超过了作者:如果能的80分以上,说明你的C语言基础还不错,学习本书可能会比较轻松: ...

  7. ajax异步请求实例

    1. 问题分析 用户管理显示页面:usermanagement.tpl(也可以说是MVC中的V,即视图) 用户管理数据发送页面:usermanagement.php(也可以说是MVC中的M,即模型) ...

  8. Hbiernate关联排序问题

    使用场景: 假设有两张表请求信息.账户表,它们之间是一对多的关系.对应的java类分别为Sfcx_RequestInfo和Sfcx_Zhxx.Sfcx_RequestInfo有一个Set属性 sfcx ...

  9. 基于visual Studio2013解决面试题之1409基数排序

     题目

  10. SharePoint 2013 &quot;通知我&quot;简单的功能

    简单的功能 "通知我"内部列表或文档库中的主要项目.加入/删除/修改等操作,用户的E- mail通知设定功能:设置列表或文档库通知的能力,有可能设置通知为一个单一的项目.这是Sha ...