Ios AVAssetImageGenerator生成的帧不正确。同步生成框架

Ios AVAssetImageGenerator生成的帧不正确。同步生成框架,ios,avfoundation,swift4,avassetimagegenerator,Ios,Avfoundation,Swift4,Avassetimagegenerator,根据文档,generatecgimagesa同步地接收一个NSValue数组,从视频和给定时间生成帧,并作为回调返回 我使用以下代码生成一个值列表 var values : [NSValue] = [] let frameDuration = CMTimeMake(1, timeScale) for i in 0..<duration{ let lastFrameTime = CMTimeMake(Int64(i), timeScale)

根据文档,
generatecgimagesa同步地
接收一个
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")")
    }
var值:[NSValue]=[]
设frameDuration=CMTimeMake(1,时间刻度)

对于0中的i..不确定原因,但是当从主线程调用函数时,我得到了错误。但当我从后台线程调用它时,它就开始工作了

不确定解释,但下面的Swift4代码似乎可以工作,并且与单个帧提取(如
let image=imageGenerator.copyCGImage)相比要快得多。


不知道为什么,但是当从主线程调用函数时,我发现了错误。但当我从后台线程调用它时,它就开始工作了

不确定解释,但下面的Swift4代码似乎可以工作,并且与单个帧提取(如
let image=imageGenerator.copyCGImage)相比要快得多。


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

例如:

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

通过这种方式,您将获得当时的准确帧。

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

例如:

imageGenerator.requestedTimeToleranceBefore = .zero
imageGenerator.requestedTimeToleranceAfter = .zero
这样你就能得到当时的确切画面