2016-03-21 21 views
0

Jetzt habe ich C-Sprache und ffmpeg realisieren ein Multiplex-Echtzeit-Audio-und Video zu MP4-Dateien des Programms und alles funktioniert gut, aber bei der Wiederverwendung von plötzlichen Stromausfall, Die Aufnahme ist MP4-Datei ist beschädigt, VLC kann diese Datei nicht abspielen. Ich denke Grund kein Anruf ist die Trailer-Funktion av_write_trailer, wodurch Index und Zeitstempelinformationen verloren, ich benutze araxis Merge-Tool verglichen, um den erfolgreichen Aufruf av_write_trailer Funktion der Datei und ein nicht av_write_trailer ruft die beschädigten Dateien schreiben und zwei verschiedene Punkte gefunden: 1. Beschädigte Dateien in der Datei Header-Box Nummer Wert nicht richtig 2. Die beschädigte Datei kein Ende der Datei.Bei der Aufnahme MP4 mit FFmpeg plötzlich ausschalten

Jetzt möchte ich nach dem Einschalten reparieren mein Programm kann automatisch die beschädigten Dateien reparieren, in Google fand keine effektiven Methoden. mein Gedankengang ist in der normalen Aufnahme Prozess speichert pro Sekunde eine beschädigte Datei fehlt zwei Informationen: Box-Nummer und Ende der Datei, speichern Sie es in eine lokale Datei, beim Schreiben der MP4-Datei Integrität löschen Sie diese Datei nach, wenn ausgeschaltet beschädigt, dann in der nächsten Potenz, lesen Sie die Datei und die entsprechende Information, um die beschädigten Dateien entsprechende Position zu schreiben. Aber jetzt ist das Problem, dass ich nicht weiß, wie die Nummer der Box und das Ende der Datei zu speichern, ist dies machbar? Wenn möglich, was soll ich tun? Ich freue mich auf deine Antwort!

+2

Wenn Sie mit Stromausfall/-absturz rechnen, nehmen Sie NICHT auf mp4 auf. Aufnahme in ein Format, das diese Ereignisse überleben kann (wie flv) Dann am Ende in mp4 konvertieren. – szatmary

Antwort

0

Die Hauptursache für MP4-Datei Beschädigung ist wegen Header oder Trailer nicht richtig auf der Datei geschrieben, dann wird die ganze Datei zu einem Junk-Daten. Somit kann keiner der Mediaplayer die defekte MP4-Datei abspielen. So, Zuerst muss die beschädigte Datei repariert werden, bevor die Datei abgespielt wird. gibt es einige Anwendungen und Tricks zur Verfügung zu reparieren und die Daten zurück Links sind unten angegeben zu erhalten:

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

https://github.com/ponchio/untrunc (Linux-basiertes Betriebssystem) (ofcourse, kostenlos . !!!)

Zweitens manuell repariert die beschädigte Datei HEX-Editor

Logik hinter diesem Hack: dieser Hack erfordert eine gebrochene mp4-Datei und eine gute Videodatei in den beiden Videos aus dem gleichen Nocken erfaßt werden Ära. Auch sollte seine Größe größer sein als die gebrochene mp4-Datei.

Öffnen Sie beide Videodateien in einem beliebigen HEX-Editor. Kopiere Trailer von einer guten Videodatei in eine defekte Videodatei und speichere sie!

Hinweis: Immer eine Sicherung der Videodatei haben.

folgen Sie diesen Links für weitere Informationen:

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

Drittens Selbst schwere MP4-Datei hat viele Vorteile, diese Art von Fehler ist unvorhersehbar und schwierig damit umzugehen . Daher kann die Verwendung von Formaten wie MPG und AV_CODEC_ID_MPEG1VIDEO/AV_CODEC_ID_MPEG2VIDEO (FFMPEG) helfen, diese Art von Fehlern zu vermeiden.Das erwähnte MPG-Format erfordert keinen Header/Trailer. Bei einem plötzlichen Stromausfall kann die MPG-Datei die Datei abspielen, egal welche Frames bisher gespeichert wurden.

Hinweis: Es gibt andere Formate und Codec auch mit dieser Art von Eigenschaften.