创建时检查 AVI 文件大小,如果超过特定大小限制,则停止向其添加帧

Checking the AVI File Size while creating it and stop adding frames to it if certain size limit exceeds

我正在使用 AVIFile Reference 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 文件?否则,请告诉我检索相同内容的正确方法是什么?

提前致谢。

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

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