希望看到这篇文章的开发者能提供你们的想法,让我们一起来探讨一款wp平台上面一款能流畅播放、能流畅拖拽进入条、只发一次请求就可以缓存的最好的播放器。希望大家能对我下面遇到的问题作出回答。
现在出了Windows Phone版本的音乐的主流软件有:
1、多米音乐:这个应该是目前Windows Phone平台国内最好的软件了,不管是从软件的更新进度还是技术上的实现都处于领先地位;因为它使用了AudioPlaybackAgent和AudioStreamAgent结合的技术实现;
2、酷我音乐:酷我只能排第二了,因为他的技术上实现的偷了点懒只使用了AudioPlaybackAgent;
3、豆瓣FM:豆瓣只能说终于出官方版本了,以前有很多个人开发者的版本,从豆瓣FM的设计界面来看投入也不是很大,感觉只是为了发个版本。
4、百度音乐、qq音乐、唱吧:这些都可以滚粗,简直是伤了我们用户的心,百度和qq简直是敷衍了事,哎亏我们每天给他们的千亿市值作贡献,还有就是唱吧,我真不知道说啥 这样的版本也好意思发出来,居然连AudioPlaybackAgent都没使用,意味着你手机锁屏或者按home键他就会播放停止。
还有一些个人开发者开发了些版本:
1、虾米音乐:这个应该是个人开发者里面开发的最好的了,可以和正式版本媲美;作者微博@想要放羊的兔子
2、天天动听:感觉开发者在界面的设计上还要改进,作者微博@小飞飞快飞
下面来说说技术实现,因为我也是第一次调研希望大家多多发表意见:
一般播放的做法:
就是使用AudioPlaybackAgent,这样的话做法很简单只需要将AudioTrack赋值给BackgroundAudioPlayer.Instance.Track就可以了其他的一切善后工作都交给系统了,
这样的做法一个最大的弊端:
1、就是我们在听完歌曲后,不能将歌曲缓存下来,但是不是也不是没有办法,我们可以在歌曲听完再请求一次将歌曲下载缓存在本地,避免下次再重新请求,
因为这样做的话我们的所有权全部就交给系统了,我们只能做两次请求才能将歌曲缓存下来,这就意味着我听一首歌曲的话我就必须请求两次,手机必须走两遍流量,
这样做不是不好,是因为我活在天朝,流量贵呀。再说我们都是负责人的程序员呀,我们要给我们的用户争取福利才是王道呀。
好处就是:
1、实现简单,一般不会出莫名的异常:
2、播放进度条可以随意拖动,反应也快;
然后我觉得高级点的做法就是使用AudioPlaybackAgent和AudioStreamAgent结合的技术实现;
这样实现的原理就是,如果歌曲第一次请求我们在创建AudioTrack的时候我们将source一定要设置为null因为这样它才会进入AudioStreamAgent的OnBeginStreaming,
这样我们就可以在里面使用streamer.SetSource(Mp3MediaStreamSource);这样我们在设置流的时候,将歌曲缓存下来,这样就可以实现我们的只请求一次。如果我们已经
缓存了音乐在本地的话我们只需要使用AudiaoTrack创建实例的时候将本地存储中的url赋值给source就可以在AudioPlaybackAgent播放,这样我们就不需要再去请求了。
不过这样的实现有几个弊端:
1、实现起来比较麻烦,需要用到ManageredMediaHelper
2、最大的问题是我在实现拖动进度条的时候会出现相应很慢的情况,有时候拖动一次需要一两分钟才能反应过来(多米音乐也有这个问题),特别是你往前拖拽了进度条然后再往后拖动,
简直会让你等到心都量了。
3、还有就是有实现你会发现你点击一首歌的时候,会出现不能播放的情况,你也不知道哪里出问题了,反正就是不能播放我跟踪了很久都没有发现,需要重新选择才能播放。
希望看到这篇文章的开发者能提供你们的想法,让我们一起来探讨一款wp平台上面一款能流畅播放、能流畅拖拽、只请求一便流量的wp最好的播放器。希望大家能对我上面遇到的问题作出回答。
关于Windows Phone平台音乐播放的的技术调研的更多相关文章
-
Windows Phone后台音乐播放本地代理实现讨论
前一篇文章讨论的wp平台音乐播放的一些遇到的问题,经过苦思冥想和多方参考安卓实现:发现我们可以考虑一种本地代理的思想来完成我们的边听边存,并且流畅拖动进度条.希望大家一起讨论.可以下载我的代码一同研究 ...
-
c#音乐播放器
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
-
与众不同 windows phone (40) - 8.0 媒体: 音乐中心的新增功能, 图片中心的新增功能, 后台音乐播放的新增功能
[源码下载] 与众不同 windows phone (40) - 8.0 媒体: 音乐中心的新增功能, 图片中心的新增功能, 后台音乐播放的新增功能 作者:webabcd 介绍与众不同 windows ...
-
C# 里窗体里(windows form)怎么播放音乐
在.NET的winform里面,没有托管的音乐播放器,API只能播放WAV格式,对于MP3等形式的音频文件,就要依赖于 MediaPlayer里,嘿嘿 使用的方法: 在toolbox上点右键,选择“选 ...
-
与众不同 windows phone (14) - Media(媒体)之音频播放器, 视频播放器, 与 Windows Phone 的音乐和视频中心集成
原文:与众不同 windows phone (14) - Media(媒体)之音频播放器, 视频播放器, 与 Windows Phone 的音乐和视频中心集成 [索引页][源码下载] 与众不同 win ...
-
Python调用Windows API函数编写录音机和音乐播放器
功能描述: 1)使用tkinter设计程序界面: 2)调用Windows API函数实现录音机和音乐播放器. . 参考代码: 运行界面:
-
小菜学习Winform(二)WMPLib实现音乐播放器
前言 现在网上有很多的音乐播放器,但好像都不是.net平台做的,在.net中实现音乐文件的播放功能很简单,下面就简单实现下. SoundPlayer类 在.net提供了音乐文件的类:SoundPlay ...
-
网页播放音频、视频文件——基于web的html 5的音乐播放器(转载)
文章转载自:开源中国社区 [http://www.oschina.net] 想通过手机客户端(支持 Android.iPhone 和 Windows Phone)访问开源中国:请点这里 HTML5 是 ...
-
Android音乐播放器的设计与实现
目录 应用开发技术及开发平台介绍 应用需求分析 应用功能设计及其描述 应用UI展示 一.应用开发技术及平台介绍 ①开发技术: 本系统是采用面向对象的软件开发方法,基于Android studio开发平 ...
随机推荐
-
Java Garbage Collection/垃圾收集 策略查看
Java 的垃圾收集有各种各样的策略,默认的策略也会经常的改变. --比如到底是 serial , parallel, CMS; 具体到 Minor 怎么样,Old 又怎么样? 命令 java -XX ...
-
ubuntu中一些软件的命令安装及设置
ssh: sudo apt-get install openssh-server sudo apt-get install openssh-client
-
Helpers\URL
Helpers\URL The URL class is used for having handy methods or redirecting the page and returning the ...
-
【Linux安全】系统资源监控与进程终止
linux系统允许多用户同时操作,当用户量非常大且占用系统资源非常严重的时候, 管理员想要分析一下资源的占用情况,而在linux中有没有类似于windows系统的 资源管理器一样的工具呢,答案是肯定的 ...
-
2、每日复习点--ConcurrentHashMap vs HashMap vs HashTable
HashMap:允许键或者值为null.底层是基于数组+链表的结构.默认初始容量是16,默认加载因子是0.75F,默认扩容增加一倍.如果指定了初始容量n,n必然在(2x,2x+1]范围内,n经过运算所 ...
-
在Springboot2.0项目中使用Druid配置多数据源
在Springboot出现之前配置数据源以及相关的事物,缓存等内容一直是个繁琐的工作,但是Springboot出现后这些基本都可以靠默认配置搞定,就变得很轻松了.这就是现在推崇模板>配置的原因, ...
-
substring_index 用法
substring_index http://blog.csdn.net/wolinxuebin/article/details/7845917 1.substring_index(str,delim ...
-
C++/C中的struct和typedef struct用法和区别
struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...
-
java中被遗忘的native关键字
我是无意间看见JNI( java调用动态链接库dll )这块的东西. 所有记下来:本地声明方法 装载完成dll文件后,将使用的方法用native关键字声明. public native static ...
-
$.data(elem, key, val) 和 elem.data(key, val)
var div1 = $("div"), div2 = $("div"); 1. div1.data("key", &quo ...