我看到有一个名为iFile的应用在录制视频时具有暂停功能。他们如何做到这一点?我尝试使用AVMutableComposition类,当用户暂停时,我剪切了一个新视频,然后在最后合并视频,但是合并视频的处理时间是不可取的。
有人可以就如何做到这一点给我其他好的想法吗?我注意到iFile方式非常无缝。
由于
答案 0 :(得分:1)
以下是一些想法。我没试过其中任何一个。
如果您使用AVAssetWriter来编写捕获的图像,则可以在暂停时简单地删除帧。您需要跟踪所使用的最后一个演示时间戳(PTS)。然后,当您再次开始录制时,需要根据最后一个时间戳计算下一个图像PTS。使用音频执行此操作可能会有点棘手。
另一种方法是使用空编辑。我不确定如何使用AVAssetWriter在轨道中间插入空编辑。我知道你可以在开头和结尾插入它们。使用AVMutableCompositionTrack你可以使用insertEmptyTimeRange:其中时间范围构造如
CMTime delta = CMTimeSubtract(new_sample_time, last_sample_time)
CMTimeRangeMake(last_sample_time, delta)
其中new_sample_time是取消暂停后第一个样本的时间,last_sample_time是暂停前最后一个样本的时间。再次使用音频,这可能有点棘手,因为音频缓冲区通常包含1024个样本。 CMSampleBufferGetPresentationTimeStamp返回的CMTime是第一个样本的时间。
希望这有助于或引导您找到解决方案。