iPhone使用AVFoundation从video中读取UIimage(帧)

对不起,我的英文)寻找从iPhonevideo阅读框架信息,我发现这个项目, http://www.codza.com/extracting-frames-from-movies-on-iphone/comment-page-1#comment -1116 ,但我也读过的地方,你可以使用AVFoundation从video捕捉帧更好的性能..

但是我找不到如何做到这一点的信息…

一些想法?

谢谢阅读

您正在讨论如何使用调用来生成Apple在特定时间调用video的缩略图

对于MPMoviePlayerController(iOS用来保存来自文件或其他源的video),有两个命令可以执行此操作。 第一个在特定的时间点从电影中生成一个缩略图(图像),第二个在一个时间范围内生成一组缩略图。

此示例在10秒内将图像获取到影片剪辑myMovie.mp4中

MPMoviePlayerController *movie = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:@"myMovie.mp4"]]; UIImage *singleFrameImage = [movie thumbnailImageAtTime:10 timeOption:MPMovieTimeOptionExact]; 

请注意,这是同步执行 – 即用户将被迫等待,而你得到的截图。

另一种select是从一系列的电影中获得一系列的图像:

 MPMoviePlayerController *movie = [[MPMoviePlayerController alloc] initWithContentURL [NSURL URLWithString:@"myMovie.mp4"]]; NSNumber time1 = 10; NSNumber time2 = 11; NSNumber time3 = 12; NSArray *times = [NSArray arrayWithObjects:time1,time2,time3,nil]; [movie requestThumbnailImagesAtTimes:times timeOption:MPMovieTimeOptionExact]; 

第二种方法将在每次生成新图像时触发MPMoviePlayerThumbnailImageRequestDidFinishNotificationtypes的通知。 你可以设置一个观察者来监视这个并处理图像 – 我会让你自己去工作一下!

你也可以试试AVAssetImageGenerator ,具体生成 CGImagesAsynchronouslyForTimes :completionHandler 。

这个答案有很好的示例代码。

Swift 2代码采用AVAssetImageGenerator框架:

 func previewImageForLocalVideo(url:NSURL) -> UIImage? { let asset = AVAsset(URL: url) let imageGenerator = AVAssetImageGenerator(asset: asset) imageGenerator.appliesPreferredTrackTransform = true var time = asset.duration //If possible - take not the first frame (it could be completely black or white on camara's videos) time.value = min(time.value, 2) do { let imageRef = try imageGenerator.copyCGImageAtTime(time, actualTime: nil) return UIImage(CGImage: imageRef) } catch let error as NSError { print("Image generation failed with error \(error)") return nil } }