2017-10-09 3 views
0

Ich versuche, die Rahmen alle von einem Video zu bekommen aber es funktioniert nicht immer beiAVFoundation: copyCGImageAtTime immer wieder zurückkehren Null

cgImage = try assetImgGenerate.copyCGImageAtTime(time, actualTime: nil) 

Meine aktuellen Code in wie folgt aussieht

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)") 
    } 

copyCGImageAtTime immer nil . Das Video wird zu meinem Bundle hinzugefügt und ist auch in den Bundle-Ressourcen in Build-Phasen enthalten.

Dies ist der Fehler im Block

Fang erhielt
Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSUnderlyingError=0x1700563e0 {Error Domain=NSOSStatusErrorDomain Code=-12430 "(null)"}, NSLocalizedFailureReason=An unknown error occurred (-12430), NSLocalizedDescription=The operation could not be completed} 

Bitte helfen Sie mir zu verstehen, was ich hier falsch

Antwort

0

Dies ist ein Arbeits Code tue. Probieren Sie dies aus und stellen Sie sicher, dass Sie nicht Null Asset, korrekte Zeit haben.

- (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; 
} 
Verwandte Themen