【问题标题】:play video from URL retrieved from ALAsset in iOS从 iOS 中的 ALAsset 检索的 URL 播放视频
【发布时间】:2010-10-05 15:21:22
【问题描述】:

我对 Obj-C 和块的概念还很陌生。我读了这篇关于显示从 ALAssets 检索的 url 中的图像的帖子:display image from URL retrieved from ALAsset in iPhone

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

这可以用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;
}

这是我的第一篇文章,如果我发错了,我很抱歉。感谢您的帮助

【问题讨论】:

    标签: iphone url video ios mpmovieplayercontroller


    【解决方案1】:

    更简单

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

    【讨论】:

    • 这对我不起作用。 URL 包含类似assets-library://asset/asset.MOV?id=12345&ext=mov 的内容。 MoviePlayerController 不显示任何内容。
    【解决方案2】:

    好吧,我发现可以用这个块吐出一个资产库地址的日志:

    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 字符串,这应该不难弄清楚.. 希望

    【讨论】:

      【解决方案3】:

      您可以使用以下方法获取asseturl

      [result defaultRepresentation] url];
      

      【讨论】:

        【解决方案4】:

        @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];
        

        【讨论】:

          猜你喜欢
          • 2023-03-28
          • 2017-09-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-17
          • 2016-06-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多