2012-07-17 16 views
13

Estoy trabajando en el dispositivo en vivo para la transmisión de servidor en android. Puedo enviar datos en bytes en el servidor pero cuando juego ese archivo durante la grabación en el servidor VLC dicen que MOOV átomo no encontrado. Después de una gran cantidad de solución encontré que MOOV átomo de un archivo mp4 genera al final. Pero tengo que reproducir ese archivo en el servidor mientras la grabación significa en vivo. Voy a través del código fuente de SPYDROID y SIPDROID pero ninguno de ellos está funcionando. Traté de agregar mover átomo en el servidor usando FFMPEG pero no tuve éxito. Alguien tiene alguna idea de cómo puedo lograr esto. Gracias por adelantado.Cómo agregar un átomo MOOV en un archivo de video mp4

Respuesta

2

Ejecute qt_faststart para mover el átomo moov al principio de la secuencia.

qt-faststart in.mp4 out.mp4 
+0

d33pika..thnx hi ur RPLY, quiero enviar datos de vídeo en el servidor durante la grabación, pero un átomo moov genera después de la grabación haya terminado así que por eso creo qt-FastStart no será útil en este caso. – Ravinder

+0

¿Has resuelto tu problema @Ravinder? Estoy tratando de hacer exactamente lo mismo ahora y no veo una solución viable. Si conoce uno, publique un comentario aquí. –

+0

¿Cómo se usa qt-faststart en android? ¿Alguien puede publicar un código de ejemplo? –

6

Tienes un problema. El cuadro 'moov' es una especie de tabla de contenidos. Si no todo el contenido está allí, no puede tener una tabla completa de contenidos. ¡Ay!

Si quiere seguir con MP4 y si está escribiendo el archivo usted mismo, podría escribir el archivo como el llamado archivo MP4 fragmentado. Un archivo MP4 fragmentado contiene varias partes pequeñas del video, cada una con su propia tabla de contenido. Le permitirá reproducir el archivo antes de que la grabación completa haya finalizado.

Si no necesita seguir con MP4, una opción sería escribir el flujo de h264 sin procesar en el servidor. Entonces no tienes ese tipo de tabla de contenido. VLC puede reproducir flujos h264 sin formato.

+0

ho sebsatian, no puedo obtener datos de filas en Android mientras grabo video, ¿pueden decirme cómo puedo lograr eso? – Ravinder

+0

Conozco MP4 pero no a Android en particular. Tal vez deberías crear una nueva pregunta. –

+0

Otra forma de hacerlo podría ser grabar solo uno o dos segundos y volver a concatenar en el servidor? –

3

Utilice MP4Box para mover el átomo MOOV al inicio del archivo y entrelazar para transmitir en trozos.

MP4Box test.mp4 test.mp4 
+3

No funciona para mí. Devuelve: Error - 2 nombres de entrada especificados, verifique el uso MP4Box versión 0.5.0-rev4065 –

0

Añadir a su Gradle este lib: compilación 'net.ypresto.qtfaststartjava: qtfaststart: 0.1.0' y luego

File input = new File(path + "/input.mp4"); // Your input file 
File output = new File(path + "/output.mp4"); // Your output file 
try{ 
    if(!output.exists()) // if there is no output file we'll create one 
     output.createNewFile(); 
    } 
}catch (IOException e){ 
    Log.e("TAG", e.toString()); 
} 

try{ 
    QtFastStart.fastStart(input, output); // Adds moov to your input 
              // Now your output file is ready to stream! 
}catch (QtFastStart.MalformedFileException m){ 
    Log.e("QT", m.toString()); 
}catch (QtFastStart.UnsupportedFileException q){ 
    Log.e("QT", q.toString()); 
}catch (IOException i){ 
    Log.e("QT", i.toString()); 
} 

Aquí eso es todo

0

es posible para mover el átomo moov al comienzo del archivo de video usando FFMpeg.

ffmpeg -i input_video_file.mp4 -vcodec copy -acodec copy -movflags +faststart output_video_file.mp4 
Cuestiones relacionadas