1

我正在使用AVIFile 参考API(https://msdn.microsoft.com/en-us/library/windows/desktop/dd756808 (v=vs.85).aspx )来创建 AVI 视频输出文件。在将帧添加到视频文件时,我想检查文件的大小,该文件创建到现在,如果超过一定的大小限制(比如 1GB),我想停止将帧添加到文件并关闭 AVI 文件并退出。

我正在使用以下代码:

      LONG lnSize=0;
      PAVISTREAM ppavi=NULL;
      AVIFileGetStream(pfile,&ppavi,mmioFOURCC('M', 'S', 'V', 'C'),1);
      AVIStreamDataSize(ppavi,mmioFOURCC('M', 'S', 'V', 'C'),&lnSize);

AVIFileGetStream将空值返回到 ppavi 指针。因此,它在调用AVIStreamDataSize时崩溃。

在创建 AVI 文件的过程中,我检索 AVI 文件大小的方法是否正确?如果是这样,我应该在代码中更正什么以获得正确大小的 AVI 文件?否则,请让我知道检索相同内容的正确方法是什么?

提前致谢。

4

1 回答 1

1

无论如何,您的文件大小检查都是近似的:当您完成文件时,会附加一些 [索引] 数据以使文件完全可播放,并且您事先不知道大小。

您可能能够使用 API 打开文件共享访问的第二个句柄并寻找文件末尾以查询当前大小。但是我想说,最简单但功能强大且足够准确的解决方案就是简单地计算您正在编写的有效负载 -cbData各个AVIFileWriteData调用中的参数。该数据归因于大部分有效写入的数据(99%?),因此估计足够准确。

于 2017-12-14T11:44:00.107 回答