1

I want to show thumbnail image on video url. I have to do this but not working. It is only work for local filepath not work on to came from server url.

Video URL : http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4

-(UIImage *)loadThumbNail:(NSURL *)urlVideo
{
    AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:urlVideo options:nil];
    AVAssetImageGenerator *generate = [[AVAssetImageGenerator alloc] initWithAsset:asset];
    generate.appliesPreferredTrackTransform=TRUE;
    NSError *err = NULL;
    CMTime time = CMTimeMake(1, 60);
    CGImageRef imgRef = [generate copyCGImageAtTime:time actualTime:NULL error:&err];
    NSLog(@"err==%@, imageRef==%@", err, imgRef);
    return [[UIImage alloc] initWithCGImage:imgRef];
}
Kamlesh Shingarakhiya
  • 2,757
  • 2
  • 16
  • 34
  • Refer this answer : http://stackoverflow.com/questions/37297026/getting-thumbnail-for-trimmed-video-in-swift/37297885#37297885 – Jigar Tarsariya Jun 08 '16 at 05:20
  • You can do one thing, while uploading a video u can upload thumbnail image for same video with same name with th_ prefix and while showing video on view you can show that thumbnail image and if user want to see or download video that time you can stream or download it. – Ajay Gabani Jun 08 '16 at 05:23
  • @Kamlesh Shingarakhiya , How did you solve it ? – Arpit B Parekh Mar 17 '17 at 12:10
  • I solved it using below link http://stackoverflow.com/questions/37343358/how-to-generate-the-thumbnail-of-video-url-flv-format?rq=1 first answer. – Arpit B Parekh Mar 17 '17 at 13:14
  • Yes it will take some time, So I called the code with some time interval so my UI does not freeze. – Arpit B Parekh Mar 17 '17 at 13:14

2 Answers2

0

Use this Code,

-(UIImage *)loadThumbNail:(NSURL *)urlVideo
{
    AVAsset *avAsset = [AVURLAsset URLAssetWithURL:urlVideo options:nil];

            if ([[avAsset tracksWithMediaType:AVMediaTypeVideo] count] > 0)
            {
                AVAssetImageGenerator *imageGenerator =[AVAssetImageGenerator assetImageGeneratorWithAsset:avAsset];
                Float64 durationSeconds = CMTimeGetSeconds([avAsset duration]);
                CMTime midpoint = CMTimeMakeWithSeconds(durationSeconds/2.0, 600);
                NSError *error;
                CMTime actualTime;


                CGImageRef halfWayImage = [imageGenerator copyCGImageAtTime:kCMTimeZero actualTime:&actualTime error:&error];


                if (halfWayImage != NULL)
                {

                    NSString *actualTimeString = (NSString *)CFBridgingRelease(CMTimeCopyDescription(NULL, actualTime));
                    NSString *requestedTimeString = (NSString *)CFBridgingRelease(CMTimeCopyDescription(NULL, midpoint));
                    NSLog(@"Got halfWayImage: Asked for %@, got %@", requestedTimeString, actualTimeString);

                    UIImage *img=[UIImage imageWithCGImage:halfWayImage];


                    return img; //self.myimageView.image= img; 

                }

             }

 }

dont forget the framework, #import <AssetsLibrary/AssetsLibrary.h>, its working for me,

hope its helpful.

Iyyappan Ravi
  • 3,205
  • 2
  • 16
  • 30
0
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
  {
    return 1;
  }

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
  return arrVideos.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";

VideoListingCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

  if (cell == nil)
{
    cell = [[VideoListingCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

//fetch current object
NSMutableDictionary *dict = [[arrVideos objectAtIndex:indexPath.row] mutableCopy];

//set values
if ([[dict valueForKey:kCaption] isEqual:[NSNull null]])
{
    cell.lblCaption.text =@"No caption";
}
else
{
        cell.lblCaption.text = [dict valueForKey:kCaption];
}


[cell.acivityView startAnimating];
BOOL isNonEmpty = [CommonMethods isNonEmptyString:[dict valueForKey:kThumbnailURL]];

if (isNonEmpty)
{
    NSString *strUrl = [dict valueForKey:kThumbnailURL];
    [cell.imgThumbnail sd_setImageWithURL:[NSURL URLWithString:strUrl] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
        [cell.acivityView stopAnimating];
    }];
}
else
{
    [cell.imgThumbnail setImage:[UIImage imageNamed:@"img1"]];
    [cell.acivityView stopAnimating];
}
 [cell.imgThumbnail setClipsToBounds:YES];

  return cell;
 }

   - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
 //fetch selected object
 NSMutableDictionary *dict = [[arrVideos objectAtIndex:indexPath.row]    mutableCopy];

  ExportVideoVC *obj = [self.storyboard instantiateViewControllerWithIdentifier:@"ExportVideoVC"];
obj.dictPost = [dict mutableCopy];
[self presentViewController:obj animated:YES completion:nil];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
 {
 return 124;
 }

     #pragma mark - webservice calls

   -(void)fetchAllVideos
  {
    //show progress hud
     [SVProgressHUD showWithStatus:kPleaseWait maskType:2];

    //prepare url
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"       video url ", kURL, kMediaType]];

   //ws call
     [[ServerCalls sharedObject] executeRequest:url withData:nil  method:kGET completionBlock:^(NSData *data, NSError *error) {
      if (error)
      {
          ShowAlertWithTitle(@"Please try again later", nil, kOK);

         //reload tableview
         [tblVideos reloadData];
      }
    else if (data)
     {
         NSDictionary *responseData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
         BOOL isSuccess = ![[responseData allKeys] containsObject:kMessage];
        if (isSuccess)
        {
            arrVideos = [[responseData valueForKey:kQuickSpots] mutableCopy];
        }
        else
        {
            ShowAlertWithTitle(@"Please try again later", nil, kOK);
        }
    }

    //reload tableview
    [tblVideos reloadData];

    [SVProgressHUD dismiss];
  }];
  }

this may be helps you

Chetan Hedamba
  • 229
  • 2
  • 7