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

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

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

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

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

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

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

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

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

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

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

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

注:

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

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

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

换句话说如果你的音频文件是在网络上最好的做法是 AudioStreamingAgent 这样既可以保证音乐的版权问题也可以解决网络延时造成的播放问题。

下面提供一些详细的学习资料和示例代码:

a)    Windows Phone 的后台音频概述 : http://msdn.microsoft.com/zh-cn/library/hh394039(v=vs.92).aspx
b)    如何播放 Windows Phone 的后台音频: http://msdn.microsoft.com/zh-cn/library/hh202978(v=vs.92).aspx
c)    代码示例: http://msdn.microsoft.com/zh-cn/library/ff431744(v=vs.92).aspx

代码中设置URL的方法参数是需要Uri类型的如果你想实现 URL streaming 需要设置成Absolute或RelativeOrAbsolute.

希望上的总结可以帮助到大家, 同时欢迎大家在这里和我沟通交流或者在新浪微博上 @王博_Nick

Windows Phone background Audio 后台音频的更多相关文章

  1. Windows 10 后台音频

    UWP版本的网易云音乐已经上架,虽然还不支持Windows Phone但是整体而言功能已经比较齐全了! 那么如何在Windows 10 UWP实现后台播放呢? 我之前是一直在做Windows Phon ...

  2. 例子:Background Audio Streamer Sample

    The Background Audio Streamer sample demonstrates how to create an app that uses a MediaStreamSource ...

  3. uwp 之后台音频

    C# code 后台任务 ---------------------------- public sealed class BgTask : IBackgroundTask { #region 私有字 ...

  4. [Z] Windows 8/10 audio编程

    都是些网上搜到的比较不错的文章.关于这块儿的内容网上帖子不多.出去下面列的最主要的还有参考MSDN. WASAPI使用介绍: https://blogs.windows.com/buildingapp ...

  5. 背水一战 Windows 10 (120) - 后台任务: 后台上传任务

    [源码下载] 背水一战 Windows 10 (120) - 后台任务: 后台上传任务 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 后台上传任务 示例演示 uwp 的后台上 ...

  6. 背水一战 Windows 10 (119) - 后台任务: 后台下载任务(任务分组,组完成后触发后台任务)

    [源码下载] 背水一战 Windows 10 (119) - 后台任务: 后台下载任务(任务分组,组完成后触发后台任务) 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 后台下 ...

  7. 背水一战 Windows 10 (118) - 后台任务: 后台下载任务(任务分组,并行或串行执行,组完成后通知)

    [源码下载] 背水一战 Windows 10 (118) - 后台任务: 后台下载任务(任务分组,并行或串行执行,组完成后通知) 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 ...

  8. 背水一战 Windows 10 (117) - 后台任务: 后台下载任务

    [源码下载] 背水一战 Windows 10 (117) - 后台任务: 后台下载任务 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 后台下载任务 示例演示 uwp 的后台下 ...

  9. h5 audio播放音频文件

    h5 audio播放音频文件 注:下面html中样式及不相关的内容去掉了 第一个例子 播放没有防盗链的外网音频文件是可以的 <!doctype html> <html> < ...

随机推荐

  1. 使用纯注解与配置类开发springMVC项目,去掉xml配置

    最近拜读了杨开振老师的书,深入浅出springBoot2.x,挖掘了很多以前被忽略的知识, 开发一年多,工作中一直用传统springmvc的开发,基本都还是用的传统的xml配置开发, 看到书里有提到, ...

  2. ARM Linux 3.x的设备树(Device Tree)【转】

    转自:http://blog.csdn.net/21cnbao/article/details/8457546 宋宝华 Barry Song <21cnbao@gmail.com> 1.  ...

  3. 2018Java开发面经(持续更新)

    不要给自己挖坑!!!不要给自己挖坑!!!不要给自己挖坑!!!如果面试官只是问你了解xxx吗,如果不是很了解,就直接说不知道,不要说知道,不然面试官深问再不知道就印象很不好! 处女面送给了头条(北京)日 ...

  4. sicily 1215. 脱离地牢

    Description 在一个神秘的国度里,年轻的王子Paris与美丽的公主Helen在一起过着幸福的生活.他们都随身带有一块带磁性的阴阳魔法石,身居地狱的魔王Satan早就想得到这两块石头了,只要把 ...

  5. Flask小demo---代码统计系统

    功能要求: 管理员登录 # 第一天 班级管理 # 第一天 学生管理 # 第一天 学生登录 上传代码(zip文件和.py文件) 查看个人提交记录列表 highchar统计 学生列表上方使用柱状图展示现班 ...

  6. RobotCraft 2017 第二届国际机器人学暑期学校 2nd Edition of International Robotics Summer School

    原文网址:http://www.ros.org/news/2017/02/2nd-edition-of-international-robotics-summer-school-robotcraft- ...

  7. jquery中获取iframe的id的方法:

    jquery中获取iframe的id的方法: var frameId = window.frameElement && window.frameElement.id || ''; al ...

  8. 安装部署Apache Hadoop (完全分布式模式并且实现NameNode HA和ResourceManager HA)

    本节内容: 环境规划 配置集群各节点hosts文件 安装JDK1.7 安装依赖包ssh和rsync 各节点时间同步 安装Zookeeper集群 添加Hadoop运行用户 配置主节点登录自己和其他节点不 ...

  9. day7面向对象--进阶

    静态方法(@staticmethod)     通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里 ...

  10. swftools中的pdf2swf转换Error overflow ID 65535 解决办法

    近几日因为项目需要在线转换pdf到swf实现电子期刊阅读,用到了这个工具,版本是:swftools-0.9.2.tar.gz 当然也遇到了很头疼的问题,那就是在转换pdf中色彩图形比较复杂的页时会抛出 ...