2014-01-22 67 views
3

如果我從本地文件系統加載,我可以尋求使用HTML5 foo.currentTime = 1,從服務器加載鉻

foo.currentTime = 2; 
foo.play(); 

我得到預期的結果時,不能正常工作。但是,如果我從服務器加載,則搜索失敗,音頻從頭播放。我嘗試過'oncanplaythrough'事件。這裏是我的代碼:

var myID = '1111' 
var audioElementString = '<audio type="audio/mpeg" id=' +'"' + myID + '"' + '></audio>' 
$('body').append(audioElementString); 
var audio = document.getElementById(myID); 
//audio.src = "contentAssets/audio/some_file.mp3"; // this loads and seeks fine 
audio.src = "http://bar.com/mypath/file"; // this loads and plays, but does not seek 

audio.addEventListener("canplaythrough", function(){ 
    alert("can play through") 
    audio.currentTime=3; 
    audio.play(); 
}); 
audio.load(); 
+0

設置'audio.src'時未定義'audio'。您的示例代碼將無法工作。 –

+0

題外話:您可以使用''<音頻ID =''+ myID +'「>'代替''<音頻ID ='+'」'+ myID +''''''' – Oriol

回答

2

解決了,我們在響應頭中添加了Accept-Ranges = bytes。

+0

+1 - 我很驚訝,這似乎並不存在於我在過去幾天瀏覽過的任何文檔中。我們的CDN沒有迴應這個標題,我想知道爲什麼我不能從這裏找到音頻文件。 PS,不要忘記接受你的答案。 –

-1

dt1000有正確答案。我一直在瀏覽很多不同的論壇,因爲如果從PHP流式傳輸mp3並且這是有效的答案,Chrome將不會允許audio.currentTime被設置。加入到PHP:

header('Accept-Ranges: bytes'); 

順便說一下,Firefox和IE不需要上述頭設置audio.currentTime。但Chrome需要它。如果沒有上述標題,Chrome也不會讓您移動音頻標籤滑塊控件。