MediaElement.js:保持从先前加载的媒体调度进度事件

时间:2011-12-21 10:41:21

标签: mediaelement.js

我使用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对象)

希望这可以提供帮助;)

0 个答案:

没有答案