2012-04-19 4 views
11

Ich versuche, den ersten Frame eines Videos mit den Klassen in AVFoundation zu erhalten. Aber es scheint überhaupt kein Bild zu bekommen.Erster Frame eines Videos mit AVFoundation

Mein Code sieht derzeit wie diese

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]; 

Der Wert des Videopfades ist /var/mobile/Applications/02F42CBF-D8BD-4155-85F2-8CF1E55B5023/Documents/videos/1334300431637030.mp4, die auf jeden Fall ein Video ist, da ich es mit MPMoviePlayerViewController spielen kann. Ich bin mir nicht sicher, was ich falsch mache, aber irgendwelche Vorschläge wären hilfreich.

Danke.

Antwort

18

Ich löste es. Scheinbar mit [NSURL fileURLWithPath:videoPath] statt [NSURL URLWithString:videoPath] macht den Unterschied.

7

Ich verwendete null0pointer Lösung, aber in einigen Videos erhielt ich den ersten Frame gedreht. Um dieses Problem zu beheben, setze ich die Eigenschaft appliesPreferredTrackTransform von AVAssetImageGenerator auf TRUE. Und dieser Code sieht so aus:

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];