Queen Solutions
Queen Solutions

Reputation: 253

How to get thumbnail of the captured video and show in UIImageView

I am capturing video it works fine but i want to get thumbnail of that video and show it in ImageView any idea how to get this below is my code.

if ([type isEqualToString:(NSString *)kUTTypeVideo] || [type isEqualToString:(NSString *)kUTTypeMovie])
{       
    NSURL*videoURL = [info objectForKey:UIImagePickerControllerMediaURL];

    NSLog(@"found a video");

    videoData = [[NSData dataWithContentsOfURL:videoURL] retain];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
    [dateFormat setDateFormat:@"dd-MM-yyyy_HH:mm:SS"];
    NSDate *now = [[[NSDate alloc] init] autorelease];
    NSDate* theDate = [dateFormat stringFromDate:now];

    NSString*myDate=[dateFormat stringFromDate:theDate];
    NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"Default Album"];

    if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
        [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:nil];        

    NSString*test=@"test";      

    NSString*testUser=[test stringByReplacingOccurrencesOfString:@" " withString:@""];  

    videopath= [[[NSString alloc] initWithString:[NSString stringWithFormat:@"%@/%@.mov",documentsDirectory,testUser]] autorelease];        


    BOOL success = [videoData writeToFile:videopath atomically:NO];     


    NSLog(@"Successs:::: %@", success ? @"YES" : @"NO");
    NSLog(@"video path --> %@",videopath);


    NSURL *movieURL = [NSURL fileURLWithPath:videopath];
    AVURLAsset *avUrl = [AVURLAsset assetWithURL:movieURL];
    CMTime time = [avUrl duration];
    int seconds = ceil(time.value/time.timescale);

//  durationTime=[NSString stringWithFormat:@"%d",seconds];

//  insertTime=[NSString stringWithFormat:@"%d",seconds];      


    NSString*messageA=[NSString stringWithFormat:@"You have recorded video of duration of %d seconds  ",seconds];       

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:messageA 
                                                   delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];


    NSDate* date = [NSDate date];
    NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd HH:MM:SS"];
    //[formatter setDateFormat:@"MM-dd-yyyy"];

    NSString* str = [formatter stringFromDate:date];

Upvotes: 1

Views: 1722

Answers (3)

Yup.
Yup.

Reputation: 1893

#import <AVFoundation/AVFoundation.h>

-(UIImage *)generateThumbImage : (NSString *)filepath {
    NSURL *url = [NSURL fileURLWithPath:filepath];

    AVAsset *asset = [AVAsset assetWithURL:url];
    AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc]initWithAsset:asset];
    CMTime time = [asset duration];
    time.value = 1000; //Time in milliseconds
    CGImageRef imageRef = [imageGenerator copyCGImageAtTime:time actualTime:NULL error:NULL];
    UIImage *thumbnail = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);  // CGImageRef won't be released by ARC

    return thumbnail;
}

Upvotes: -1

nivritgupta
nivritgupta

Reputation: 1966

add that MPMoviePlayerController (see below) is a much faster option. The code above takes a good 5-10 seconds to generate a thumbnail, and also you can show in UIImageview

NSURL *videoURL = [NSURL fileURLWithPath:url];

MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];

        UIImage *thumbnail = [player thumbnailImageAtTime:1.0 timeOption:MPMovieTimeOptionNearestKeyFrame];

        //Player autoplays audio on init
        [player stop];
        [player release];

Upvotes: 0

Dev Patel
Dev Patel

Reputation: 290

Try this one:

 #import<AssetsLibrary/AssetsLibrary.h>
 #import<AVFoundation/AVFoundation.h>
 #import <AudioToolbox/AudioToolbox.h>
 #import <CoreMedia/CoreMedia.h>
 #import <MediaPlayer/MediaPlayer.h>

 //create thumbnail from video


  AVAsset *asset = [AVAsset assetWithURL:url];// url= give your url video here
  AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc]initWithAsset:asset];
    CMTime time = CMTimeMake(1, 5);//it will create the thumbnail after the 5 sec of video 
     CGImageRef imageRef = [imageGenerator copyCGImageAtTime:time actualTime:NULL error:NULL];
   UIImage *thumbnail = [UIImage imageWithCGImage:imageRef];
 cell.backGround.image=thumbnail;// whichever imageview you want give this image

it will help you.

Upvotes: 3

Related Questions