从iOS中的普通视频创建时间点

从iOS中的普通视频创建时间点,ios,video,avfoundation,timelapse,Ios,Video,Avfoundation,Timelapse,对于这个问题,我有两种解决方案: 解决方案A 将资产转换为AVMutableComposition 通过使用removeTimeRange(…)方法移除所有其他帧的定时,每秒只保留一帧 解决方案B 使用avassetrader将所有单个帧提取为CMSampleBuffer 将[CMSampleBuffer]写入电影,根据需要每隔20帧左右跳过一次 将获得的视频文件转换为AVMutableComposition,并使用scaleTimeRange(..)减少视频的总体时间范围,以获得时间间隔效果

对于这个问题,我有两种解决方案:

解决方案A

  • 将资产转换为
    AVMutableComposition
  • 通过使用
    removeTimeRange(…)
    方法移除所有其他帧的
    定时,每秒只保留一帧
  • 解决方案B

  • 使用
    avassetrader
    将所有单个帧提取为
    CMSampleBuffer
  • [CMSampleBuffer]
    写入电影,根据需要每隔20帧左右跳过一次
  • 将获得的视频文件转换为
    AVMutableComposition
    ,并使用
    scaleTimeRange(..)
    减少视频的总体
    时间范围,以获得时间间隔效果

  • 问题

    • 第一种解决方案不适用于全高清视频,视频在多个位置冻结,seekbar显示不准确的时间
    e、 一个12秒的时间点可能只有5秒的持续时间,所以即使搜索完成,它也会继续播放

    我的意思是,由于某种原因,视频的时间安排变得一团糟

    • 第二个解决方案的速度非常慢。对于10分钟HD视频,由于所有执行都在内存中完成,因此内存将运行到无穷大

    我正在寻找一种技术,可以立即生成视频的时间点,无需等待时间解决方案a可以做到这一点,但由于时间问题和口吃,不适合


    任何建议都很好。谢谢

    您可能想试用内置的缩略图生成功能,看看它们是否足够快速/高效,满足您的需要

    它们的优点是经过优化以从视频流高效地生成图像

    只需一个接一个地显示缩略图的“幻灯片放映”视图,就可以获得所需的效果

    关键类AVAssetImageGenerator上有iInformTaion,这里包括如何使用它生成多个图像:


    您可能想试用内置的缩略图生成功能,看看它们是否足够快速/高效,满足您的需要

    它们的优点是经过优化以从视频流高效地生成图像

    只需一个接一个地显示缩略图的“幻灯片放映”视图,就可以获得所需的效果

    关键类AVAssetImageGenerator上有iInformTaion,这里包括如何使用它生成多个图像:


    谢谢你的建议Mick,如果一切顺利,我会研究它并返回一个工作示例。谢谢你的建议Mick,如果一切顺利,我会研究它并返回一个工作示例。使用解决方案B,除了使用
    CMSampleBufferCreateCopyWithNewTiming()
    修改时间戳之外。那么就不需要第3步了。必须从
    assetTrack
    中提取
    [CMSampleBuffer]
    数组这一事实使得此解决方案非常缓慢,而且会对内存造成很大压力。这不是一个好的解决办法。我想完全远离
    CMSampleBuffer
    。但如果没有其他办法,这可能是唯一的办法。哦,我明白了,你不想先处理整个文件。我错过了。使用解决方案B,除了使用
    cmSampleBufferCreateCopyWithNewTimeing()
    修改时间戳。那么就不需要第3步了。必须从
    assetTrack
    中提取
    [CMSampleBuffer]
    数组这一事实使得此解决方案非常缓慢,而且会对内存造成很大压力。这不是一个好的解决办法。我想完全远离
    CMSampleBuffer
    。但如果没有其他办法,这可能是唯一的办法。哦,我明白了,你不想先处理整个文件。我错过了。