专注于前端开发, 追求更好的用户体验, 更好的开发体验 [长沙前端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. 晴天 晴天

    我用的win7sp1,ie8,偶尔会出现ie停止工作,不知是否kplayer的问题呢?
    我的typecho演示:http://www.qt06.tk

    1. kairyou kairyou

      @晴天
      我这里从没遇到过停止工作。看了你的代码,应该是因为你把每个播放器的name都设置成一样的原因。还有最好不要几个播放器同时播放,可设置默认暂停。更新里面我也加上说明了。
      提示xml加载失败的你也解决了吧,如果参数错误会读取xml,而xml也不存在,就会有这个提示了~

  2. 晴天 晴天

    升级到1.2.2,似乎有一些小的问题,现在不确定是怎么引起的,有可能与读屏软件有关。首先现在tab很容易卡在flash里而无法跳出来。之前的办版本没有该问题
    另外现在没有办法找到flash里的按钮了,以前tab偶尔能切换到他们;用读屏的模拟鼠标也能切换到比如歌名、播放进度等,现在已经切换不到了。

    1. kairyou kairyou

      ie下,设置object的SeamlessTabbing: "false",tab就会在flash里,既然加了快捷键,tab在flash内就没什么用了,还会和快捷键冲突。有时间我再更新个版本吧,试试支持tab、并解决tab和快捷键的冲突。

      1. 晴天 晴天

        非常感谢。不知你是否用QQ,方便的话跟你直接交流一下tab在flash里卡住的问题。我的QQ是115928478

  3. 泪水 泪水

    发现bug,当点击MP3未加载的地方,会出现,音频卡掉。、

    1. kairyou kairyou

      @泪水
      额,这个不算bug了,因为点击未加载的地方是想播放到这里,但是MP3还没加载到这,这时只能跳到已经加载的最后面,就会出现你说的情况了。

      1. 泪水 泪水

        嗯,也是,但是应该处理下喔,当点击未加载音频的地方,应该屏蔽用户点击并定位那个帧频为当前的位置。

  4. 泪水 泪水

    楼主是否发现在IE9下,不能显示flash.

  5. 泪水 泪水

    晕了,是我自己的问题,IE竟然没装flash插件。。。冷汗。。

    1. kairyou kairyou

      抱歉,业余时间比较少,目前收集的bug也不太影响使用,所以只能以后更新了,具体我也不确定什么时候能有充裕的时间,我也希望这个播放器能够尽善尽美。

  6. mao mao

    额 无法下载

    1. kairyou kairyou

      @mao
      那个到期了, 直接下载这个文章里的swf吧.

添加新评论 »