2016-10-27 5 views
1

HTTP範囲要求の開始&終了バイトを判別することが可能か、ブラウザにどこから開始して何らかのユーザー定義されたチャンクサイズ程度である。 データベースにファイルがあり、複数のチャンクに分割されています。各チャンクは2 MBです。HTTP範囲要求の開始と終了のバイト(nodejs + mongodb)を決定する方法

例えば、 20MBファイル=> 10チャンク

ブラウザがファイル(ビデオファイル)のダウンロードを開始すると、私はクロムを調べた後、最初に'range=bytes 0-'のバイト範囲をチェックし、サーバーが正しく「正しい」バイトと206のヘッダー背中、それはあなたのサーバーは、それが送信されますように、私は私のアプリをコード化しているサーバーサイドでパーシャルレスポンス

のためによく応答するかどうかそれはちょうどcheckes

、ファイルなど'range=bytes 1900000-'の最終バイトのために別のリクエストを送信しますあなたがうまくそれを求めるなら、2 MBの部分的なもの:

私は、ブラウザが

range=bytes 0-'

range=bytes 2000000-4000000 bytes'

range=bytes 4000000-6000000 bytes'

を行うには何をしたいしかし、あなたは2メガバイトのチャンクにフィットdoesntのどの部分に言わせれば、それはエラーが発生します。または、オーディオ/ビデオファイルの正しい位置から再生されません。

range=bytes 2500000-4000000 bytes'

range=bytes 0-1000000 bytes'

私はチャンクの一部から送信を開始することはできませんので、これはエラーになります。それ以外の場合、私はチャンクをスライスして、いくつかのバッファ操作を行う必要があります。しかし、私はそれをきれいに保ちたい。 可能であれば教えてください。

答えて

3

私はあなたがmp4ファイルをストリーミングしていると仮定していますか? mp4のさまざまな部分(ボックス)は異なる目的を持っており、ファイル内のランダムな位置にジャンプしてインデックスを事前にロードすることで各フレームの位置を特定することなく再生を開始することはできません(moov)。 moovはファイルの先頭または末尾に置くことができるので、ブラウザはまずファイルの最後を必要とするかもしれません。これは最初から始めることでこれを判断し、moovを探します。開始時でなければ、次のボックスの位置へのポインタがあります。これは、ファイルがインデックスを見つけるまでカエルを跳躍させることができます。 moovヘッダーがダウンロードされると、ブラウザーはビデオ内のすべての単一フレームの正確なバイトオフセットとサイズを認識し、検索しながらファイルを飛び越えることができます。ブラウザーがmp4をネイティブに解析する方法を知っているので、これはすべて可能です。 TLDR。いいえ、ソリューションは動作しません。

+0

私はmp4だけでなく、オーディオファイル、isoファイルなど、他のファイルタイプの部分的なダウンロードも実装しています。moovインデックスについては知らなかった。しかし、それがMongoDBグリッドでどう機能するのか不思議です。 mongodb nodejsドライバは、ファイルを複数のまとまりに分割します。ファイルを取得する場合、mp4は完全にストリーミングを開始し、シーク可能です。彼らは間違いなく要求されたバイトの範囲と一致するようにチャンクのバッファの長さをスライス..しかし、まだそこには、情報ありがとう – webmaster

関連する問題