2014-11-06 14 views
6

Finora ho il seguenteCome faccio a implementare AVAssetImageGenerator.copyCGImageAtTime in rapida

let assetUrl = NSURL.URLWithString(self.targetVideoString) 
    let asset: AVAsset = AVAsset.assetWithURL(assetUrl) as AVAsset 
    let imageGenerator = AVAssetImageGenerator(asset: asset); 
    let time : CMTime = CMTimeMakeWithSeconds(1.0, 1) 
    let actualTime : CMTime 
    let myImage: CGImage =imageGenerator.copyCGImageAtTime(requestedTime: time, actualTime:actualTime, error: <#NSErrorPointer#>) 

L'ultima riga è dove mi perdo ... Voglio semplicemente catturare un'immagine in fase di 1.0 secondi

risposta

18

La funzione viene dichiarata come

func copyCGImageAtTime(requestedTime: CMTime, actualTime: UnsafeMutablePointer<CMTime>, error outError: NSErrorPointer) -> CGImage! 

e si deve passare (inizializzate) CMTime e NSError? variabili come "espressione in-out" con &:

let assetUrl = NSURL(string: ...) 
let asset: AVAsset = AVAsset.assetWithURL(assetUrl) as AVAsset 
let imageGenerator = AVAssetImageGenerator(asset: asset); 
let time = CMTimeMakeWithSeconds(1.0, 1) 

var actualTime : CMTime = CMTimeMake(0, 0) 
var error : NSError? 
let myImage = imageGenerator.copyCGImageAtTime(time, actualTime: &actualTime, error: &error) 

Si noti anche che la vostra prima linea

let assetUrl = NSURL.URLWithString(self.targetVideoString) 

non più a compilare con l'Xcode 6.1 corrente.

2

Almeno Xcode 7.0.1 e Swift 2 assetwithURL è ora: let asset = AVAsset(URL: assetURL). L'errore di Xcode era "'assetWithURL' non disponibile: usa la costruzione di oggetti 'AVAsset (URL :)'"

5

Con Swift2.0 imageGenerator.copyCGImageAtTime è ora contrassegnato con i lanci in modo da dover gestire gli errori in un do - try - blocco di cattura.

let asset : AVAsset = AVAsset(URL: yourNSURLtoTheAsset) 
    let imageGenerator = AVAssetImageGenerator(asset: asset) 
    let time = CMTimeMakeWithSeconds(0.5, 1000) 
    var actualTime = kCMTimeZero 
    var thumbnail : CGImageRef? 
    do { 
     thumbnail = try imageGenerator.copyCGImageAtTime(time, actualTime: &actualTime) 
    } 
    catch let error as NSError { 
     print(error.localizedDescription) 
    } 
Problemi correlati