【问题标题】:Checking the AVI File Size while creating it and stop adding frames to it if certain size limit exceeds在创建 AVI 文件时检查文件大小,如果超出特定大小限制,则停止向其添加帧
【发布时间】:2023-03-18 16:30:02
【问题描述】:

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

提前致谢。

【问题讨论】:

    标签: windows video-streaming vfw


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多