现在我使用C语言和ffmpeg实现了一个将实时音视频多路复用到MP4文件的程序,一切都运行良好,但当在重复使用过程中突然停电时,录制的MP4文件会损坏,VLC无法播放此文件。
我认为原因是没有调用写尾部函数av_write_trailer,导致索引和时间戳信息丢失,我使用araxis merge工具比较了成功调用av_write_trailer函数的文件和未调用av_write_trailer的损坏文件,发现两个不同点:
1. 损坏的文件头框数量值不正确
2. 损坏的文件没有文件结束标志。
现在我希望在重新开机后,我的程序可以自动修复损坏的文件,在Google上没有找到有效的方法。我的想法是在正常录制过程中,每秒钟保存一个缺失两个信息的损坏文件:框数和文件结束标志,并将其保存到本地文件中。在写入MP4文件完整性后,删除此文件。如果断电损坏,则在下次通电时,读取文件并将相应的信息写入对应位置的损坏文件中。但现在的问题是我不知道如何保存框数和文件结束标志,这样做是否可行?如果可行,我该怎么做?期待您的回复!
现在我希望在重新开机后,我的程序可以自动修复损坏的文件,在Google上没有找到有效的方法。我的想法是在正常录制过程中,每秒钟保存一个缺失两个信息的损坏文件:框数和文件结束标志,并将其保存到本地文件中。在写入MP4文件完整性后,删除此文件。如果断电损坏,则在下次通电时,读取文件并将相应的信息写入对应位置的损坏文件中。但现在的问题是我不知道如何保存框数和文件结束标志,这样做是否可行?如果可行,我该怎么做?期待您的回复!