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?