Corregir el archivo 3GP después de la transmisión desde Android Media Recorder

Estoy tratando de transmitir video desde la cámara de Android a través de un socket local de Unix y escribir archivos de transmisión a sdcard. Todo funciona bien, excepto que el archivo no se puede reproducir con ningún jugador. Es porque Android no está llenando algunos huecos en el archivo porque el socket no se puede buscar. Según tengo entendido, debo hacer algunas modificaciones después de que termine el flujo de video. Leo varios articulosaquí, aquí yaquí, pero ninguno de ellos me ayudó. Estoy jugando con el editor hexadecimal para aprender a hacerlo manualmente, por lo que después será trivial hacer lo mismo en el código de Android.

Aquí está el archivo de muestra que se guardó de la corriente:https://dl.dropbox.com/u/17510473/sample_not_playable.3gp

¿Alguien puede arreglarlo para hacerlo jugable y decir cómo lo hizo?

EDITAR: Borro el encabezado del archivo 3gp y escribo uno nuevo de la siguiente manera:

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

Luego encuentro la ubicación de inicio de los átomos mdat y moov con el siguiente comando:

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

Y me da la siguiente salida:

4:ftyp
28:mdat
1414676:moov

Entonces haz1414676 - 28 = 1,414,648 = 0x1595F8

Luego escribo 0x1595F8 como 25-28 bytes, justo antes del átomo mdat. Así que mi cabecera ahora se ve así:

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

Y cuando intento reproducirlo con mplayer me sale un video dañado y una salida de audio. Aquí hay una parte de la salida de 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!

¿Que estoy haciendo mal?

Respuestas a la pregunta(2)

Su respuesta a la pregunta