【问题标题】:How to play video file from asset library using AVPlayerLayer如何使用 AVPlayerLayer 从资产库播放视频文件
【发布时间】:2014-03-03 09:26:56
【问题描述】:

我正在尝试从资产库播放 alasset MOV 文件。有人使用 AVPlayerLayer 吗? 如果是的话,一些历史会很棒......

【问题讨论】:

    标签: iphone video alasset avplayerlayer


    【解决方案1】:
    NSURL *myMovieURL = [NSURL URLWithString:_vUrl.absoluteString];
    AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:myMovieURL options:nil];
    AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithAsset:avAsset];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(playerItemDidReachEnd:)
                                                 name:AVPlayerItemDidPlayToEndTimeNotification
                                               object:playerItem];
    self.player = [[AVPlayer alloc]initWithPlayerItem:playerItem];
    [_playerlayer addObserver:self forKeyPath:@"readyForDisplay" options:0 context:nil];
    
    ((AVPlayerLayer *)[self layer]).bounds = ((AVPlayerLayer *)[self layer]).bounds;
    [(AVPlayerLayer *)[self layer] setPlayer:_player];
    _playerlayer = (AVPlayerLayer *)[self layer];
    [_player seekToTime:kCMTimeZero];
    

    【讨论】:

      【解决方案2】:

      由于沙盒,您无法从 AssetsLibrary 获取实际的文件路径。但是,您可以通过多种方式访问​​/播放视频文件。

      1) 使用 ALAssetRepresentation 的 url 方法查询 Asset 的 URL,并将其传递给 MPMoviePlayerController 的实例以播放视频。此 url 以 assets-library:// 开头,不是文件系统 url,但 MPMoviePlayerController 知道如何处理这样的 URL。

      2) 使用 ALAssetsRepresentation 的 getBytes:fromOffset:length:error: 获取视频内容,将视频保存到您自己的应用沙箱中进行播放/编辑/分享或使用 getBytes:fromOffset:length:error: 进行流式传输视频内容。

      【讨论】:

      • 我已经有了该格式的网址,但是 (assets-library://asset/asset.MOV?id=6309B178-2070-42CE-8BA8-31A4BEA16F5E&ext=MOV) 但播放器无法启动,我看到的只是黑屏。顺便说一句,我在我的 iPhone 上调试,所以没有沙盒问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      • 2012-01-06
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多