【问题标题】:How to get the thumbnail from .MOV file in iOS 9 and Objective C?如何从 iOS 9 和 Objective C 中的 .MOV 文件中获取缩略图?
【发布时间】:2016-07-24 17:51:12
【问题描述】:

选择或拍摄视频后,我想在下面的同伴代表旁边使用该视频的缩略图更新我的UIUImageView。我如何使用PHAsset for iOS 9 和Objective C 来做到这一点?

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{
  NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType];
  if (CFStringCompare ((__bridge CFStringRef) mediaType, kUTTypeMovie, 0) == kCFCompareEqualTo) {
    NSURL *videoUrl=(NSURL*)[info objectForKey:UIImagePickerControllerMediaURL];
    NSData *videoData = [NSData dataWithContentsOfURL:videoUrl];
  }
}

【问题讨论】:

    标签: objective-c ios9 uiimagepickercontroller phasset


    【解决方案1】:

    尝试使用下面的代码,其中asset 参数是您的PHAsset 实例:

    PHImageManager *manager = [PHImageManager defaultManager];
    
    [manager requestImageForAsset: asset
                       targetSize: CGSizeMake(100.0, 100.0) // use required size
                      contentMode: PHImageContentModeAspectFill
                          options: nil
                    resultHandler: ^(UIImage * _Nullable anImage, NSDictionary * _Nullable info) {
    
                        dispatch_async(dispatch_get_main_queue(), ^{
                            yourImageView.image = anImage;
                        });
     }];
    

    【讨论】:

      【解决方案2】:
      - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
      
        self.sourceURLString =[NSString stringWithFormat:@"%@", [info                                                         objectForKey:UIImagePickerControllerMediaURL]];
      
        dispatch_async(dispatch_get_main_queue(), ^{
          self.thumbImageView.image = [self generateThumbImage:self.sourceURLString];
          self.addVideoButton.hidden = YES;
         });
      
      }
      
      -(UIImage *)generateThumbImage : (NSString *)sourceURLString{
        NSURL *sourceMovieURL = [NSURL URLWithString:sourceURLString];
        AVURLAsset *sourceAsset = [AVURLAsset URLAssetWithURL:sourceMovieURL options:nil];
        AVAssetImageGenerator *generateImg = [[AVAssetImageGenerator alloc] initWithAsset:sourceAsset];
        NSError *error = NULL;
        CMTime time = CMTimeMake(1, 65);
        CGImageRef refImg = [generateImg copyCGImageAtTime:time actualTime:NULL error:&error];
        NSLog(@"error==%@, Refimage==%@", error, refImg);
      
        return [[UIImage alloc] initWithCGImage:refImg];
      }
      

      【讨论】:

      • 如果你使用 PhotoLibrary,那么 -requestImageForAsset 可能是更好的方法。
      【解决方案3】:
       + (UIImage *)imageFromMovie:(NSURL *)movieURL atTime:(NSTimeInterval)time {
        // set up the movie player
      MPMoviePlayerController *mp = [[MPMoviePlayerController alloc] 
      initWithContentURL:movieURL];
      mp.shouldAutoplay = NO;
      mp.initialPlaybackTime = time;
      mp.currentPlaybackTime = time;
      // get the thumbnail
      UIImage *thumbnail = [mp thumbnailImageAtTime:time 
                             timeOption:MPMovieTimeOptionNearestKeyFrame];
      // clean up the movie player
      [mp stop];
      [mp release];
      return(thumbnail);
      

      }

      【讨论】:

      • MPMoviePlayerController 在 iOS 8 中已弃用
      猜你喜欢
      • 2014-03-08
      • 2013-11-01
      • 2020-08-03
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多