类似视频数据的高效文件格式

时间:2012-11-20 15:00:55

标签: c++ video kinect file-format

我正在使用Kinect传感器,我想存储和加载它产生的数据。基本上它给了我两种类型的帧(颜色和深度),我保存到二进制文件。由于每个帧的大小超过1Mb,Kinect记录为30 fps,因此文件的增长速度非常快。

现在我需要一种有效的方法来加载数据并快速随机访问这些帧。

我现在这样做的方式是这样的:

  • 我有一个Frame类,其中包含一个帧头(帧号,时间戳,类型,数据大小)和指向实际图像数据的指针
  • 我有一个Replay类,其中包含一个标题(帧数,分辨率等)和两个向量:frames,其中包含Frame个对象,数据指针初始化为NULL, framePositions将帧编号映射到文件中的位置。
    • 当我需要一个框架时,我只是从文件中加载它的数据。

加载看起来像这样(压缩):

Replay replay;
Frame frame;
int position = fStream.tellg();
fStream.read((char *) &frame.header, sizeof(frame.header));
fStream.ignore(frame.dataSize);    // skip image data for now
replay.insertFrame(frame, pos);    // put frame and pos into vectors

所以这比将所有内容加载到内存中要好,但它仍然很慢。有一个名为Kinect Studio的MS软件,它可以立即打开录制的文件。从字面上看,我的解决方案需要几秒钟来加载类似大小的文件。这是什么样的巫术?

现在我有了一个想法:在文件中创建一个帧位置数组,将它放在文件的末尾(因为它是可变大小),将其偏移量和大小放在标题中,不要甚至无法加载帧,只需加载阵列并在需要时请求帧。

我认为它可行,但我决定在尝试实施之前寻求建议,因为我相信有解决这些问题的标准方法,我真的不想通过反复试验重新发明轮子。 / p>

0 个答案:

没有答案