我需要将从流中获取的视频帧附加到现有的mp4文件中。 我发现我需要使用 mdat 和 stco 原子来更新块表。 是否可以添加新的框架/块?我需要在ios app中执行此操作。
答案 0 :(得分:1)
这样的附加是可能的,但它可能不实用 - 特别是如果你想一次添加一帧。
MP4是一种非常“烘焙”的格式,在生成之后很难修改。这是因为“moov”框中的结构数据包含“mdat”框中重要媒体数据的文件偏移量。如果moov框位于mdat框之前(通用以允许渐进式下载),则添加到moov框的任何数据(即对附加视频中的新关键帧的引用)都会将mdat框推得更远。您不仅需要重写文件,还需要相应地更新所有文件偏移量。 (也许有一些聪明的技巧可以保持moov框的大小不变...)如果mdat框首先定位,操作仍然很尴尬,因为你需要将moov框复制到内存中,将你的新视频附加到在mdat的末尾,相应地更新moov字段,并附加新的moov框。
如果您可以收集所有新视频帧,并且在录制结束时在重写操作期间添加它们,这可能是可行的。您还可以查看Fragmented MP4(使用“moof”框),但我不确定读取此类文件的支持范围有多广泛。