我需要将从流中获取的视频帧附加到现有的 mp4 文件中。我发现我需要使用mdat和stco atom 来更新块表。是否可以附加新的帧/块?我需要在 ios 应用程序中执行此操作。
问问题
881 次
1 回答
1
这种附加是可能的,但它可能不切实际——尤其是如果您想一次添加一帧。
MP4 在很大程度上是一种“烘焙”格式,生成后很难修改。这是因为“moov”框中的结构数据包含“mdat”框中重要媒体数据的文件偏移量。如果 moov 框位于 mdat 框之前(通常允许渐进式下载),那么添加到 moov 框的任何数据(即对附加视频中新关键帧的引用)都会将 mdat 框推得更远。您不仅需要重写文件,还需要相应地更新所有文件偏移量。(也许有一些巧妙的技巧可以保持 moov 框大小不变......)如果 mdat 框首先定位,操作仍然会很尴尬,因为您需要将 moov 框复制到内存中,将新视频附加到mdat 的结尾,
如果您可以收集所有新的视频帧,并在录制结束时在重写操作期间添加它们,这可能是可行的。您还可以查看 Fragmented MP4(使用“moof”框),但我不确定对读取此类文件的支持有多广泛。
于 2012-04-25T16:44:48.750 回答