我使用mediaelement.js API播放mp3文件。我有一个歌曲列表,当我选择一个时,我执行以下代码:
media_element.setSrc(media_url);
media_element.load();
media_element.play();
一切正常:我有一个收听进度值的听众:
media.addEventListener('progress', function(e){
var progress = player_get_progress(e,media);
console.log(progress); //trace 0,01 ... 0,02, ... 0,56 ... 1 !
});
我使用此进度值来设置html div的宽度(表示缓冲进度)
然而,当我点击另一首歌曲,并且第一首歌曲尚未完成加载时,第二首歌曲开始加载,我得到两个进度值:
示例:
歌曲1 =>点击=>进度:0,1; 0,2; 0; 3 歌曲2 =>单击(并且歌曲1未完全加载)=>进展:0,4; 0,1; 0,5; 0,2; 0,6; 0,3 ......等
许多歌曲平行加载也会发生同样的事情。我在加载一首新歌之前试图做一个media.stop(),但这会导致动作脚本崩溃......
下面我试过的代码:
function play_media(media_url)
{
if(!media_element.paused)
{
media_element.pause();
//media_element.stop(); //crashing line
}
media_element.setSrc(media_url);
media_element.load();
media_element.play();
}
如果您想知道此功能的作用:
player_get_progress(e,media);
我从mediaelement-and-player.js文件中复制/粘贴代码,函数:setProgressRail 此功能除了从内置的html媒体播放器设置进度条宽度
之外所以...我做错了什么或者是否有一个动作脚本代码的错误,当一个新的加载时它不会停止加载歌曲???
希望你能帮忙:)。- 编辑 -
阅读完flash源文件后,我想我发现了错误:
在“AudioElement.as”第152行:
_sound.addEventListener(ProgressEvent.PROGRESS,progressHandler);
该行应为:
_sound.addEventListener(ProgressEvent.PROGRESS,progressHandler, false, 0, true);
为了使用弱引用。实际上,现在,事件处理程序(progressHandler)没有使用弱引用...所以当调用新的“media_element.load”时它不是“垃圾收集”...(media_element.load正在创建一个新的_sound对象)
希望这可以提供帮助;)