Cómo ajustar un file h.264 como mp4 en iOS

Tengo un file h.264 desnudo (de una camera de raspberry pi), y me gustaría envolverlo como un mp4. No necesito reproducirlo, editarlo, agregar o eliminar nada, o acceder a los píxeles.

Mucha gente ha preguntado sobre la compilation de ffmpeg para iOS, o la transmisión de datos en vivo. Pero dada la falta de traducción fácil entre la línea de command ffmpeg y su compilation iOS, me resulta muy difícil entender cómo implementar este sencillo command:

ffmpeg -i input.h264 -vcodec copy out.mp4

No me importa específicamente si esto sucede a través de ffmpeg, avconv o AVFoundation (o alguna otra cosa). Simplemente parece que no debería ser difícil de hacer en un dispositivo.

No es difícil pero requiere trabajo y atención al detalle. Aquí está mi mejor conjetura:

  1. lea PPS / SPS desde su input.h264
  2. Extraer altura y ancho de SPS.
  3. generar encabezado avcC desde PPS / SPS
  4. cree un AVAssetWriter con el tipo de file AVFileTypeQuickTimeMovie
  5. crear un AVAssetWriterInput
  6. agregue AVAssetWriterInput como AVMediaTypeVideo con su alto y ancho al AVAssetWriter
  7. lea de su input.h264 (probablemente en el formatting del Anexo B) una NAL a la vez
  8. convierta sus NAL de su input. h264 del código de inicio con el prefijo (0 0 1; Anexo B) al tamaño con el prefijo (formatting mp4)
  9. suelte NAL de tipo AU, PPS, SPS
  10. cree un CMSampleBuffer para cada NAL y agregue un CMFormatDescription con el encabezado avcC
  11. regenere las marcas de time comenzando un cero usando la velocidad de fotogtwigs conocida (tenga cuidado si sus fotogtwigs se reorderan)
  12. añada su CMSampleBuffer a su AVAssetWriterInput
  13. Ir a 7 hasta EOF