如何使用libav编写.mov文件,如果文件未正确完成,则可以播放



我正在使用libav c库开发一个c++视频录制应用程序,该应用程序将来自相机馈送的h265记录和编码到.mov容器中。

我可以在所有标准视频播放器上成功播放.mov文件,但前提是录制正确终止 - 即调用av_write_trailer并正确关闭文件。

然而,该软件的一个重要要求是即使在录制不当终止的情况下(即断电或目标磁盘已满(也能播放.mov文件。

我假设这是可能的,因为大多数视频录制设备即使电池电量耗尽或填满目标媒体也会创建有效的.mov文件。

我尝试指定以下AVDictionary选项,该选项假设将相关流信息移动到文件的开头:

av_dict_set(&options, "movflags", "faststart", 0);

但是,这不会使不完整的文件可播放。

我相信这是您正在寻找的选项:

av_dict_set(&options, "movflags", "+frag_keyframe+empty_moov+faststart", 0);

这是用于流式传输mp4的,因此流可以随时播放和中断。

缺点是,此类视频文件将无法搜索。但是,一旦电源恢复,您可能可以对此类不完整的文件进行后处理并修复标头。

最新更新