4

AVPlayer を使用してアプリからローカル ビデオを再生しようとしています。どこでも見ましたが、役に立つチュートリアル/デモ/ドキュメントが見つかりません。これが私が試していることですが、再生されていません。理由はありますか?MPMoviePlayer を使用してビデオを正常に再生するために同じ URL を使用していたため、URL は有効です。

       Video *currentVideo = [videoArray objectAtIndex:0];

    NSString *filepath = currentVideo.videoURL;
    NSURL *fileURL = [NSURL fileURLWithPath:filepath];

    AVURLAsset *asset = [AVURLAsset assetWithURL: fileURL];
    AVPlayerItem *item = [AVPlayerItem playerItemWithAsset: asset];
    self.player = [[AVPlayer alloc] initWithPlayerItem: item];


    AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:self.player];
    self.player.actionAtItemEnd = AVPlayerActionAtItemEndNone;


    layer.frame = CGRectMake(0, 0, 1024, 768);
    [self.view.layer addSublayer: layer];


    [self.player play];
4

1 に答える 1

5

問題は、この行を実行した後AVURLAsset *asset = [AVURLAsset assetWithURL: fileURL];、アセットを使用する準備ができていると想定していることだと思います。AV Foundation Programming Guideに記載されているように、これは当てはまりません。

    You create an asset from a URL using AVURLAsset. Creating the asset, however, 
    does not necessarily mean that it’s ready for use. To be used, an asset must 
    have loaded its tracks.

アセットを作成したら、そのトラックをロードしてみてください:

AVURLAsset *asset = [AVURLAsset URLAssetWithURL:fileURL options:nil];
NSString *tracksKey = @"tracks";

[asset loadValuesAsynchronouslyForKeys:@[tracksKey] completionHandler:
 ^{
     NSError *error;
     AVKeyValueStatus status = [asset statusOfValueForKey:tracksKey error:&error];

     if (status == AVKeyValueStatusLoaded) { 

         // At this point you know the asset is ready
         self.playerItem = [AVPlayerItem playerItemWithAsset:asset];

         ...
     }
 }];

完全な例を確認するには、このリンクを参照してください。

お役に立てれば!

于 2013-10-11T21:01:55.537 に答える