8

ページ上の単純な Ctrl+S での完全なダウンロードを避けるために、ビデオ ストリーミング Web アプリケーション<video src="http://myserver/video.mp4">を URL を使用したクラシックからBLOBに切り替えようとしています。

XMLHttpRequest の使用は、離れたビデオ ファイルから BLOB を作成できるようにするために必須のようです。

問題は XMLHttpRequest がファイル全体をダウンロードすることであり、プログレッシブ ダウンロードには使用できません。

次のコードは、リモート ファイルから BLOB を読み込む最も簡単な例です。

var r = new XMLHttpRequest();
r.onload = function() { // Triggered only when all video is downloaded
    video.prop("src", URL.createObjectURL(r.response));
};

r.open("GET", "http://myserver/video.mp4");
r.responseType = "blob";
r.send();

アプリケーションはビデオ ストリーム用であるため、この方法は使用できません (まったくストリーミングではないファイル全体をダウンロードするためにユーザーに X 分間待機させたい場合を除きます)。

blob とプログレッシブ ダウンロードを組み合わせる方法はありますか?

4

1 に答える 1

0

src="foo.mp4" メソッドのみを使用する場合、プログレッシブ ダウンロードがブラウザのデフォルトの動作になります。ただし、再生エクスペリエンスは、ファイルの実際の形式によって異なります。

「通常の」MP4 ファイルはストリーミング用に設計されていません。それらは、再生を開始するために必要なデータがファイルの開始と終了の間で分割されるように構造化されています。したがって、プレーヤーは、再生を開始するために必要なデータを取得するために、すべてをバッファリングする必要がある場合があります。

「-frag」オプションを指定して、MP4Boxなどのツールを使用して、通常の MP4 を断片化された MP4 に変換してみてください。これにより、ファイル内のデータが再配置され、すべての初期化データが先頭に配置され、ファイルの残りの部分がチャンクに分割されます。

より複雑なオプションは、MPEG-DASH などを使用することです。MP4Box とdash.jsを活用することで、本格的なアダプティブ ストリーミング メディア プレーヤーをセットアップできます。

于 2015-03-19T00:23:01.873 に答える