现在我用C语言和ffmpeg实现了一个多路复用的实时音频和视频到程序的MP4文件,一切正常,但在重用突然断电的过程中,录制的是MP4文件损坏, VLC无法播放此文件。 我认为原因是没有调用编写预告片功能 av_write_trailer ,导致索引和时间戳信息丢失,我使用araxis合并工具比较成功调用 av_write_trailer 文件的功能和没有 av_write_trailer 来调用损坏的文件,发现了两个不同的点: 1.文件标题框编号值中的文件损坏不正确 2.损坏的文件没有文件结尾。
现在我想修复上电后我的程序可以自动修复损坏的文件,在谷歌没有找到有效的方法。 我的思路是在正常录制过程中每秒保存一个损坏的文件丢失两个信息:盒号和文件结尾,保存到本地文件,写入MP4文件完整后删除此文件,如果断电损坏,然后在下一个电源中,读取文件和相应的信息,将损坏的文件写入相应的位置。但现在问题是我不知道如何保存盒子的数量和文件的结尾,我这是可行的吗?如果可能,我该怎么办?期待您的回复!答案 0 :(得分:0)
MP4文件损坏的主要原因是由于文件中没有正确写入标题或预告片,然后,整个文件变成垃圾数据。因此,没有一个媒体播放器能够播放损坏的mp4文件。 所以, 首先,在播放文件之前必须修复损坏的文件。 有一些应用程序和技巧可用于修复和获取数据 链接如下:
http://grauonline.de/cms2/?page_id=5(Windows / Mac)(付费:()
https://github.com/ponchio/untrunc(基于Linux的操作系统)(当然,免费!!!)
其次,使用HEX编辑器手动修复损坏的文件。
这个黑客背后的逻辑: 这个hack需要一个破坏的mp4文件和良好的视频文件,其中两个视频都是从同一个摄像头捕获的。它的大小也应该比破坏的mp4文件大。
在任何HEX编辑器中打开两个视频文件。将预告片部分从好视频文件复制到损坏的视频文件并保存!完成!!
注意:始终备有视频文件。
请按照以下链接获取详细信息:
http://janit.iki.fi/repair-corrupted-mp4-video/
https://www.lfs.net/forum/thread/45156-Repair-a-corrupt-mp4-file%3F
http://hackaday.com/2015/04/02/manual-data-recovery-with-a-hex-editor/
http://www.hexview.org/hex-repair-corrupt-file.html
第三,即使是强硬的MP4文件也有很多优点,这种错误是不可预测的,难以处理。 因此,使用诸如MPG和AV_CODEC_ID_MPEG1VIDEO / AV_CODEC_ID_MPEG2VIDEO(FFMPEG)之类的格式可以帮助避免这种错误。提到的MPG格式不需要任何标题/预告片。如果有任何突然断电,MPG文件可以播放文件到目前为止存储的任何帧。
注意:此类属性还提供其他格式和编解码器。