2011-01-21 24 views
13

ユーザーのオーディオファイルをストリームするローカルサーバーを開発しています。そのため、HTML5オーディオオブジェクトを使用してWebブラウザからアクセスできます。これらのファイルはユーザーのコンピュータ上にあるので、ファイルがロードされると完全にバッファリングされることが期待されますが、特定の大きなファイルの場合、曲が途中でバッファリングされ、その後停止してからしばらくしてからバッファリングを再開します。HTML5オーディオ要素で曲全体を強制的にバッファリングするにはどうすればよいですか?

私の質問は、オーディオオブジェクトに曲全体を一度にバッファリングさせるにはどうすればいいですか? JavaScriptからこれを行うことはできますか?オーディオオブジェクトに属性を設定する必要がありますか、それとも他に何かできますか?

答えて

1

preload = "auto"属性を設定できます。何もすることは保証されていませんが、リモートエンドの心配なしに、ユーザーエージェントが望むだけバッファリングするように指示されています。

function load() { 
    a.play(); 
    setTimeout("a.pause()", 10); 
} 

ファイルを再生して、ブラウザが曲全体をバッファリングする、10msの後にそれを一時停止する:私が見つけhttp://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#attr-media-preload

6

ソリューションはこれでした。

+7

のsetTimeout(a.pause、10)は、あなたが関数に任意の変数を渡していないときに動作し、より良いカルマ –

+1

、確かです。しかし、なぜ2つの方法の間で前後に切り替えるのを悩ませますか? –

+11

@DrJokepu実際には、関数のコンテキストを失うので、それはうまくいかないでしょう。より良い: 'setTimeout(a.pause.bind(a)、10)' – nickf

3

load()メソッドを使用できます。これは基本的にはpreload="auto"です。しかし、おそらく全体をバッファリングしないでしょう。

私は、オーディオが(preload=autoであっても)モバイルデバイスにプリロードされていないという問題がありましたが、この方法が有効でした。

http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dfnReturnLink-2

別のオプションは、バイナリブロブとしてのXMLHttpRequestを介してデータをロードし、ブロブURIに<audio>要素のsrc属性を設定することです。

(私は個人的に本当に再生/一時停止ハック好きではありません。)

関連する問題