2

现在我用C语言和ffmpeg实现了一个多路实时音视频到MP4文件的程序,一切正常,但是在重用过程中突然断电,录制的是MP4文件损坏,VLC不能播放这个文件。我认为原因是没有调用编写预告片函数av_write_trailer,导致索引和时间戳信息丢失,我使用araxis合并工具比较了文件的成功调用av_write_trailer函数和没有av_write_trailer调用损坏的文件,发现两个不同点:1 .损坏的文件在文件头框编号值不对 2.损坏的文件没有文件结尾。

现在想修复我的程序开机后能自动修复损坏的文件,在谷歌上没有找到有效的方法。我的思路是在正常录制过程中每秒保存一个损坏的文件缺少两个信息:框号和文件结尾,保存到本地文件,写入MP4文件的时候完整删除这个文件后,如果断电损坏,然后在下次上电时,读取文件并将相应信息写入损坏文件的对应位置。但是现在的问题是不知道怎么保存box的个数和文件的结尾,我这个可行吗?如果可能,我应该怎么做?期待你的答复!

4

1 回答 1

0

MP4文件损坏的主要原因是文件头或尾没有正确写入文件,然后,整个文件变成垃圾数据。因此,没有一个媒体播放器能够播放损坏的 mp4 文件。因此,首先,必须在播放文件之前修复损坏的文件。有一些应用程序和技巧可用于修复和获取数据返回链接如下:

http://grauonline.de/cms2/?page_id=5 (Windows / Mac)(付费:()

https://github.com/ponchio/untrunc(基于 Linux 的操作系统)(当然,免费!!!)

其次,使用 HEX 编辑器手动修复损坏的文件。

这个hack背后的逻辑:这个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 文件可以播放文件,无论帧存储到目前为止。

注意:还有其他格式和编解码器也可用于此类属性。

于 2016-12-02T06:34:09.350 回答