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

问题描述:

我想在视频网址上​​显示缩略图图像。我必须这样做,但不工作。它只是为本地文件路径工作不起作用来从服务器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]; 
} 
+0

参考这样的回答:http://stackoverflow.com/questions/37297026/getting-thumbnail-for-trimmed-video-in-swift/37297885#37297885 –

+0

你可以做一件事,而上传视频时,您可以使用th_前缀将相同视频的缩略图图像上传到同名视频中,同时在视图上显示视频时,您可以显示该缩略图图像,以及用户是否想要查看或下载视频,下载它。 –

+0

@Kamlesh Shingarakhiya,你是如何解决它的? –

使用此代码,

-(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>,它的工作对我来说,

希望其帮助。

- (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 [email protected]"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]; 
    }]; 
    } 

这可能是帮助你