• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - AVAssetImageGenerator.generateCGImagesAsynchronously 的帧不正确

[复制链接]
菜鸟教程小白 发表于 2022-12-11 20:11:35 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

根据文档,generateCGImagesAsynchronously 接收 NSValue 数组,并从视频和给定时间生成帧,并将其作为回调返回。

我使用以下代码生成一个值列表

    var values : [NSValue] = []
    let frameDuration = CMTimeMake(1, timeScale)
    for i in 0..<duration{
        let lastFrameTime = CMTimeMake(Int64(i), timeScale)
        let presentationTime = (i == 0) ? lastFrameTime : CMTimeAdd(lastFrameTime, frameDuration)

        values.append(NSValue(time: presentationTime))

        //Next two lines of codes are just to cross check the output
        let image = try! imageGenerator.copyCGImage(at: presentationTime, actualTime: nil)
        let imageUrl = FileManagerUtil.getTempFileName(parentFolder: FrameExtractor.EXTRACTED_IMAGE, fileNameWithExtension: "\(Constants.FRAME_SUFFIX)\(i)\(".jpeg")")
    }

正如您在上面的代码中看到的,我使用同步方法交叉检查了结果,我可以确认 values 数组持有正确的时间引用。

但是当相同的数组被传递给 generateImageAsynchronously 方法时,对于不同的时间戳,我会重复 10 次相同的帧。也就是说,如果我的视频是 10 秒,那么我会得到 300 帧(30 fps),但第一秒的帧每个重复 10 次。当请求 1 秒时,它类似于以 0.1 秒的时间返回帧。

P.S: Though synchronous method is working fine, it is taking twice the time taken by the asynchronous method. May be because it is returning same frames. But I need it working to check the actual time usages.



Best Answer-推荐答案


您需要将 requestedTimeToleranceBeforerequestedTimeToleranceAfter 设置为您想要的精度,例如 .zero 但这可能会导致额外的延迟和成本生成图像。

例如:

imageGenerator.requestedTimeToleranceBefore = .zero
imageGenerator.requestedTimeToleranceAfter = .zero

这样你就可以得到当时的准确帧。

关于ios - AVAssetImageGenerator.generateCGImagesAsynchronously 的帧不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50483128/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap