Исправить файл 3GP после потоковой передачи с Android Media Recorder

Я пытаюсь потоковое видео с камеры Android через локальный сокет Unix и записать файл из потока на SDCard. Все отлично работает, кроме файла не воспроизводится ни на одном плеере. Это потому, что Android не заполняет некоторые пробелы в файле, потому что сокет не доступен для поиска. Как я понимаю, мне нужно внести некоторые изменения после окончания видеопотока. Я прочитал несколько статейВот, Вот а такжеВот, но никто из них не помог мне. Я играю с шестнадцатеричным редактором, чтобы научиться делать это вручную, поэтому после этого будет тривиально сделать то же самое в коде Android.

Вот пример файла, который был сохранен из потока:https://dl.dropbox.com/u/17510473/sample_not_playable.3gp

Может кто-нибудь исправить, чтобы сделать его играбельным и рассказать как он это сделал?

EDIT: Я удаляю заголовок файла 3gp и пишу новый следующим образом:

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

Затем я нахожу начальное местоположение атомов mdat и moov с помощью следующей команды:

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

И это дает мне следующий вывод:

4:ftyp
28:mdat
1414676:moov

Тогда сделай1414676 - 28 = 1,414,648 = 0x1595F8

Затем я пишу 0x1595F8 как 25-28 байт, как раз перед атомом mdat. Так что мой заголовок теперь выглядит так:

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

И когда я пытаюсь воспроизвести его с помощью mplayer, я получаю несколько поврежденных видео и аудио выходов. Вот некоторая часть из вывода mplayer:

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

Что я делаю не так?

Ответы на вопрос(2)

Ваш ответ на вопрос