Ios AVFoundation:copyCGImageAtTime始终返回零

Ios AVFoundation:copyCGImageAtTime始终返回零,ios,swift,avfoundation,Ios,Swift,Avfoundation,我试图从视频中获取所有帧,但每次都失败 cgImage = try assetImgGenerate.copyCGImageAtTime(time, actualTime: nil) 我在中的当前代码如下所示 if let path = NSBundle.mainBundle().resourcePath { let fullPath = path + "/mov/watch_phone.mov" let url = NSURL(fileURLWithPath:

我试图从视频中获取所有帧,但每次都失败

cgImage = try assetImgGenerate.copyCGImageAtTime(time, actualTime: nil)
我在中的当前代码如下所示

if let path = NSBundle.mainBundle().resourcePath {
        let fullPath = path + "/mov/watch_phone.mov"
        let url = NSURL(fileURLWithPath: fullPath)
        mutableVideoURL = url
        getFrame()
        print(videoFrames.count)
    }

func getFrame() {
    let asset:AVAsset = AVAsset(URL:self.mutableVideoURL as NSURL)
    let assetImgGenerate:AVAssetImageGenerator = AVAssetImageGenerator(asset:asset)
    assetImgGenerate.appliesPreferredTrackTransform = true
    let duration:Float64 = CMTimeGetSeconds(asset.duration)
    let durationInt:Int = Int(duration)

    for index:Int in 0 ..< durationInt
    {
        generateFrames(assetImgGenerate, fromTime: Float64(index))
    }
}

func generateFrames(assetImgGenerate:AVAssetImageGenerator, fromTime:Float64)
{
    let time:CMTime = CMTimeMakeWithSeconds(fromTime, 600)
    let cgImage:CGImage?

    do
    {
        cgImage = try assetImgGenerate.copyCGImageAtTime(time, actualTime: nil)
        let frameImg:UIImage = UIImage(CGImage:cgImage!)
        videoFrames.append(frameImg)
    }
    catch let error as NSError {

        print("Found error in saving entity changes \(error)")
    }

请帮助我理解我在这里做错了什么

这是一个工作代码。试试这个,确保你有非零资产,正确的时间

- (UIImage *)getUIImageOfVideoAsset:(AVAsset *)asset atTime:(CMTime)time withSize:(CGSize)size {

NSError *error;
AVAssetImageGenerator *baseImageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
baseImageGenerator.appliesPreferredTrackTransform = YES;
baseImageGenerator.maximumSize = size;

CGImageRef cgImage = [baseImageGenerator copyCGImageAtTime:time actualTime:NULL error:&error];
UIImage *image = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);

return image;
}

这是一个工作代码。试试这个,确保你有非零资产,正确的时间

- (UIImage *)getUIImageOfVideoAsset:(AVAsset *)asset atTime:(CMTime)time withSize:(CGSize)size {

NSError *error;
AVAssetImageGenerator *baseImageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
baseImageGenerator.appliesPreferredTrackTransform = YES;
baseImageGenerator.maximumSize = size;

CGImageRef cgImage = [baseImageGenerator copyCGImageAtTime:time actualTime:NULL error:&error];
UIImage *image = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);

return image;
}

我也面临同样的问题,但只针对iPhone 7+(ios 10.3.2)。对于iPhoneX来说,它运行良好。我也面临同样的问题,但只有iPhone7+(ios 10.3.2)。对于iPhoneX来说,它工作得很好。