2012-04-19 19 views
11

Estoy tratando de obtener el primer fotograma de un video usando las clases en AVFoundation. Pero parece que no obtiene una imagen en absoluto.Primer fotograma de un video con AVFoundation

Mi código Actualmente tiene este aspecto

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

El valor de la ruta de vídeo es /var/mobile/Applications/02F42CBF-D8BD-4155-85F2-8CF1E55B5023/Documents/videos/1334300431637030.mp4 que es sin duda un vídeo, ya que puedo jugar con MPMoviePlayerViewController. No estoy seguro de lo que estoy haciendo mal, pero cualquier sugerencia sería útil.

Gracias.

Respuesta

18

Lo he resuelto. Al parecer, usar [NSURL fileURLWithPath:videoPath] en lugar de [NSURL URLWithString:videoPath] hace toda la diferencia.

7

Usé la solución null0pointer pero en algunos videos recibí el primer fotograma girado. Para resolver este problema, establezco en TRUE la propiedad de applyPreferredTrackTransform de AVAssetImageGenerator. Y este código se ve así:

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