Cómo subir un video desde un teléfono Android (como Android) mientras se está grabando

Estoy tratando de escribir una aplicación que carga vídeos de teléfonos Android como se están grabando por la lectura de archivo. Mp4 y subir los bytes como se escriben en el archivo. El problema es que, por lo que puedo decir, el átomo moov y algunos otros datos variados no parecen ser escritos en el archivo hasta que la grabación de video haya terminado y el archivo de video haya sido cerrado. ¿Hay alguna forma de procesar el archivo de vídeo y agregar estos metadatos en el lado del servidor suponiendo que

  1. El archivo de vídeo completo se ha cargado (pero sin el átomo moov o cualquier otro dato que no se escribe en la primera pasada)
  2. Solo parte del video se ha cargado (por ejemplo, los primeros 10 segundos) y quiero convertirlo en un archivo mp4 válido que contenga el segmento cargado de video.

He visto enlaces como http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system, pero resuelven el problema simplemente declarando

Por lo tanto, la secuencia recibida tendrá que ser arreglada después de finalizada la grabación, o las tramas de video / audio sin procesar deben ser procesadas por el servidor.

Sin explicar exactamente cómo hacerlo.

    Como usted ha notado, el formato MP4 puede ser difícil de usar en tales situaciones. Sospecho que la entrada de blog vinculada no entra en detalles sobre la "arreglar" porque puede estar muy involucrado. Además de escribir el campo de tamaño faltante del cuadro mdat, necesitará generar los cuadros ftyp y moov. Si realmente necesita una solución MP4 de extremo a extremo, ISO 14496-12 e ISO 14496-14 le dirán más de lo que siempre quiso saber sobre cómo construir estas estructuras de datos.

    Sin embargo, es posible que encuentre que una solución mucho más elegante es utilizar un formato que realmente es adecuado para el procesamiento en tiempo real. En otras palabras, en el lado de Android, remulse el flujo de video en un formato en tiempo real y envíelo al servidor. En el lado del servidor, entonces usted tiene una gran flexibilidad para procesar el video: Puede remux todo el vídeo de nuevo en MP4, puede cortar y dados, hacer trozos de 10 segundos, o lo que sea. El proyecto de código abierto Sipdroid contiene algún código que demuestra remuxing de vídeo en directo en RTP. (Usted puede preferir un formato de transmisión confiable – RTP sobre TCP, o lo que sea – el principio es el mismo.)

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.