Windows Phone background Audio 后台音频

Windows Phone 后台音频的确不是什么新鲜的话题了,但发现目前在WP平台的音频播放应用多多少少会有一些瑕疵,所以在此给大家在此介绍下这个功能给有需要的朋友们。

升级到WP8必需知道的13个特性 系列文章目录地址:http://www.linuxidc.com/Linux/2013-08/89003.htm

首先介绍下我们的应用在后台播放的机制 – BackgroundAgent.

在支持后台音频的应用中为了避免混淆,前台后台播放器我们可以理解使用的都是系统核心提供的一个 BackgroundAudioPlayer 来进行播放不论应用是在前台还是后台, 或者也可以理解成它是系统播放控件的一个单件模式.

另外在后台操作音乐播放使用的是系统提供的 Universal Volume Control(UVC), 在开发时候要处理好BackgroundAgent相关逻辑否则会造成,播放停断的情况。

后台播放音乐的应用程序分两种

1. 将目标文件的Uri传给 Zune media queue 进行播放,当然文件可以是本地或者网络的,并且文件格式是要WP支持的类型才可以(支持 Windows Phone 媒体编解码器)

2. 实现一个 MediaStreamSource 的音频传输接口来提供任意格式的,同时也可以更好的包含文件的版权安全。

image

AudioPlayerAgent 由系统实例化,正如我之前说的更像是一个系统播放器的单例,实际上后台播放要继承 AudioPlayerAgent 另外开发者需要自己实现其中的三个虚方法

OnUserAction(BackgroundAudioPlayer, AudioTrack, UserAction, Object)OnPlayStateChanged(BackgroundAudioPlayer, AudioTrack, PlayState)OnError(BackgroundAudioPlayer, AudioTrack, Exception, Boolean) 用来处理在应用中和后台的音乐切换工作。

image

image

 

另外就是刚才说到的 实现 MediaStreamSource 音频流处理的音乐播放应用.

image

在这里我们的音乐显然不是来自一个本地或者远程的URL而是来自我们的 AudioStreamingAgent 通过实现 OnBeginStreaming(AudioTrack, AudioStreamer) 虚方法的 AudioStreamer实例上调用 SetSource(MediaStreamSource) 来作用 Zune media queue 进行播放。

image

在这里 您的 AudioStreamingAgent 是由 BackgroundAudioPlayer 自动调用实现的。创建代理之后,BackgroundAudioPlayer 在 AudioStreamingAgent 中调用 OnBeginStreaming(AudioTrack, AudioStreamer) 方法。这一切都是由系统自动调用 无需开发者代码干预。

 

注:

AudioPlayerAgent 的实现必须在 30 秒内调用 NotifyComplete() 或 Abort()。

AudioStreamingAgent 的实现则允许无限时运行。

两种类型的后台音频代理都托管在同一进程中,并且共用最大限制为 15 MB 的内存。

换句话说如果你的