【发布时间】:2013-12-09 10:33:33
【问题描述】:
我使用带有new Audio() 对象作为源的WebAudio API。以下是我正在做的简化版本。但是,这不会在 Firefox 25.0.1 中播放任何声音。
var context;
if(window.webkitAudioContext) {
context = new webkitAudioContext();
} else {
context = new AudioContext();
}
var audio = new Audio();
// This file does seem to have CORS Header
audio.src = "http://upload.wikimedia.org/wikipedia/en/4/45/ACDC_-_Back_In_Black-sample.ogg";
var source;
function onCanPlay() {
console.log("can play called");
source = context.createMediaElementSource(audio);
source.connect(context.destination);
audio.removeEventListener("canplay", onCanPlay);
audio.play();
}
if(audio.readyState < 3) {
audio.addEventListener("canplay", onCanPlay);
} else {
onCanPlay();
}
jsFiddle:http://jsfiddle.net/7bJUU/
我在另一个question 中读到createMediaElementSource 需要CORS。上面示例中的文件似乎确实有Access-Control-Allow-Origin: *,但它仍然无法在 Firefox 中工作。如果我使用本地音频文件在本地运行相同的示例,一切正常。
不确定这是错误还是我做错了什么。任何帮助表示赞赏。
【问题讨论】:
-
对我来说这看起来像是一个 Firefox 错误。 CORS头肯定是有的,而且代码都是正确的。
-
这看起来确实像一个错误bugzilla.mozilla.org/show_bug.cgi?id=937718
-
嗯。好吧,我想您可能可以将 AJAX 用作权宜之计,因为 OGG 文件具有 CORS 标头。祝你好运。
-
@Kevin 你有这方面的例子吗?那么这将如何运作呢?我们通过 ajax 加载文件,然后将其转换为缓冲源??
-
@vekah 我认为您可以将自己添加到 bugzilla 页面上的 cc-list 中。作为一种解决方法,您可以在同一域上设置代理,因为据我检查,此错误不会影响来自同一来源的文件。
标签: html firefox html5-audio web-audio-api