捕获视频截图的问题

elp*_*elp 1 video objective-c mpmovieplayercontroller ipad ios

我想在我的ipad应用程序上截取视频截图.

我搜索了SO,我发现了很多示例代码.我尝试了一切,但似乎没有任何工作.

我尝试了所有这些方法:


1)尝试使用:MPMoviePlayerController

- (void) previewWithPlayer:(NSString*)path image:(UIImageView*)imView
{
  MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:path]];
  UIImage *thumbnail = [player thumbnailImageAtTime:1.0 timeOption:MPMovieTimeOptionNearestKeyFrame];
  [player stop];
  [player release];

  imView.image = thumbnail;
}
Run Code Online (Sandbox Code Playgroud)

2)尝试使用:AVAssetImageGenerator - v1

- (void) generateImage:(NSString*)path image:(UIImageView*)imView
{
  AVAsset *asset = [AVAsset assetWithURL:[NSURL URLWithString:path]];
  AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc]initWithAsset:asset];
  CMTime time = CMTimeMake(1, 1);
  UIImage *thumbnail = [UIImage imageWithCGImage:[imageGenerator copyCGImageAtTime:time actualTime:NULL error:NULL]];
  imView.image = thumbnail;
}
Run Code Online (Sandbox Code Playgroud)

13)尝试使用:AVAssetImageGenerator - v2

- (void) generateImage:(NSString*)path image:(UIImageView*)imView
{
  AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:[NSURL URLWithString:path] options:nil];
  AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
  generator.appliesPreferredTrackTransform=TRUE;
  [asset release];
  CMTime thumbTime = CMTimeMakeWithSeconds(2,30);

  AVAssetImageGeneratorCompletionHandler handler = ^(CMTime requestedTime, CGImageRef im, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error){
    if (result != AVAssetImageGeneratorSucceeded) {
      NSLog(@"couldn't generate thumbnail, error:%@", error);
    }

    UIImage *thumbImg = [[UIImage imageWithCGImage:im] retain];
    imView.image = thumbImg;
    [generator release];
  };

  CGSize maxSize = CGSizeMake(320, 180);
  generator.maximumSize = maxSize;
  [generator generateCGImagesAsynchronouslyForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:thumbTime]] completionHandler:handler];
}
Run Code Online (Sandbox Code Playgroud)

nothig有效.
我试过MOV,MP4,没什么.

路径是正确的,视频正在运行.

NSString *fPath = [[NSBundle mainBundle] pathForResource:@"VideoA" ofType:@"mp4"];
NSLog(@"%@", fPath);
[self generateImage:fPath image:_ImgA];
Run Code Online (Sandbox Code Playgroud)

可能是什么问题?我的图像视图没有显示任何内容,也没有返回错
iPad是6.0/5.1,在iPad模拟器/设备上.

视频为854×480像素,H.264,AAC.大约30Mb的大小.

请帮助我,因为我对这个问题感到疯狂.

谢谢.


编辑

在设备上返回此错误:

无法生成缩略图,错误:错误域= NSURLErrorDomain代码= -1"未知错误"UserInfo = 0x1e0a2f30 {NSUnderlyingError = 0x1e0a3900"操作无法完成.(OSStatus error -12935.)",NSLocalizedDescription = unknown error}

elp*_*elp 6

解决了.
诀窍:使用fileURLWithPath:,而不是URLWithString:.显然,差异确实非常重要.

感谢诺亚./sf/answers/294099361/