11

Safari も Firefox もMediaElementSource、Web Audio API を使用して からのオーディオ データを処理できません。

var audioContext, audioProcess, audioSource,
    result = document.createElement('h3'),
    output = document.createElement('span'),
    mp3 = '//www.jonathancoulton.com/wp-content/uploads/encodes/Smoking_Monkey/mp3/09_First_of_May_mp3_3a69021.mp3',
    ogg = '//upload.wikimedia.org/wikipedia/en/4/45/ACDC_-_Back_In_Black-sample.ogg',
    gotData = false, data, audio = new Audio();
 
function connect() {
  audioContext = window.AudioContext ? new AudioContext() : new webkitAudioContext(),
  audioSource  = audioContext.createMediaElementSource( audio ),
  audioScript  = audioContext.createScriptProcessor( 2048 );
 
  audioSource.connect( audioScript );
  audioSource.connect( audioContext.destination );
  audioScript.connect( audioContext.destination );
  audioScript.addEventListener('audioprocess', function(e){
    if ((data = e.inputBuffer.getChannelData(0)[0]*3)) {
      output.innerHTML = Math.abs(data).toFixed(3);
      if (!gotData) gotData = true;
    }
  }, false);
}
 
(function setup(){
  audio.volume = 1/3;
  audio.controls = true;
  audio.autoplay = true;
  audio.src = audio.canPlayType('audio/mpeg') ? mp3 : ogg;
  audio.addEventListener('canplay', connect);
  result.innerHTML = 'Channel Data: ';
  output.innerHTML = '0.000';
  document.body.appendChild(result).appendChild(output);
  document.body.appendChild(audio);
})();

近い将来、これにパッチを適用する予定はありますか? または、オーディオ コントロールをユーザーに提供する回避策はありますか?

Apple の場合、これは WebKit Nightlies で修正される可能性がありますか、それともHTML5が Web Audio API で適切に動作するようになるには、Safari 8.0のリリースまで待つ必要がありますか? <audio>Web Audio API は少なくともバージョン 6.0 から Safari に存在しており、Safari 7.0 がリリースされるずっと前に最初にこの質問を投稿しました。これがまだ修正されていない理由はありますか?それは修正されますか?

Mozilla については、古い Audio Data API からの切り替えの過程にあることは承知していますが、これは Web Audio 実装の既知の問題であり、Firefox の次のリリースまでに修正される予定ですか?

4

2 に答える 2

5

この回答は、関連する質問に対する私の回答からほぼ正確に引用されています: Firefox 25 and AudioContext createJavaScriptNote not a function

メディアがSame-Origin Policyに準拠している場合、Firefoxサポートしますが、リモートのオリジンからメディアを使用しようとしたときに Firefox によってエラーが生成されることはありません。MediaElementSource

仕様はそれについて具体的ではありません(しゃれを意図したものです)が、これは意図された動作であり、問​​題は実際には Chrome にあると言われています…必要に応じて更新する必要があるのは Blink 実装 (Chrome、Opera) ですCORS

MediaElementSource ノードとクロスオリジン メディア リソース:

From: Robert O'Callahan <robert@ocallahan.org>
Date: Tue, 23 Jul 2013 16:30:00 +1200
To: "public-audio@w3.org" <public-audio@w3.org>

HTML メディア要素は、任意のオリジンからメディア リソースを再生できます。要素がページのオリジンとは異なるオリジンからメディア リソースを再生する場合、ページ スクリプトがメディアのコンテンツを読み取れないようにする必要があります (たとえば、ビデオ フレームやオーディオ サンプルを抽出します)。特に、ScriptProcessorNodes がメディアのオーディオ サンプルにアクセスできないようにする必要があります。また、他の方法 (タイミング チャネル攻撃など) でリークされたサンプルについても情報を提供する必要があります。現在、Web Audio 仕様では、これについて何も述べていません。

これを解決するには、同じオリジン以外のデータが Web オーディオに入らないようにする必要があると思います。これにより、攻撃対象領域と Web オーディオへの影響を最小限に抑えることができます。

私の提案は、MediaElementAudioSourceNode に、同じオリジン ストリーム以外のストリームからのデータを無音に変換させることです。

この提案が仕様になった場合、開発者が自分の提案が機能しMediaElementSourceない理由を理解することさえほぼ不可能になります。現在のところ、 Firefox 26で要素を呼び出すcreateMediaElementSource()と、実際にはコントロールがまったく機能しなくなり、エラーはスローされません。<audio><audio>

リモートオリジンからのオーディオ/ビデオデータを使用して、どのような危険なことを行うことができますか? 一般的な考え方は、Same-Origin Policy をMediaElementSourceノードに適用しないと、悪意のある JavaScript が、ユーザーのみがアクセスできるメディア (セッション、vpn、ローカル サーバー、ネットワーク ドライブ) にアクセスし、そのコンテンツ、または何らかの表現を送信する可能性があるということです。それ—攻撃者に。

HTML5 メディア要素には、既定ではこれらの制限はありません。<audio><img>、または<video>要素を使用して、すべてのブラウザーにリモート メディアを含めることができます。同一生成元ポリシーが機能するのは、これらのリモート リソースからデータを操作または抽出する場合のみです。

[It's] 経由でクロスオリジンの画像データをダンプできないのと同じ理由で<canvas>: メディアには機密情報が含まれている可能性があるため、不正なサイトがコンテンツをダンプして再ルーティングできるようにすることはセキュリティ上の問題です。- @nmaier

于 2014-04-21T17:44:17.093 に答える
1

createMediaElementSource() は Safari 8.0.5 (およびおそらくそれ以前) では正しく機能しませんが、10600.5.17、r183978 の時点で Webkit Nightly で修正されています。

于 2015-05-08T18:51:39.000 に答える