2012-05-08 10 views
5

क्या कोई मुझे बता सकता है कि वीडियो से छवियों को निकालने का तरीका कैसे? क्या मैं अब है जब तक की कोशिश की किया है मैं ve इन का पालन करें:वीडियो से छवियों को निकालने के लिए कैसे?

आदि और उसके बाद मैं इस किया है:

स्रोत कोड:

- (void)viewDidLoad 
{ 
    videoPicker = [[UIImagePickerController alloc] init]; 
    [videoPicker setDelegate:self]; 
    videoPicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
    NSArray *mediaTypesAllowed = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; 
    videoPicker.mediaTypes = mediaTypesAllowed; 
    videoPicker.view.hidden = YES; 
} 


-(IBAction)imgPickerController 
{ 
    [self presentModalViewController:videoPicker animated:YES]; 
    videoPicker.view.hidden = NO; 
} 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    // e.g. 
    NSString *tempFilePath = [(NSURL *)[info valueForKey:UIImagePickerControllerMediaURL] absoluteString]; 

    NSLog(@"didFinishPickingMediaWithInfo: %@",tempFilePath); 

    // e.g. /private/var/mobile/Applications/D1E784A4-EC1A-402B-81BF-F36D3A08A332/tmp/capture/capturedvideo.MOV 
    tempFilePath = [tempFilePath substringFromIndex:16]; 

    NSLog(@"didFinishPickingMediaWithInfo: %@",tempFilePath); 
    NSLog(@"===Try to save video to camera roll.==="); 
    NSLog(@"UIVideoAtPathIsCompatibleWithSavedPhotosAlbum: %@",UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(tempFilePath)? @"YES":@"NO"); 

    // Check if the video file can be saved to camera roll. 
    if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(tempFilePath)) 
    { 
     // YES. Copy it to the camera roll. 
     UISaveVideoAtPathToSavedPhotosAlbum(tempFilePath, self, @selector(video:didFinishSavingWithError:contextInfo:),(__bridge_retained void *)tempFilePath); 
    } 

    [self dismissModalViewControllerAnimated:YES]; 
} 

- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo:(NSString *)contextInfo 
{ 
    NSLog(@"didFinishSavingWithError--videoPath in camera roll:%@",videoPath); 
    NSLog(@"didFinishSavingWithError--videoPath in temp directory:%@",contextInfo); 

    // The thumbnail jpg should located in this directory. 
    NSString *thumbnailDirectory = [[contextInfo stringByDeletingLastPathComponent] stringByDeletingLastPathComponent]; 

    // Debug info. list all files in the directory of the video file. 
    // e.g. /private/var/mobile/Applications/D1E784A4-EC1A-402B-81BF-F36D3A08A332/tmp/capture 
    NSLog(@"%@",[contextInfo stringByDeletingLastPathComponent]); 
    NSLog(@"%@",[[[NSFileManager defaultManager] contentsOfDirectoryAtPath:[contextInfo stringByDeletingLastPathComponent] error:nil] description]); 

    // Debug info. list all files in the parent directory of the video file, i.e. the "~/tmp" directory. 
    // e.g. /private/var/mobile/Applications/D1E784A4-EC1A-402B-81BF-F36D3A08A332/tmp 
    NSLog(@"%@",thumbnailDirectory); 
    NSLog(@"%@",[[[NSFileManager defaultManager] contentsOfDirectoryAtPath:thumbnailDirectory error:nil] description]); 
    /////////////////// 

    // Find the thumbnail for the video just recorded. 
    NSString *file,*latestFile; 

    NSDate *latestDate = [NSDate distantPast]; 
    NSDirectoryEnumerator *dirEnum = [[NSFileManager defaultManager] enumeratorAtPath:[[contextInfo stringByDeletingLastPathComponent]stringByDeletingLastPathComponent]]; 

    // Enumerate all files in the ~/tmp directory 
    while (file = [dirEnum nextObject]) 
    { 
     // Only check files with jpg extension. 
     if ([[file pathExtension] isEqualToString: @"jpg"]) 
     { 
      NSLog(@"***latestDate:%@",latestDate); 
      NSLog(@"***file name:%@",file); 
      NSLog(@"***NSFileSize:%@", [[dirEnum fileAttributes] valueForKey:@"NSFileSize"]); 
      NSLog(@"***NSFileModificationDate:%@", [[dirEnum fileAttributes] valueForKey:@"NSFileModificationDate"]); 

      // Check if current jpg file is the latest one. 
      if ([(NSDate *)[[dirEnum fileAttributes] valueForKey:@"NSFileModificationDate"] compare:latestDate] == NSOrderedDescending) 
      { 
       latestDate = [[dirEnum fileAttributes] valueForKey:@"NSFileModificationDate"]; 
       latestFile = file; 
       NSLog(@"***latestFile changed:%@",latestFile); 
      } 
     } 
    } 

    // The thumbnail path. 
    latestFile = [NSTemporaryDirectory() stringByAppendingPathComponent:latestFile]; 
    NSLog(@"****** The thumbnail file should be this one:%@",latestFile); 

    UIImage *img = [[UIImage alloc] initWithContentsOfFile:latestFile]; 
    UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(150, 150, 100, 100)]; 
    [imgView setImage:img]; 
    imgView.layer.borderWidth = 2.0; 
    [self.view addSubview:imgView]; 

    // Your code ... 
    // Your code ... 
    // Your code ... 
} 

यह सब अब भी मैं पहुँच सहारे मैं कहाँ सहारे चित्र प्राप्त reach.i करना चाहते करने के बाद still.I'm अटक now.Pls किसी को भी मेरी मदद कर बाहर !!! धन्यवाद :)

उत्तर

12

किसी फिल्म से थंबनेल निकालने का सरल तरीका MPMoviePlayerController वर्ग और इसकी - thumbnailImageAtTime:timeOption: विधि का उपयोग करना है।

उदाहरण के लिए आप एक filepath यूआरएल है:

NSURL *tempFilePathURL = ...; 
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL: tempFilePathURL]; 
UIImage *thumbnail = [player thumbnailImageAtTime:THUMBNAIL_TIME timeOption:MPMovieTimeOptionExact]; 
[player release]; 

मैं अपने कोड में इसका इस्तेमाल किया है और यह काम किया।

+0

क्या आप मुझे बता सकते हैं कि मैं इस थंबनेल का मार्ग और विस्तार कैसे प्राप्त कर सकता हूं ?? –

+1

मेरे उदाहरण के अनुसार आपको UIImage ऑब्जेक्ट मिलेगा। फिर आप इसे पीएनजी या जेपीजी के रूप में सहेज सकते हैं। –

+0

ठीक है दोस्त दोस्त :) –

4

थंबनेल इमेजएटटाइम: टाइमऑप्शन आईओएस 7.0 के बाद से हटा दिया गया है। यहां एक वैकल्पिक

+ (UIImage *)extractFirstFrameFromFilepath:(NSString *)filepath 
{ 
    AVURLAsset *movieAsset = [[AVURLAsset alloc] initWithURL:[NSURL fileURLWithPath:filepath] options:nil]; 
    AVAssetImageGenerator *assetImageGemerator = [[AVAssetImageGenerator alloc] initWithAsset:movieAsset]; 
    assetImageGemerator.appliesPreferredTrackTransform = YES; 
    CGImageRef frameRef = [assetImageGemerator copyCGImageAtTime:CMTimeMake(1, 2) actualTime:nil error:nil]; 
    return [[UIImage alloc] initWithCGImage:frameRef]; 
} 
+1

क्या हम पूरे वीडियो के माध्यम से इसे फिर से लिख सकते हैं? या शायद हर 1 सेकंड। – benjaminhallock

संबंधित मुद्दे