3

Now I used C language and ffmpeg realize a multiplex real-time audio and video to MP4 files of the program and everything works fine, but when in the process of reuse of sudden power failure, the recording is MP4 file is damaged, VLC can not play this file. I think reason is no call to write the trailer function av_write_trailer , causing index and time stamp information lost, I use araxis merge tool compared the successful call av_write_trailer function of file and a no av_write_trailer to call the damaged files and found two different points: 1. Damaged files in the file header box number value not right 2. The damaged file no end of file.

Now I want to repair after power on my program can automatically repair the damaged files, in Google did not find effective methods. my train of thought is in the normal recording process saves per second a damaged file is missing two information: box number and end of file, save it to a local file, when writing the MP4 file integrity delete this file after, if power off damaged, then in the next power, read the file and the corresponding information to write the damaged files corresponding position to. But now the problem is that I don't know how to save the number of box and the end of the file, I this is feasible? If possible, what should I do? Looking forward to your reply!

wanglx
  • 31
  • 1
  • 5
  • 2
    If you expect power loss/crash, DO NOT record to mp4. Record to a format that can survive these events (like flv) Then convert to mp4 at the end. – szatmary Mar 21 '16 at 15:37

1 Answers1

1

The main cause of MP4 file damage is due to header or trailer not written properly on the file , then , whole file become a junk data. Thus none of the media player able to play the broken mp4 file. So, First , broken file has to be repaired before playing the file. there are some applications and tricks available to repair and get the data back links are given below :

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

https://github.com/ponchio/untrunc (Linux based OS)(ofcourse,free!!!)

Second, Manually repairing the corrupt file using HEX editor.

Logic behind this hack : This hack requires a broken mp4 file and good video file where both videos are captured from the same camera .Also its size should be larger than the broken mp4 file.

Open both video file in any HEX editor. Copy trailer part from good video file to broken video file and save it!Done!!

Note : Always have a backup of video file.

follow these links for detailed informations :

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

Third, Even tough MP4 file has many advantages , this kind of error is unpredictable and difficult to handle it. Thus , Using format such as MPG and AV_CODEC_ID_MPEG1VIDEO/AV_CODEC_ID_MPEG2VIDEO (FFMPEG) may help to avoid this kind of error. The mentioned MPG format does not require any header/trailer.if there is any sudden power failure MPG file can play the file whatever frames are stored so far.

Note : there are other formats and codec also available with this kind of properties.

Abdullah Farweez
  • 851
  • 2
  • 11
  • 25
  • 1
    Seems that Federico Ponchio made his untrunc available for everybody (non-Linux users also ;-) ): http://untrunc.it/ – Roman Feb 24 '21 at 21:13