audio.play() html таг не се възпроизвежда в chrome

Изправен съм пред проблем, докато възпроизвеждам аудио в chrome, когато audio.src не се извиква преди повикване за възпроизвеждане. Firefox обаче го възпроизвежда добре. Моля, някой може ли да предложи? По-долу е връзката към цигулката -

http://jsfiddle.net/vn215r2d/1/

Можете също да намерите кода тук -

<html>
   <head>
      <script language="javascript">      
          var audioo = document.createElement("audio");

          function newCall() {        
              audioo.src = "";
              audioo.src = "http://xx.xx.xx.xx:8181/api/captcha/sound";
              audioo.play();               
          } 

          function playAgain() {               
               audioo.play(); // doesn't work in chrome :(
          } 

      </script>
   </head>
   <body>
   <button type="button" onClick="newCall()">New Captcha Call</button>
   <br>
   <button type="button" onClick="playAgain()">Replay Captcha</button>   
</body>
</html>

person user3137592    schedule 24.10.2014    source източник
comment
Опитахте ли да нулирате аудио позицията? audioo.currentTime = 0; и след това audioo.play()?   -  person somethinghere    schedule 24.10.2014
comment
опитайте да използвате събитие за зареждане на аудио елемент.   -  person theinvisible    schedule 24.10.2014
comment
работи за мен на OsX Chrome v38.0   -  person Kaiido    schedule 24.10.2014
comment
@somethinghere - .curentTime не работи. Опитвал съм това?   -  person user3137592    schedule 24.10.2014
comment
@user3137592 Моля, проверете отговора ми по-долу. Тествах го и работи, въпреки че първо трябва да се зареди аудиото. Ще променя отговора си, за да ви помогна да откриете това.   -  person somethinghere    schedule 24.10.2014
comment
@theinvisible - атрибутът src се попълва с URL адрес на уеб услуга. Така че, когато извикам audio.load(), той основно прави ново аудио повикване, което не е това, което се изисква тук. Искам audioo.play() просто да възпроизвежда това, което е получено при последното повикване, а не да прави ново повикване. Това работи добре на firefox.   -  person user3137592    schedule 24.10.2014
comment
@user3137592 Проверете актуализирания отговор по-долу. Тествах и работи. Използвайте newCall() само за да промените своя src. Той ще се възпроизведе веднага щом е готов и ще провери дали аудиото е заредено.   -  person somethinghere    schedule 24.10.2014
comment
Благодаря, че ми помогна. Току-що отговорих на вашия коментар, моля, проверете.   -  person user3137592    schedule 24.10.2014


Отговори (1)


Актуализация

О, уау, очевидно се свежда до това, че audio.currentTime не може да се записва, докато не пренапишете src. Ето какво можете да направите и то работи:

function newCall() {  
    audioo.src = "http://xx.xx.xx.xx:8181/api/captcha/sound";
    // make all audio attributes writeable again by resetting the src
    audioo.src = audio.src;             
} 

Отговорът отне малко гугъл, но го получих от тук: https://stackoverflow.com/a/14850353

Оригинален

Тествах в Chrome с нулиране на аудио позицията и се получи. Най-безопасно е първо да направите пауза, но работи и в двата случая.

var audioo = document.createElement("audio");

// Lets add an event listener to play when we are ready to start playing
audioo.addEventListener("canplaythrough", function(){
    audioo.play(); 
}, false); 

function newCall() {        
     audioo.src = "";
     audioo.src = "http://xx.xx.xx.xx:8181/api/captcha/sound";             
} 

function playAgain() { 
     // Let's check if we are ready enough to play
     if(audioo.readyState === 4){                       
         audioo.pause(); // first pause        
         audioo.currentTime = 0; // then reset           
         audioo.play(); // then play
     } else {
         // else inform us that we are not ready to play yet.
         alert("Audio not ready yet.");
     }
} 

Ето два забавни ресурса, които могат да помогнат:

person somethinghere    schedule 24.10.2014
comment
Добре, разбирам какво се опитвате да кажете, но currentTime=0 не работи за мен. Може да се дължи на това, че се опитвам да извикам уеб услуга (GET повикване) чрез src атрибут. Когато извикам локален mp3 на моята машина, той работи добре дори на chrome. Можете ли да опитате файл, който идва по мрежата? - person user3137592; 24.10.2014
comment
Всъщност успях да получа аудио файл за възпроизвеждане от мрежата.. Има ли грешки във вашата конзола? Като този (ако въведа неправилен URL): net::ERR_FILE_NOT_FOUND ? - person somethinghere; 24.10.2014
comment
Не, ако беше така. Нямаше да чуя звука, когато щракна върху бутона Ново повикване. Проблемът е, че audio.play() се изпълнява само един. Ако премахна audioo.play() от вътрешната функция newcall(), тя се изпълнява във функцията playAgain() точно веднъж. - person user3137592; 24.10.2014
comment
Проверете актуализацията, но човече, това е странен проблем! Решението обаче работи. - person somethinghere; 24.10.2014
comment
Да, наистина е странно, опитах всичко. Вашата актуализация по-горе извежда JS грешка, тъй като audio.src е недефиниран. Само в случай, че се интересувате да знаете, audio.play() работи добре, ако извлека аудио данни (wav) в audio.src вместо url, който извлича данните. Въпреки това, както видяхме по-рано, използването на url го възпроизвежда само веднъж в chrome :( - person user3137592; 25.10.2014
comment
Все пак не трябва да ставате недефинирани. Само за да сте сигурни, че случайно не сте сгрешили името, тъй като в примерите тук е audioo с две o, което моят речник постоянно коригираше. Опитах това и работи в chrome.... - person somethinghere; 25.10.2014