播放从iOS中ALAsset检索到的URL中的视频

时间:2010-10-05 15:21:22

标签: iphone url video ios mpmovieplayercontroller

我对Obj-C和块的想法还是比较新的。我读过这篇关于显示从ALAssets中检索到的网址图片的帖子:display image from URL retrieved from ALAsset in iPhone

除了能够使用UITableView框架查看ALAsset中的图片文件外,我还希望能够播放存储在图片文件夹中的视频。视频资产就像图片一样显示,所以我希望能够在表格中点击该视频列表并让它播放。 (换句话说,我想使用资产库框架播放视频)

可以使用MPMoviePlayerController完成吗?

从上面的那篇文章中我收集到了我需要在此函数中的代码来获取视频文件的资产URL:

ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
    {
    };

如果这是正确的,我需要在该功能中放入哪些代码才能通过MPMoviePlayerController成功播放视频?

仅供参考,我在UITableView显示资产的代码在此处:

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

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }


 [[cell imageView] setImage:[UIImage imageWithCGImage:[[assets objectAtIndex:indexPath.row] thumbnail]]];
 [[cell textLabel] setText:[NSString stringWithFormat:@"Item %d", indexPath.row+1]];

    return cell;
}

这是我的第一篇帖子,所以如果我发错了,我很抱歉。谢谢你的帮助

4 个答案:

答案 0 :(得分:3)

好的,我发现可以使用此块来吐出资产库地址的日志:

void (^assetEnumerator)(struct ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) 
{

   if(result != nil) {
        NSLog(@"See Asset: %@", result);
        [assets addObject:result];

    }
};

会吐出像

这样的东西
"See Asset: ALAsset - Type:Video, URLs:{
    "com.apple.m4v-video" = "assets-library://asset/asset.m4v?id=100&ext=m4v";    "

所以我可以将此资产库地址发送到MPMoviePlayerController,它会起作用!

像这样:

NSString *urlAddress = @"assets-library://asset/asset.m4v?id=100&ext=m4v";
NSURL *theURL = [NSURL URLWithString:urlAddress];
mp =  [[MPMoviePlayerController alloc] initWithContentURL:theURL];
etc...

现在我只想弄清楚如何动态地从ALAsset对象中获取该URL字符串,这不应该太难以理解..希望

答案 1 :(得分:3)

更容易

MPMoviePlayerViewController *moviePlayerVC =[[MPMoviePlayerViewController alloc] initWithContentURL:[[asset defaultRepresentation] url]];

答案 2 :(得分:0)

您可以使用

获取url的{​​{1}}
asset

答案 3 :(得分:0)

@ go2回答是正确的,但MoviePlayerController没有显示任何内容。

因此您还需要添加moviePlayerController.movieSourceType=MPMovieSourceTypeFile; 看下面的代码来玩这个。

MPMoviePlayerController *moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL];
[moviePlayerController.view setFrame:self.view.frame];
moviePlayerController.movieSourceType=MPMovieSourceTypeFile;
moviePlayerController.fullscreen = YES;
[moviePlayerController play];