2017-07-25 9 views
0

チャンクサイズ15MBのPHPスクリプトを使用して、1.5GBのビデオファイルをMongoDB GridFSに保存しました。MongoDBグリッドから特定のチャンクファイルを取得

filenameを使用して完全なビデオファイルを取得できます。しかし、私はチャンクファイルをスキップし、ビデオの特定の部分だけを取り出したいと思っていました。

特定のチャンクファイルをスキップして取得することはできますか?

ありがとう、 ハリ。

+0

可能ですか?はい。 GridFSは単にドライバに適用される「ソフトウェア」なので、そうです。データベースの観点から見ると、各 "チャンク"は実際にはMongoDBの他のすべてと同様に、単に "コレクション"内の "ドキュメント"です。しかしここで答えに提示されている良いアドバイスは、ここで言及されているので、ここではもっと広い問題があります。 –

+0

ありがとうございました。 – Hari

答えて

2

あなたの要件は一目瞭然ではありますが、私が正しく理解すれば、本質的にビデオストリーミングシステムであるため、その実装は見た目よりも複雑です。

GridFSには、格納している内容に関する知識がありません。 MongoDBに最大16 MBを超えるドキュメントを格納できるようにすることが主な慣習です(最大BSONサイズよりも大きい)。

GridFSは、入力ファイルを「チャンク」に分割することでこれを実現しますが、チャンク内のデータを理解するのはアプリケーション次第です。

あなたが特定のチャンクの範囲を取得することで、ビデオの特定の部分を必要とする場合は、いくつかのことを考慮する必要があります:

  • ビデオは頻繁にその1つの手段15、可変レート符号化(VBR)を、使用して圧縮されていますMBチャンクは、ビデオの変動分を含むことができる(例えば、1チャンク内で15分、別のチャンク内で12分となる可能性がある)。
  • 動画ファイルには、メタデータの一部(タイトル、概要など)が頻繁に含まれています。このメタデータ部分を認識し、実際のビデオパケットから分離する必要があります。ほとんどの場合、このメタデータサイズはビデオパケットサイズとは異なります。
  • あなたが望む「探索」はどれくらい細かいですか。たとえば、1秒の検索精度が必要な場合は、1秒の動画に含まれるデータの量を計算する必要があります。 Constant bitrate encoding(CBR)を使用している場合、これはやや簡単に計算できます。したがって

、必要なものを達成するために、あなたがする必要があります:固定ビットレート(CBR)を使用してビデオをエンコード

  1. 1つのビデオパケットを1つのチャンクに正確に保存できるようにビデオフォーマットを解読できること。
  2. ビデオメタデータを別の場所に保存します。

これは基本的に、ビデオの特定のポイントを確実に「シーク」できるように、このストレージスキームを理解できるプレーヤーを構築する必要があることを意味します。

+0

ありがとうKevin。 – Hari

+0

こんにちはKevin、ちょうど質問です。私たちはビデオを圧縮して保存しています。 CBRは圧縮ビデオでは動作しないと考えています。圧縮されたビデオで同じことをする方法はありますか? – Hari

+0

@ハリ汎用的な圧縮アルゴリズムを使用してビデオを圧縮することを意味しますか? zip/rar?オリジナルのビデオフォーマットは何でしたか? –

関連する問題