2015-04-11 4 views
1

Я использую mediaelement player, и я хочу динамически установить текущее время (откуда начинается песня).Почему я получаю бесконечный цикл для этого кода?

Если я это сделать, как это работает отлично:

mediaElement.setCurrentTime(22); 

(так песня начнется со второго 22-го).

Если я хочу, чтобы динамически установить начало от, как:

var cur_time = new Date().getTime(); 
var songToStartFrom = (cur_time - song.startTime)/(1000); 
mediaElement.setCurrentTime(songToStartFrom); 

его вдаваясь в бесконечный цикл. (Я очень уверен, что songToStartFrom прекрасен за считанные секунды)

Я просто не понимаю, почему он работает для статических значений, но для динамических нет?

ОБНОВЛЕНИЕ: весь код здесь

player = new MediaElementPlayer('#ui_audio', { 
     features: ['playpause'], 
     audioWidth: 30, 
     audioHeight: 30, 
     success: function (mediaElement, domObject) { 
     // Player is ready 
     mediaElement.addEventListener('canplay', function() { 
      var cur_time = new Date().getTime(); 
      console.log("--current time: " + cur_time); 
      console.log("--song time: " + song.startTime); 
      console.log("--media elem time: " + (cur_time - song.startTime)/(1000)); 
      var songToStartFrom = (cur_time - song.startTime)/(1000); 
      console.log("DURATION: " + mediaElement.duration); 
      mediaElement.setCurrentTime(22); 
      mediaElement.play(); 
     }, false); 
     mediaElement.addEventListener('playing', function() { 

      //pushListenerInfo(); 
     }); 
     mediaElement.addEventListener('pause', function() { 
      //removeListenerInfo(); 
     }); 
     mediaElement.addEventListener('ended', function() { 
      //removeListenerInfo(); 
     }); 
     } 
    }); 

Пример бесконечного выхода:

listen-moment.js:31 --current time: 1428777176774 
listen-moment.js:32 --song time: 1428777166000 
listen-moment.js:33 --media elem time: 10.774 
listen-moment.js:35 DURATION: 29.875625 
listen-moment.js:31 --current time: 1428777176779 
listen-moment.js:32 --song time: 1428777166000 
listen-moment.js:33 --media elem time: 10.779 
listen-moment.js:35 DURATION: 29.875625 
listen-moment.js:31 --current time: 1428777176784 
listen-moment.js:32 --song time: 1428777166000 
listen-moment.js:33 --media elem time: 10.784 
listen-moment.js:35 DURATION: 29.875625 
listen-moment.js:31 --current time: 1428777176788 
listen-moment.js:32 --song time: 1428777166000 
listen-moment.js:33 --media elem time: 10.788 
listen-moment.js:35 DURATION: 29.875625 
listen-moment.js:31 --current time: 1428777176795 
listen-moment.js:32 --song time: 1428777166000 
listen-moment.js:33 --media elem time: 10.795 

Пример конечного выхода (и игрок начинает играть отлично):

--current time: 1428777382847 
listen-moment.js:32 --song time: 1428777376000 
listen-moment.js:33 --media elem time: 6.847 
listen-moment.js:35 DURATION: 29.875625 
+2

Где находится петля? Вы пробовали отладку? –

+0

@IlyaKogan Эти 4 консольные строки печатаются бесконечно, если я заменяю 22 на songToStartFrom. –

+1

Что делает 'console.log (song.startTime);' показывает ???? – Manwal

ответ

0

Правильный код, который будет полезен для других (обратите внимание, что я переместил чувство итеративный код от canplay событие до playing событие.

function startPlaying(song) { 

    console.log("--will play: " + song.name); 

    var tag = '<audio id="ui_audio" src="' + song.location + '" type="audio/mp3"></audio>'; 
    $('#ui_audio_wrapper').html(tag); 

    var curTime = new Date().getTime(); 
    var songToStartFrom = (curTime - song.startTime)/(1000); 

    player = new MediaElementPlayer('#ui_audio', { 
     features: ['playpause'], 
     audioWidth: 30, 
     audioHeight: 30, 
     success: function (mediaElement, domObject) { 
     // Player is ready 
     mediaElement.addEventListener('canplay', function() { 
      mediaElement.play(); 
     }, false); 
     mediaElement.addEventListener('playing', function() { 
      console.log("--current time: " + curTime); 
      console.log("--song time: " + song.startTime); 
      console.log("--media elem time: " + (curTime - song.startTime)/(1000)); 
      console.log("DURATION: " + mediaElement.duration); 
      console.log("--songToStartFrom: " + songToStartFrom); 
      if (songToStartFrom < mediaElement.duration) { 
      mediaElement.setCurrentTime(songToStartFrom); 
      } 
      pushListenerInfo(); 
     }); 
     mediaElement.addEventListener('pause', function() { 
      console.log("--setting current time triggered"); 
      removeListenerInfo(); 
     }); 
     mediaElement.addEventListener('ended', function() { 
      removeListenerInfo(); 
     }); 
     } 
    }); 

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