从播放列表在特定时间位置播放每个曲目

问题描述

我希望用户能够从上次暂停或停止播放的位置继续播放。我将用户密钥保存到cookie中,并将选定的曲目和经过的时间存储到db中。然后,在播放激活的歌曲之前,应将当前时间设置为检索到的经过时间:

即。用户最近不喜欢这两首歌

song1.mp3n,在2秒后停止

song3.mp3在100秒处停止

我发现了一些信息。 Play song at specific time position from a playlist

我想到了以下代码

$jplay= <<<EOD
var jp = $('#jquery_jplayer_1pl');
jp.on($.jplayer.event.setmedia,function(e){
    // For first track (0) - 2 sec,second track (1) - 3 sec,etc.
    //var time = myPlaylist.current + {$time_elapsed};
    var time = {$time_elapsed};

    // Jump to desired time
    setTimeout(function(){ 
       jp.jplayer( "play",time); 
    },100);
});
EOD;

但是,这仅适用于单播放器版本,除非可以激活或自动播放用户列表尾的最后一首曲目。否则,每首歌曲都在同一时间弹奏。

因此,我认为我可以使用“ myPlaylist.play(0);”或“ myPlaylist.play(2);”,但我找不到具体方法

更准确地说,当我激活它们时,我想在不同的经过时间位置开始几首曲目。

谢谢。

解决方法

为使此功能适用于jplayer的播放列表播放器版本,几天后,我自己找到了以下基于jquery和ajax的解决方案。

$("#jquery_jplayer_1pl").bind($.jPlayer.event.setmedia,function(event) {

    $.ajax({
        type: "GET",url: 'media-progress-ajax-funcs1.php',data: {
            guid: myPlaylist.playlist[myPlaylist.current].mp3,bkmk_key: '<?php echo $bkmk_key; ?>',},contentType: "application/json; charset=utf-8",dataType: "json",success: function(response) {
            playtrack(response['timeElapsed']);
        }
    });
});

function playtrack(elapsed) {
    if (elapsed) {
        var jp = $('#jquery_jplayer_1pl');
        var time = parseInt(elapsed);
        // Jump to desired time
        setTimeout(function(){ 
           jp.jPlayer( "pause",time);
        },100);
    }
}

说明:

        data: {
            guid: myPlaylist.playlist[myPlaylist.current].mp3,}

变量bkmk_key是从cookie派生的,对于特定用户而言是唯一的。 Ajax函数脚本'media-progress-ajax-funcs1.php'正在搜索用户键和用户在特定时间(从event.jPlayer.status.currentTime经过的时间)后暂停的相应媒体文件名(guid),并返回如果设置了媒体,则经过的时间值(event:setmedia)。通过从最新位置单击“播放”开始播放,因此用户无需搜索。

我没有提及暂停播放器后如何获得经过时间并将其存储到数据库中。如果您对我的代码的这一部分感兴趣,则必须询问。

我希望有人能对此有所帮助。