我正在使用 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文件?否则,请让我知道检索相同的正确方法是什么?
先谢谢。
答案 0 :(得分:1)
您的文件大小检查无论如何都是近似的:当您完成文件时,附加了一些[索引]数据,文件完全可以播放,并且您事先并不知道大小。
您可能能够使用API打开文件共享访问的第二个句柄,并寻找文件的末尾以查询当前大小。但是,我会说,最简单但功能最强大且最准确的解决方案只是计算您正在编写的有效负载 - cbData
个参数在AVIFileWriteData
个调用中。这些数据归因于大多数有效写入的数据(99%?),因此估算足够准确。