Html Firefox WebAudio createMediaElementSource不工作

Html Firefox WebAudio createMediaElementSource不工作,html,firefox,html5-audio,web-audio-api,Html,Firefox,Html5 Audio,Web Audio Api,我将WebAudio API与new Audio()对象一起用作源。下面是我正在做的事情的简化版本。但是,它在Firefox25.0.1中不会播放任何声音 var context; if(window.webkitAudioContext) { context = new webkitAudioContext(); } else { context = new AudioContext(); } var audio = new Audio(); // This file doe

我将WebAudio API与
new Audio()
对象一起用作源。下面是我正在做的事情的简化版本。但是,它在Firefox25.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();
}
var上下文;
if(window.webkitAudioContext){
context=新的webkitAudioContext();
}否则{
上下文=新的AudioContext();
}
var audio=新音频();
//此文件似乎有CORS头
audio.src=”http://upload.wikimedia.org/wikipedia/en/4/45/ACDC_-_Back_In_Black-sample.ogg";
var源;
函数onCanPlay(){
log(“可调用的播放”);
source=context.createMediaElementSource(音频);
source.connect(context.destination);
audio.removeEventListener(“canplay”,onCanPlay);
音频播放();
}
如果(audio.readyState<3){
audio.addEventListener(“canplay”,onCanPlay);
}否则{
onCanPlay();
}
jsFiddle:

我在另一篇文章中读到,
createMediaElementSource
需要CORS。上面示例中的文件似乎具有
访问控制允许源代码:
,但在firefox中仍然不起作用。如果我使用本地音频文件在本地运行相同的示例,那么一切都正常

不确定这是一个bug还是我做错了什么。感谢您的帮助。

原因如下:

  • Firefox(在2015年10月7日更新到41.0.1之前和之后进行了测试)似乎在安全套接字HTTP上存在一些不安全的跨域问题。我更新到HTTPS:在媒体源上,Wikimedia有一个替代的443 TCP,从2015年6月23日到2017年2月19日,从CA“GualAlgSub”颁发给“维基媒体基金会”的有效证书。在安全域中,浏览器也用于要求安全资源
  • audiodom元素和其他元素(如Image和Video)具有属性“crossOrigin”,该属性指定是否提供凭据(cookie)。匿名跨源指定不会将域cookie交换到跨域,浏览器认为这是安全的。所以,在指定音频源之前,我将“audio.crossOrigin”设置为“anonymous”
    我在Firefox(如第一项所述)和Chrome 45.0.2454.101m上进行了测试,它们运行良好,因此我在JSFIDLE上进行了更新:
    7bJUU

    这在我看来像是Firefox的bug。CORS头肯定在那里,代码都是正确的。这看起来确实像一个bug。嗯,我想你可以使用AJAX作为权宜之计,因为OGG文件有一个CORS头。祝你好运。@Kevin你有关于这方面的例子吗。那么这将如何运作呢?我们通过ajax加载文件,然后将其压缩到缓冲源中???@vekah我认为您可以将自己添加到bugzilla页面上的cc列表中。作为一种解决方法,您可以在同一个域上设置代理,因为据我检查,此错误不会影响来自同一来源的文件。请注意,您也可以直接在音频元素上使用
    crossorigin
    属性,如