如何使用 iPhone SDK 暂停视频录制?

发布于 2024-11-02 21:15:44 字数 185 浏览 0 评论 0原文

我看到有一个名为 iFile 的应用程序,在录制视频时具有暂停功能。他们是如何做到这一点的?我尝试使用 AVMutableComposition 类,当用户暂停时,我剪切一个新视频,然后在最后合并视频,但是合并视频的处理时间并不理想。

有人可以给我其他关于如何做到这一点的好主意吗?我注意到 iFile 方式非常无缝。

谢谢

I see there is an app called iFile with a pause feature while recording video. How do they do this? I tried using AVMutableComposition classes and when the user pauses i cut a new video and then merge the video at the end, however the processing time to merge the videos is not desirable.

Can someone give me other good ideas on how to do this? I noticed the iFile way is very seamless.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

花开半夏魅人心 2024-11-09 21:15:44

这里有一些想法。我还没有尝试过其中任何一个。

如果您使用 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 是第一个样本的时间。

希望这对您有所帮助或引导您找到解决方案。

Here are some ideas. I have not tried either of these.

If you are using an AVAssetWriter to write your captured image then you can simply drop the frames while paused. You will need to keep track of the last presentation time stamp (PTS) that was used. Then you need to calculate the next image PTS based on this last time stamp when you start recording again. Doing this with audio as well might be a little trickier.

An alternate method would be to use empty edits. I am not sure how you would insert an empty edit in the middle of a track using AVAssetWriter. I know you can insert them at the beginning and end. Using AVMutableCompositionTrack you could use insertEmptyTimeRange: where the time range is constructed like

CMTime delta = CMTimeSubtract(new_sample_time, last_sample_time)
CMTimeRangeMake(last_sample_time, delta)

Where new_sample_time is the time of the first sample after un-pausing, and last_sample_time is the time of the last sample before pausing. Again with audio this may be a little tricky as the buffer for audio generally contains 1024 samples. The CMTime returned by CMSampleBufferGetPresentationTimeStamp is the time of the first sample.

Hope this helps or leads you to a solution.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文