2012-04-19 14 views
11

Sto cercando di ottenere il primo fotogramma di un video utilizzando le classi in AVFoundation. Ma sembra non avere affatto un'immagine.Primo fotogramma di un video utilizzando AVFoundation

Il mio codice attualmente assomiglia a questo

AVURLAsset* asset = [AVURLAsset URLAssetWithURL:[NSURL URLWithString:videoPath] options:nil]; 
AVAssetImageGenerator* imageGenerator = [AVAssetImageGenerator assetImageGeneratorWithAsset:asset]; 
UIImage* image = [UIImage imageWithCGImage:[imageGenerator copyCGImageAtTime:CMTimeMake(0, 1) actualTime:nil error:nil]]; 
[videoFrame setImage:image]; 

Il valore del percorso video è /var/mobile/Applications/02F42CBF-D8BD-4155-85F2-8CF1E55B5023/Documents/videos/1334300431637030.mp4 che è sicuramente un video, dato che posso giocare con MPMoviePlayerViewController. Non sono sicuro di cosa sto sbagliando, ma qualsiasi suggerimento sarebbe utile.

Grazie.

risposta

18

Ho risolto. A quanto pare usando [NSURL fileURLWithPath:videoPath] invece di [NSURL URLWithString:videoPath] fa la differenza.

7

Ho utilizzato la soluzione null0pointer ma in alcuni video ho ricevuto il primo fotogramma ruotato. Per risolvere questo problema, ho impostato su TRUE la proprietà applyPreferredTrackTransform di AVAssetImageGenerator. E questo codice è simile al seguente:

AVURLAsset* asset = [AVURLAsset URLAssetWithURL:fileURL options:nil]; 
AVAssetImageGenerator* imageGenerator = [AVAssetImageGenerator assetImageGeneratorWithAsset:asset]; 
[imageGenerator setAppliesPreferredTrackTransform:TRUE]; 
UIImage* image = [UIImage imageWithCGImage:[imageGenerator copyCGImageAtTime:CMTimeMake(0, 1) actualTime:nil error:nil]]; 
[self.imageView setImage:image]; 
Problemi correlati