专注于WEB前端开发, 追求更好的用户体验, 更好的开发体验 [长沙前端QQ群:234746733]

Kplayer 1.2.2 发布

Kplayer简介:一款MP3播放器,支持单曲、列表播放,自动记录播放位置,刷新页面可接着上次位置继续播放。代码用as3制作,UI部分全部是用代码画出来的,没有用到一点flash导出的素材。界面仿照Chrome的HTML5播放器界面,差不多类似HTML5的audio标签。还可以配合HTML5标签一起使用。

功能列表:

  • 1、自动记录播放歌曲的位置,即使刷新页面也会接着继续播放(并且,比如在firefox下播放,然后关闭页面,再用IE或其他浏览器打开,还会接着播放,这个记录是跨浏览器的)。
  • 2、不仅支持播放单曲,还支持播放json或xml格式的歌曲列表。
  • 3、可定义json/xml列表的路径。
  • 4、支持单曲循环、歌曲列表循环播放。
  • 5、可自定义从歌曲列表的第几首开始播放。
  • 6、歌曲加载错误会自动切换下一首,xml/json格式错误、加载错误会提示。
  • 7、可自定义默认的播放音量,可拖动、点击、滚轮控制音量。
  • 8、歌曲播放进度(在已加载的范围内)可拖动或点击控制。
  • 9、可显示歌手、歌曲名称。
  • 10、键盘控制:暂停、继续播放、上一首、下一首、快进、快退、音量调节。
  • 类似:暂停、继续播放、切换静音、加载进度条这些普遍的就不详细列出了。

update log:

2011-07-26: 更新版本号为1.2.2
fix:修复储存播放信息的判断,之前的不严格会导致记录冲突
fix:如果歌曲列表的歌曲地址全部失效(播放器没有1首歌可以正常播放),提示加载歌曲失败,并停止播放和记录。
fix:增加一个极少数情况发生的歌曲加载失败的判断
fix:一些操作如果不影响记录结果,就暂停自动记录,减少资源占用。
add:新增参数:record,为0就不自动记录播放位置
是否开启自动记录就看个人需求吧,我测试同时播放3个(每个都自动记录),内存变化不大,cpu使用和那些视频门户播放1个视频时差不多,此时应该算很正常了。所以如果一个页插入多个播放器一起播放(每个都开启自动记录),就控制在3-4个左右吧,这样应该没啥问题。Ps:同页面多个播放器千万不可把name参数的值都设置成一样的,例子可看下面参数列表的说明。
add:鼠标移到按钮上显示提示按钮功能
add:焦点在播放器上时,Tab键显示快捷键提示
Note:不使用Tab键切换按钮焦点的原因:
1、flash里的元素获得焦点后,默认空格、回车都会触发焦点的事件,所以会与播放器产生冲突:
静音按钮获得焦点时,按空格即触发了静音按钮,也触发了暂停/播放按钮;音量滑块获得焦点,焦点会跳到其他按钮(因为按上下左右键会触发改变焦点)。
2、如果是flex做的表单,tab切换是有必要的,就播放器来说tab切换焦点来控制意义不大(已经做了键盘绑定和鼠标提示)。
3、为了满足用tab切换的同学,tab被改成了快捷键的帮助。采用这个折中的办法,我想是最好的解决方案。如果要tab让按钮获得焦点并高亮,不仅要对每个按钮加上focus事件的侦听,还要解决焦点冲突,增加的代码太多了。

2011-07-22: 更新版本号为1.2.1
加入键盘控制快进、快退,代码部分发现了几处可以优化的地方,优化了下。

2011-07-20: 更新版本号为1.2
fix: 修复当拖动音量到0,再点击静音按钮时的切换(改为初始音量)
fix: 播放上一首没加载完,切换下一首有时出现的拖动问题
fix: 重载页面时,播放进度条位置和播放时间没有对应记录的播放位置
add: 键盘控制: 暂停(空格键)、继续播放(空格键)、上一首(ctrl+Left)、下一首(ctrl+Right)、快进(Right)、快退(Left)、音量调节(Up,Down)

2011-06-22: 因为之前做了个基础版了,这次做了些重构,加了些功能,版本定位1.1吧,功能应该足够用了。

演示:(播放歌曲并刷新页面试试。。)

下载:http://pan.baidu.com/share/link?shareid=284648&uk=3338835672
1.2.2演示:https://xhl.me/demo/KPlayer/

参数列表:

name - 储存序列id,比如:name=1、name=yoursite.com、name=yourName,name=123abc。
目的是为了和其他使用本播放器的站点区别开,否则用户在其他站点播放记录会在你的站点生效,同样你站点也会影响其他人。
如果你把播放器放在博客,而博客的每篇文章都添加一首歌曲,那么建议你这样设置:name=yoursite123(123为文章ID),这样就可每条单独记录,互不影响。

autoplay - 自动播放: 1-自动(默认);0-点击播放
loop - 循环: 0-顺序播放,放完列表停止(默认);1-单曲循环;2-全部循环
start - 从列表的第N(N=N-1)个开始播放(比如,想默认播放第3首: start=2),默认从第1个开始播放,即:start=0
vol - 默认音量: 0-100的整数(默认80)

src - MP3文件的网址
title - 歌曲名称
* 如果设置了上面两项,将不会加载json/xml格式的播放列表。此时即是单曲播放(相当于json/xml列表里面只有1首歌)。

json - json列表的路径,比如: /music/json.txt,json.php,/json.xx,这些可以自己diy了。
xml - xml列表的路径,同样也可以diy。
说明:diy路径、文件名,或者可选择json或xml格式,这个是为了通用性,自己爱用啥用啥。
xml或json只能用一种就OK了,不要同时搞两个列表,你懂的。
另外:如果json、xml都没设置,默认会读取swf同文件夹内的XML格式文件:songs.xml

XML/JSON列表的格式我就不粘代码了,下面两个:
XML列表例子:https://xhl.me/demo/KPlayer/songs.xml
json列表列子:https://xhl.me/demo/KPlayer/songs.txt
查看源文件就看到代码了。

不常用的参数:
preload - 点击才播放时(autoplay=0),是否预加载音频文件: 1-自动(默认);0-点击播放才开始加载
clear - 清空客户端已保存的记录(记录的信息:是否自动播放、MP3播放位置、MP3是第几首、用户设置的音量),以swf的参数为准。此项一般无需设置。
record - 是否自动记录播放位置: 0-关闭自动记录(同时会触发清空记录clear=1);1-开启(默认)。此项一般无需设置。如果关闭自动记录可减少播放器的资源占用,但是不能记录播放位置。

引入方法:

方法1,使用swfobject:

<script src="swfobject.js"></script>
<div id="kpContent"><a href="http://www.adobe.com/go/getflashplayer">Get Flash player</a></div>
<script>
var vars = {
    name: "yoursite.com",
    json: "songs.txt",
    loop: 2,
    vol: 50
},
pars = {
    menu: "false",
    scale: "noScale",
    allowFullscreen: "true",
    allowScriptAccess: "always",
    bgcolor: "#0F0F0F"
},
attrs = {
    id:"KPlayer"
};
swfobject.embedSWF("KPlayer.swf", "kpContent", "300", "35", "10", "expressInstall.swf", vars, pars, attrs);
</script>

方法2,直接插入:

<script>
document.write('<object width="300" height="35" data="KPlayer.swf?name=yoursite.com&autoplay=0&json=songs.txt&loop=2&vol=50" id="KPlayer" name="KPlayer" type="application/x-shockwave-flash"><param name="movie" value="KPlayer.swf?name=yoursite.com&autoplay=0&json=songs.txt&loop=2&vol=50"><param name="allowFullscreen" value="true"><param name="allowScriptAccess" value="always"><param name="backgroundcolor" value="#0F0F0F"></object>');
</script>

参数实例:

name=yoursite.com&src=http://xx.com/xxx.mp3&title=龙的传人
单曲播放,不需要json或xml的播放列表,适合只分享一首歌的情况。

name=yoursite.com&json=json.txt&loop=2&start=0&vol=70
自动播放json.txt内的第1首歌曲,并重复播放这首歌曲,初始音量为70%

name=yoursite.com&xml=132.xml&loop=2
自动播放132.xml内的所有歌曲,列表播放完毕后,继续循环播放。

name=yoursite.com&autoplay=0&preload=0
点击后才开始加载并播放songs.xml内的所有歌曲,列表播放完毕后,停止播放。

name=yoursite.com&autoplay=0&json=songs.txt&loop=1
读取songs.txt内的json格式列表,点击后第1首循环播放。

可以配合HTML5标签一起使用
<audio controls autoplay preload>
<source src="song1.mp3" />
<source src="song2.mp3" />
这里插入FLASH播放器代码,不支持HTML5的浏览器将看到这里
</audio>

PS:目前Safari 5+/Chrome 6+/IE9才支持播放MP3格式,使用audio标签还不大靠谱,而且IE9 HTML5播放器的样子最丑了。

/ 分类: 实践 / TrackBackhttps://xhl.me/archives/kplayer/trackback标签: as3, kplayer

已有 27 条评论 »

  1. jowel jowel

    支持!!好东西啊。

  2. 向晚 向晚 向晚 向晚

    自动记录播放位置,刷新页面可接着上次位置继续播放。
    这个功能很实在!

  3. 晴天 晴天

    问一下能否用键盘控制,比如暂停,继续播放,增加和减小音量,停止,下一首等等。
    或者能否写一个js来控制这些功能。如果可以的话,希望可以做成一个typecho的插件。

    1. kairyou kairyou

      想法不错,忙完这几天,看看可用性如何。

      1. 晴天 晴天

        非常期待,一直用键盘,表示感谢哦。

        1. kairyou kairyou

          功能都加上了,抱歉最近业余时间很少,TE的插件没时间搞了。这个做成插件(需要考虑编辑器),直接复制播放器的代码到文章里也不算麻烦吧,可以去TE论坛发个帖子让有时间的同学搞个吧。

  4. Lok Lok

    这个不错。
    刷新还能接着放!

  5. IT P民 IT P民

    看了楼主的博文,佩服ing,在前端方面有较深的造诣~~~博客很漂亮啊~~~也很喜欢这个主题。不知道楼主有木有兴趣交换链接。刚做没多久,pr为2,也是一个技术类型的博客,平时随便写写

    1. kairyou kairyou

      你的博客做的不错,链接已经加上

  6. 晴天 晴天

    非常感谢博主,1.2新增的快捷键非常好。还有一个功能可能是漏掉了把,就是快进快退的键盘控制,比如ctrl加左右方向键快进快退。js控制播放器,我想或许用button按钮的onclick配合acceskey,或者用组合键来响应keydown会更好点,应该不会与浏览器本身的功能冲突。

    1. kairyou kairyou

      谢谢你的反馈,你说的加上了,之前考虑过快进的,当时觉得用处不太大。因为提供了js接口,只要发送的callback正确,js那里还是可以随便定义快捷键的,我做的那个演示页的时候,也考虑到了可以用组合键。现在ctrl+right是下一首了,right是快进了,这样用户体验好些。

    2. 晴天 晴天

      非常感谢,我正在尝试移植到tyepcho,利用te原有的播放插件修改,已经初步实现了。

  7. 晴天 晴天

    不好意思,在来打扰一下您。
    1 在播放器内的按钮,比如暂停按钮等,能不能加上文字提示,就好像现在能显示歌曲标题那样。
    2 当焦点在播放器控件内的时候,能不能实现支持tab在播放器的按钮之间切换。
    现在已经非常不错了,就我见过的flash播放器来说这是最无障碍的一个了。

    1. kairyou kairyou

      @晴天
      谢谢你的意见,用户体验越来越好了。文字提示已加上,至于焦点我写了代码测试了,会产生诡异的问题,并且加的代码比较多。我使用了个折中的办法,文章的更新说明里面我提到了。
      另外看到你发布插件了,恭喜你发布了TE插件。

添加新评论 »