2012-09-28 133 views
3

我正在使用HTML5音频API播放声音。这对于普通的mp3文件可以正常工作,但是当使用诸如http://95.173.167.24:8009之类的声音流时,它无法播放。使用Audio API播放音频流

这里是代码我使用:

if('webkitAudioContext' in window) { 
    var myAudioContext = new webkitAudioContext(); 
    } 

    request = new XMLHttpRequest(); 
    request.open('GET', 'http://95.173.167.24:8009', true); 
    request.responseType = 'arraybuffer'; 
    request.addEventListener('load', bufferSound, false); 
    request.send(); 


    function bufferSound(event) { 
     var request = event.target; 
     var source = myAudioContext.createBufferSource(); 
     source.buffer = myAudioContext.createBuffer(request.response, false); 
     source.connect(myAudioContext.destination); 
     source.noteOn(0); 
    } 

任何人都可以点我在这个正确的方向?

任何帮助表示赞赏。 谢谢

+1

这个问题可能不在您的代码中,但SHOUTcast服务器提供破坏的HTTP响应。大多数浏览器忽略它,但有些则不。你使用的是什么浏览器? – Brad

+0

噢,好吧,我正在使用最新版本的Chrome – RyanDreggs

回答

3

问题可能是SHOUTcast正在检测您的用户代理字符串作为浏览器。它会查找其中包含Mozilla的任何字符串,并说“哦,这是一个浏览器!将它们发送给管理面板。”

您需要强制使用音频流。幸运的是,这是很容易在你的URL的末尾添加一个分号完成:

http://95.173.167.24:8009/; 

注意,在你的日志的User-Agent字符串将MPEG OVERRIDE

这对大多数浏览器都有效。有些浏览器可能仍然不喜欢来自SHOUTcast的HTTP类似的resopnses,但这至少会让你开始。

+0

另一方面,如果您无法按照自己的方式正常工作,并希望获得正确的HTTP流,我现在有一项可用于测试的服务。 http://www.audiopump.co/preview.php – Brad