2013-11-24 13 views
12

new Audio()オブジェクトをWebAudio APIとして使用しています。以下は、私がやっていることの簡略版です。しかし、これは、firefox 25.0.1でサウンドを再生しません。Firefox WebAudio createMediaElementSourceが機能しない

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/

私はcreateMediaElementSourceはCORSを必要とするという別のquestionで読みます。上の例のファイルはAccess-Control-Allow-Origin: *のようですが、それでもfirefoxではうまくいきません。ローカルのオーディオファイルを使用して同じサンプルをローカルで実行すると、すべて正常に動作します。

これがバグか、何か間違ったことを行っているのかどうかは不明です。どんな助けもありがとうございます。

+0

これは私にはFirefoxのバグのように見えます。 CORSヘッダーは間違いなく存在し、コードはすべて正しいです。 –

+0

これはバグのようですhttps://bugzilla.mozilla.org/show_bug.cgi?id=937718 – z33m

+0

うーん。 OGGファイルにはCORSヘッダーがあるので、おそらくAJAXをストップギャップとして使用することができます。がんばろう。 –

答えて

3

その理由は次のとおりです。

  1. のFirefox(2015年10月7日のよう41.0.1にアップデートする前と後に試験)は、セキュア・ソケットHTTPのセキュリティ保護されていないクロスドメインでいくつかの問題を持っているようです。ウィキメディアには、「Wikimedia Foundation、Inc.」に発行された有効な証明書付きの代替TCP 443があるため、メディアソースでhttps:に更新されました。 2015年6月23日から2017年2月19日まで、CA「GlobalSign」からセキュリティで保護されたドメイン上では、ブラウザーを使用してセキュアなリソースを要求します。
  2. オーディオDOM要素と、画像や動画のような要素には、資格情報(クッキー)を提供するかどうかを指定するプロパティ「crossOrigin」があります。匿名のクロス・オリジンは、クロス・ドメインへのドメイン・クッキーの交換がないことを指定します。これは、ブラウザーによって安全とみなされます。ですから、オーディオのソースを指定する前に "audio.crossOrigin"を "anonymous"に設定しました。

私はFirefoxの(最初の項目に言ったように)とChrome 45.0.2454.101mでテストされ、そして、彼らはうまく働いた、と私はJSFiddle更新日:https://jsfiddle.net/7bJUU/11/7bJUU

+0

''のようなオーディオ要素に 'crossorigin'属性を直接使うこともできることに注意してください。 –