如何在iOS上将h.264文件包装为mp4

bui*_*ded 5 video mp4 ffmpeg h.264 ios

我有一个简单的h.264文件(来自覆盆子pi相机),我想把它包装成mp4.我不需要播放,编辑,添加或删除任何内容,或访问像素.

很多人都在询问有关为iOS编译ffmpeg或流式传输实时数据的问题.但是由于ffmpeg命令行与iOS构建之间缺乏简单的转换,我很难弄清楚如何实现这个简单的命令:

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

我不特别在意这是通过ffmpeg,avconv还是AVFoundation(或其他)发生的.它似乎应该不是 - 这在设备上很难做到.

Mar*_*ann 2

这并不难,但需要一些工作和对细节的关注。这是我最好的猜测:

  1. 从您的输入中读取 PPS/SPS.h264
  2. 从 SPS 中提取高度和宽度
  3. 从 PPS/SPS 生成 avcC 标头
  4. 创建文件类型为 AVFileTypeQuickTimeMovie 的 AVAssetWriter
  5. 创建一个 AVAssetWriterInput
  6. 将 AVAssetWriterInput 作为 AVMediaTypeVideo 添加您的高度和宽度到 AVAssetWriter
  7. 从您的 input.h264(可能采用附件 B 格式)一次读取一个 NAL
  8. 将 input.h264 中的 NAL 从起始代码前缀(0 0 1;附件 B)转换为大小前缀(mp4 格式)
  9. 删除 AU、PPS、SPS 类型的 NAL
  10. 为每个 NAL 创建一个 CMSampleBuffer 并添加带有 avcC 标头的 CMFormatDescription
  11. 使用已知的帧速率重新生成从零开始的时间戳(注意您的帧是否被重新排序)
  12. 将 CMSampleBuffer 附加到 AVAssetWriterInput
  13. 转到 7 直到 EOF