Moov átomo en android MeidaRecorder datos registrados

Tengo un problema:

Grabo datos de la cámara usando MediaRecorder en mi aplicación de Android. Lo guardo en socket, no en archivo. La longitud de estos datos puede ser diferente. En el otro lado de la conexión de socket, lo guardo en el archivo. La conexión puede interrumpirse en cualquier momento inesperado. Tan después de la desconexión del zócalo del androide intento descodificar datos recibidos usando ffmpeg. Pero como he entendido, no puede encontrar moov átomo en este archivo. He leído alguna información sobre moov, así que creo que MediaRecorder pone atom moov en el final del archivo. Pero si se interrumpió la grabación, se omitió la escritura del átomo moov.

También he leído que para datos con longitud desconocida (carga progresiva, streaming) es posible escribir moov átomo al inicio del archivo.

¿Cómo escribir mis propios datos moov en el flujo? ¿Puedo usar MediaRecorder para esto? ¿O es necesario hacerlo manualmente? ¿Cómo generar datos moov válidos? Si alguien ya ha resuelto este problema, por favor, dame consejos ..

El átomo 'moov' contiene la información que un jugador necesita para decodificar el medio. Para muchos formatos, un archivo mp4 o mov sin el átomo moov es sólo basura.

En la mayoría de los casos, el moov se anexa al final. Esto se debe a que el contenido del átomo moov no se puede predecir con antelación. Esto no es diferente si se coloca en el inicio y se actualiza continuamente. El beneficio de este último es que el archivo todavía puede reproducirse si el flujo se interrumpe o se detiene. En otras palabras, simplemente ponerlo en el comienzo no le ayudará, ya que todavía necesita actualizar en forma continua.

Lamentablemente, Android no está cerca de iOS cuando se trata de la manipulación de los medios de comunicación. Me sorprendería si encontraste una manera de resolver esto usando bibliotecas de Android. No tengo experiencia de MediaRecorder en particular, pero las clases de MediaCodec no ofrece nada sobre esto y después de un breve vistazo a la documentación de MediaRecorder, parece que el mismo problema aquí.

Ahora … las corrientes h264 se pueden reproducir sin un encabezado mp4 ya que contiene algunos metadatos propios. Esto permitirá que tu aplicación en el otro lado de la toma todavía utilice los datos. Puede utilizar ffmpeg para esto que está disponible para Android. Simplemente escriba los bytes en un archivo con una extensión .h264 y luego multiplexelo en un archivo mp4 después de que se haya completado la transferencia. Si tienes audio, lo mismo vale para eso.

EDIT: Si no puede enviar datos crudos h264, entonces lo encontrará en el átomo 'mdat' del archivo mp4, pero tendrá que manejar el audio por separado o no podrá decir audio y vídeo aparte.

  • Android: no se puede reproducir vídeo mp4
  • Apoye la velocidad de reproducción usando ExoPlayer
  • Error de MediaMuxer "Error al detener el muxer"
  • Metadatos de rotación de vídeo Mp4
  • Cómo reproducir vídeo mp4 con intención de mi aplicación Android? ¿Esto es posible?
  • ¿Cómo reproducir varios vídeos en una vista de lista con MediaPlayer?
  • Cómo subir un video desde un teléfono Android (como Android) mientras se está grabando
  • Android VideoView error (1,16) y muestra la pantalla en negro
  • Reproducción de un video local de aplicación (.mp4) en una vista web
  • Reproducir vídeo Mp4 desde el servidor android
  • Fusionar archivos de video mp4 en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.