我如何设置来自服务器的视频网址的缩略图图像
问题描述:
我想在视频网址上显示缩略图图像。我必须这样做,但不工作。它只是为本地文件路径工作不起作用来从服务器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];
}
答
使用此代码,
-(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];
}];
}
这可能是帮助你
参考这样的回答:http://stackoverflow.com/questions/37297026/getting-thumbnail-for-trimmed-video-in-swift/37297885#37297885 –
你可以做一件事,而上传视频时,您可以使用th_前缀将相同视频的缩略图图像上传到同名视频中,同时在视图上显示视频时,您可以显示该缩略图图像,以及用户是否想要查看或下载视频,下载它。 –
@Kamlesh Shingarakhiya,你是如何解决它的? –