0
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() 函数显示准确的曲目信息。

我最好的猜测是它似乎与它不知道完整的文件大小/轨道长度有关。

编辑:原来这是一个跨域问题,即使它是同一个域,只是一个不同的端口。并且仅在使用音频上下文时才会影响事物。Alexey 指出了这一点,我把它全部推到同一个端口上,它开始工作了。如果只有浏览器会在开发控制台中报告类似的内容,那将解决这么多令人头疼的问题。

4

0 回答 0