2014-09-10 3 views
0

Я работаю с аудиоплеер HTML5. Я реализую плейлист. Я использую действие «закончено» для воспроизведения следующего аудиофайла. Но, в конце медиафайла, событие «закончился» запускается более одного раза. (. Поскольку сообщение я вхожу появляется более одного раза)HTML5 AudioPlayer Событие Действие «Завершено» вызывает больше одного раза

Это мой слушатель событий:

//Event Listener 
function addPlayerListener() { 
    console.log("Recording Index: "+combinedSessionIndex); 

    var audio = document.getElementById("playarea"); 
    audio.addEventListener('ended', function() { 

     sessionsToPlay = $("#audio_files").val().split(','); 

     console.log ("In Recording End Event Listener...!!!"+combinedSessionIndex); 
     //It Shows Length '1' not '0' 
     if (sessionsToPlay.length == 1) { 
      console.log("Returned Due to Session To Play length..!!!") 
      return; 
     } 

     //As CombinedSessionIndex Starts with 1 
     if (combinedSessionIndex == sessionsToPlay.length) { 
      console.log("Returned Due to All Session To Play Got Finish..!!!") 
      $("#audio_files").val(""); 
      sessionsToPlay = []; 
      combinedSessionIndex = 0; 
      return; 
     } 

     var filePath = '${properties["RECORDED_SESSION_RETREIVAL_PATH"]}'; 
     filePath = filePath + sessionsToPlay[combinedSessionIndex] + ".mp4"; 
     combinedSessionIndex++;  
     audio.src = filePath; 
     audio.play(); 
    }, false); 
} 

Таким образом, когда заканчивается конкретный медиа-файл, он пропустит следующий медиа-файлы и начать играть в следующем (после пропуская 1,2) файл. Для каждого пропущенного медиафайла элемент управления приходит в прослушиватель событий, который показывает, что прослушиватель событий повторно вызывает вызов, когда заканчивается один вызов.

В первый раз, когда я играть аудиофайл этого код:

//PlayBack Session 
function play(data) { 

    //Just to deal with a scenario that when we play a combined session and in the mean while we start listening any other single 
    //session, then after completion of this single session, remaining previous combined session should not resume. 
    //console.log("Re-setting Player ...!!!"); 
    //$("#audio_files").val(""); 
    //sessionsToPlay = []; 
    //combinedSessionIndex = 0; 

    var filePath = '${properties["RECORDED_SESSION_RETREIVAL_PATH"]}'; 
    filePath = filePath + data + ".mp4"; 
    console.log("filePath: " + filePath); 
    if (data == null || data == "") { 
     alert("Nothing to Play ...!!!"); 
     return; 
    } 
    $("#playarea").attr({ 
     "src": filePath, 
     "autoplay": "autoplay" 
    }) 
} 

И после этого, когда это закончится, дополнительные клипы играли с помощью «бессрочный» события слушателя.

Я не могу найти причину этого. Пожалуйста, направляйте меня, если я делаю что-то неправильно?

Спасибо заранее:

+0

Если вы изменили обработчик событий на одну строку кода, которая вызывает 'console.log ('ENDED event handled');' и удалить все остальные коды, вы все равно получаете несколько событий? Мне интересно, что что-то, что вы делаете внутри обработчика событий, вызывает новое завершенное событие, например, если аудиофайл не был найден или был невероятно коротким или какой-либо другой подобной проблемой? – Fenton

+0

Но код для воспроизведения следующего медиафайла останется там? –

+0

Отнесите это сейчас, потому что мы хотим проверить, если вы получаете несколько событий без какого-либо из этого кода. – Fenton

ответ

0

Ahh My bad. Я часто регистрировал один и тот же прослушиватель событий «Ended» (каждый раз, когда пользователь нажимает кнопку «Play», в то время как он должен быть только один раз). Вот почему я получал «завершенные» события более одного раза. Он фактически генерирует действие «Завершено» для количества раз, когда я регистрирую событие «Закончено».

Не думаете ли вы, что это следует рассматривать только один раз? Потому что наша цель только получает уведомление, когда медиа-файл заканчивается. Нет никакой логики уведомления несколько раз, хотя мы регистрируемся несколько раз.

Смежные вопросы