Behebung der 3GP-Datei nach dem Streaming von Android Media Recorder

Ich versuche, Video von der Android-Kamera über den lokalen Unix-Socket zu streamen und eine Datei vom Stream auf die SD-Karte zu schreiben. Alles funktioniert einwandfrei, außer, dass die Datei mit keinem Player abgespielt werden kann. Dies liegt daran, dass Android einige Lücken in der Datei nicht ausfüllt, da der Socket nicht auffindbar ist. Soweit ich weiß, muss ich nach dem Ende des Videostreams einige Änderungen vornehmen. Ich habe mehrere Artikel gelesenHier, Hier undHier, aber keiner von ihnen hat mir geholfen. Ich spiele mit dem Hex-Editor, um zu lernen, wie man es manuell macht. Daher ist es danach trivial, dasselbe im Android-Code zu tun.

Hier ist eine Beispieldatei, die aus dem Stream gespeichert wurde:https://dl.dropbox.com/u/17510473/sample_not_playable.3gp

Kann jemand das Problem beheben, um es spielbar zu machen und zu erklären, wie er es gemacht hat?

BEARBEITEN: Ich lösche den Header der 3GP-Datei und schreibe einen neuen wie folgt:

00 00 00 18 66 74 79 70 33 67 70 34 00 00 03 00 33 67 70 34 33 67 70 36 00 00 00 00

Dann finde ich die Startposition von mdat- und moov-Atomen mit folgendem Befehl:

grep -aobE "ftyp|mdat|moov" sample_not_playable.3gp

Und es gibt mir folgende Ausgabe:

4:ftyp
28:mdat
1414676:moov

Dann mach1414676 - 28 = 1,414,648 = 0x1595F8

Dann schreibe ich 0x1595F8 als 25-28 Bytes, kurz vor mdat atom. Mein Header sieht nun so aus:

00 00 00 18 66 74 79 70 33 67 70 34 00 00 03 00 33 67 70 34 33 67 70 36 00 15 95 F8

Und wenn ich versuche, es mit mplayer abzuspielen, bekomme ich eine beschädigte Video- und Audioausgabe. Hier ist ein Teil der mplayer-Ausgabe:

[amrwb @ 0x7f72ad652380]Frame too small (33 bytes). Truncated file?
[amrwb @ 0x7f72ad652380]Encountered a bad or corrupted frame
[amrwb @ 0x7f72ad652380]Encountered a bad or corrupted frame
[amrwb @ 0x7f72ad652380]Frame too small (33 bytes). Truncated file?
[amrwb @ 0x7f72ad652380]Encountered a bad or corrupted frame
[amrwb @ 0x7f72ad652380]Encountered a bad or corrupted frame
[amrwb @ 0x7f72ad652380]Encountered a bad or corrupted frame
A:  11.0 V:   1.4 A-V:  9.650 ct:  0.023   0/  0 10%  1%  1.6% 0 0                                                        
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f72adeafc40]stream 1, offset 0x15e62b: partial file
[h263 @ 0x7f72ad652380]Bad picture start code
[h263 @ 0x7f72ad652380]header damaged
Error while decoding frame!
[h263 @ 0x7f72ad652380]Bad picture start code
[h263 @ 0x7f72ad652380]header damaged
Error while decoding frame!
[h263 @ 0x7f72ad652380]Bad picture start code
[h263 @ 0x7f72ad652380]header damaged
Error while decoding frame!
A:  11.1 V:   1.5 A-V:  9.558 ct:  0.027   0/  0  9%  1%  1.4% 0 0                                                        
[h263 @ 0x7f72ad652380]Bad picture start code
[h263 @ 0x7f72ad652380]header damaged
Error while decoding frame!

Was mache ich falsch?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage