2010-10-05 90 views
3

我对Obj-C和块的想法还是比较新的。我看到这篇文章有关显示从URL从ALAssets检索到的图像:display image from URL retrieved from ALAsset in iPhone从iOS中的ALAsset中检索的URL播放视频

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

这可以用MPMoviePlayerController来完成吗?

从那个帖子上面我收集我需要这个代码函数内部获得的资产网址的视频文件:

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

这是我的第一篇文章,所以我很抱歉,如果我将它张贴错了。感谢您的帮助

回答

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... 

现在我得弄清楚如何获取URL字符串出ALAsset对象的动态,这应该不是太难搞清楚..希望

3

更容易

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

这对我不起作用。该URL包含类似'assets-library://asset/asset.MOV?id = 12345&ext = mov'。 MoviePlayerController不显示任何内容。 – 2013-01-16 12:44:17

0

您可以通过使用获得的asseturl

[result defaultRepresentation] url]; 
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];