从iOS中的普通视频创建时间点
对于这个问题,我有两种解决方案: 解决方案A从iOS中的普通视频创建时间点,ios,video,avfoundation,timelapse,Ios,Video,Avfoundation,Timelapse,对于这个问题,我有两种解决方案: 解决方案A 将资产转换为AVMutableComposition 通过使用removeTimeRange(…)方法移除所有其他帧的定时,每秒只保留一帧 解决方案B 使用avassetrader将所有单个帧提取为CMSampleBuffer 将[CMSampleBuffer]写入电影,根据需要每隔20帧左右跳过一次 将获得的视频文件转换为AVMutableComposition,并使用scaleTimeRange(..)减少视频的总体时间范围,以获得时间间隔效果
AVMutableComposition
removeTimeRange(…)
方法移除所有其他帧的定时,每秒只保留一帧
avassetrader
将所有单个帧提取为CMSampleBuffer
[CMSampleBuffer]
写入电影,根据需要每隔20帧左右跳过一次AVMutableComposition
,并使用scaleTimeRange(..)
减少视频的总体时间范围,以获得时间间隔效果
问题
- 第一种解决方案不适用于全高清视频,视频在多个位置冻结,seekbar显示不准确的时间
- 第二个解决方案的速度非常慢。对于10分钟HD视频,由于所有执行都在内存中完成,因此内存将运行到无穷大
我正在寻找一种技术,可以立即生成视频的时间点,无需等待时间解决方案a可以做到这一点,但由于时间问题和口吃,不适合
任何建议都很好。谢谢 您可能想试用内置的缩略图生成功能,看看它们是否足够快速/高效,满足您的需要 它们的优点是经过优化以从视频流高效地生成图像 只需一个接一个地显示缩略图的“幻灯片放映”视图,就可以获得所需的效果 关键类AVAssetImageGenerator上有iInformTaion,这里包括如何使用它生成多个图像:
CMSampleBufferCreateCopyWithNewTiming()
修改时间戳之外。那么就不需要第3步了。必须从assetTrack
中提取[CMSampleBuffer]
数组这一事实使得此解决方案非常缓慢,而且会对内存造成很大压力。这不是一个好的解决办法。我想完全远离CMSampleBuffer
。但如果没有其他办法,这可能是唯一的办法。哦,我明白了,你不想先处理整个文件。我错过了。使用解决方案B,除了使用cmSampleBufferCreateCopyWithNewTimeing()
修改时间戳。那么就不需要第3步了。必须从assetTrack
中提取[CMSampleBuffer]
数组这一事实使得此解决方案非常缓慢,而且会对内存造成很大压力。这不是一个好的解决办法。我想完全远离CMSampleBuffer
。但如果没有其他办法,这可能是唯一的办法。哦,我明白了,你不想先处理整个文件。我错过了。