Napraw plik 3GP po przesłaniu z urządzenia Android Media Recorder

Próbuję przesyłać strumieniowo wideo z kamery z systemem Android za pośrednictwem lokalnego gniazda unix i zapisywać plik ze strumienia do sdcard. Wszystko działa dobrze, z wyjątkiem tego, że plik nie jest odtwarzany przez żadnego gracza. To dlatego, że Android nie wypełnia niektórych luk w pliku, ponieważ gniazdo nie jest możliwe do odczytania. Jak rozumiem, muszę dokonać pewnych modyfikacji po zakończeniu strumienia wideo. Przeczytałem kilka artykułówtutaj, tutaj itutaj, ale żaden z nich mi nie pomógł. Gram z edytorem heksadecymalnym, aby dowiedzieć się, jak to zrobić ręcznie, więc później będzie to trywialne, aby zrobić to samo w kodzie Androida.

Oto przykładowy plik zapisany ze strumienia:https://dl.dropbox.com/u/17510473/sample_not_playable.3gp

Czy ktoś może naprawić, aby był grywalny i powiedzieć, jak to zrobił?

EDYTOWAĆ: Wymazuję nagłówek pliku 3gp i zapisuję nowy w następujący sposób:

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

Następnie znajduję początkową lokalizację atomów mdat i moov za pomocą następującej komendy:

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

I daje mi następujące dane wyjściowe:

4:ftyp
28:mdat
1414676:moov

Potem czyń1414676 - 28 = 1,414,648 = 0x1595F8

Następnie piszę 0x1595F8 jako 25-28 bajtów, tuż przed atomem mdat. Mój nagłówek wygląda teraz tak:

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

A kiedy próbuję go odtworzyć za pomocą mplayera, otrzymuję uszkodzone wyjście wideo i audio. Oto część z wyjścia mplayera:

[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!

Co robię źle?

questionAnswers(2)

yourAnswerToTheQuestion