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

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

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

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

РЕДАКТИРОВАТЬ:Я стираю заголовок файла 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!

Что я делаю неправильно?

12
задан Community 23 May 2017 в 10:26
поделиться