如何设置来自服务器的视频网址的缩略图

时间:2016-06-08 04:48:05

标签: ios objective-c iphone video-thumbnails avurlasset

我想在视频网址上​​显示缩略图。我必须这样做,但没有工作。只有来自服务器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];
}

2 个答案:

答案 0 :(得分:0)

使用此代码,

-(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; 

                }

             }

 }

不要忘记框架,#import <AssetsLibrary/AssetsLibrary.h>,它为我工作,

希望它有所帮助。

答案 1 :(得分: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];
  }];
  }

这可能会对你有所帮助