2015-04-30 49 views
5

Ho un file h.264 (da una fotocamera raspberry pi) e vorrei avvolgerlo come un mp4. Non ho bisogno di riprodurlo, modificarlo, aggiungere o rimuovere nulla, o accedere ai pixel.Come eseguire il wrapping di un file h.264 come mp4 su iOS

Un sacco di persone hanno chiesto informazioni sulla compilazione di ffmpeg per iOS o sullo streaming di dati in tempo reale. Ma data la mancanza di facile traduzione tra la linea di comando ffmpeg e le sue iOS costruire, è molto difficile per me capire come implementare questo semplice comando:

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

non specificamente interessa se questo accade via ffmpeg, avconv o AVFoundation (o qualcos'altro). Sembra proprio che non dovrebbe essere così difficile da fare su un dispositivo.

risposta

2

Non è difficile ma richiede un po 'di lavoro e attenzione ai dettagli. Qui è la mia ipotesi migliore:

  1. leggere PPS/SPS dal input.h264
  2. altezza estratto & larghezza da SPS
  3. generare un colpo di testa da AVCC PPS/SPS
  4. creare un AVAssetWriter con il tipo di file AVFileTypeQuickTimeMovie
  5. creare un AVAssetWriterInput
  6. aggiungere l'AVAssetWriterInput come AVMediaTypeVideo con la vostra altezza & larghezza al AVAsse tWriter
  7. letto dal proprio input.h264 (probabilmente nel formato Annex B) uno NAL alla volta
  8. convertire i NAL dal proprio input.h264 dal codice di avvio con prefisso (0 0 1; Allegato B) alla dimensione prefissata (formato MP4)
  9. goccia NALS di tipo AU, PPS, SPS
  10. creare un CMSampleBuffer per ogni NAL e aggiungere un CMFormatDescription con l'intestazione AVCC
  11. timestamp rigenerati partendo uno zero utilizzando la nota frame rate (attenzione se i fotogrammi vengono riordinate)
  12. accoda il tuo CMSampleBuffer al AVAssetWriterInput
  13. goto 7 fino EOF
+1

Grazie @Markus, che assomiglia ad un forte panoramica concettuale. Sareste in grado di spiegare gli acronimi e, se possibile, dare un po 'più di aiuto specifico per iOS? – buildsucceeded

+1

Potete fornirci un codice di esempio che funzioni con i passaggi indicati? –