从MongoDB gridfs中检索特定的块文件

时间:2017-07-25 19:25:28

标签: php mongodb gridfs

我已经使用PHP脚本将块大小为15MB的1.5GB视频文件存储到MongoDB GridFS。

我可以使用filename检索完整的视频文件。但我想跳过块文件并只检索视频的特定部分。

是否可以跳过并检索特定的块文件?

谢谢, 哈瑞。

1 个答案:

答案 0 :(得分:2)

虽然您的要求一目了然,但我相信它的实现比它看起来更复杂,因为如果我理解正确,那么您想要构建的实际上是一个视频流系统。

GridFS不了解您要存储的内容。主要是使您能够在MongoDB中存储大于16 MB的文档(大于最大BSON大小)。

GridFS通过将输入文件拆分为" chunks"来实现这一点,但是由应用程序来理解块中的数据。

如果您通过检索特定的块范围需要视频的特定部分,则需要考虑以下事项:

  • 视频经常使用可变速率编码(VBR)进行压缩,这意味着一个15 MB的块可能包含不同的视频分钟(例如,一个块中可能是15分钟,另一个块中可能是12分钟等)。
  • 视频文件经常包含元数据部分(例如标题,概要等)。您需要识别此元数据部分并将它们与实际视频数据包分开。大多数情况下,此元数据大小与视频数据包大小不同。
  • "寻求"你要。例如,如果您需要1秒的搜索粒度,则需要计算1秒视频中包含的数据量。如果您使用恒定比特率编码(CBR),这可以更容易计算。

因此,要达到您的要求,您需要:

  1. 使用恒定比特率(CBR)对视频进行编码。
  2. 能够剖析视频格式,以便能够准确地将一个视频数据包存储在一个块中。
  3. 将视频元数据存储在其他位置。
  4. 基本上,这意味着您还需要构建能够理解此存储方案的播放器,以便能够“寻找”#34;可靠地进入视频中的某一点。