var audio = document.getElementById("audio");
audio.src = "http://SAMEDOMAIN:8000/stream.ogg"; // works with if(0)
//audio.src = "test.ogg"; // Works always
//audio.src = "http://SAMEDOMAIN/test.ogg"; // works always
console.log(audio.src);
if(1){ // vars below are defined as globals.
audioCtx = new AudioContext();
audioSrc = audioCtx.createMediaElementSource(audio);
analyser = audioCtx.createAnalyser();
audioSrc.connect(analyser);
audioSrc.connect(audioCtx.destination);
}
audio.play();
status("Init stream.");
我不确定这是否是Firefox和Chrome的一些奇怪限制,但两者都将播放数据,当来自Icecast服务器的stream.ogg上使用AudioContext代码时,音频都会失败播放,分析仪数据都是零。但是没有AudioContext代码,它就可以正常播放。
音频元素的控件显示它正在接收数据,至少在Firefox中,mozGetMetadata()函数显示准确的音轨信息。
我最好的猜测是它似乎与它不知道完整的文件大小/轨道长度有关。
编辑:原来这是一个跨域问题,即使它是同一个域,只是一个不同的端口。它只会在使用音频上下文时影响事物。阿列克谢指出了这一点,我将它全部推到了同一个端口上,它开始工作了。如果只有浏览器会在开发控制台中报告类似的东西,那就会解决这么多麻烦。