2

我想使用 AVPlayer 缓冲视频。我播放一个视频,我希望在第二个视频开始时没有延迟。一个想法是使用 AVURLAsset 与此代码:

     AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:urlNext options:nil];
        NSArray *keys = [NSArray arrayWithObject:@"playable"];
        [asset loadValuesAsynchronouslyForKeys:keys completionHandler:^()
         {
             dispatch_async(dispatch_get_main_queue(), ^
                            {
                                AVPlayerItem *nextVideo = [[AVPlayerItem alloc] initWithAsset:asset];
                            });
         }];

通过这种方式,想法是预加载下一个视频,当第一个视频停止时,播放它。但现在这仍然不起作用,下一个视频也不会出现。你知道我的想法是否正确,错误是什么?或者你有另一个想法来使用 AVPlayer 并有缓冲区?谢谢你。

4

1 回答 1

5

目前,我发现了一个不太优雅的解决方案,但它可以在模拟器中运行(我必须在设备中对其进行测试)。我已经使用了如何减少 iOS AVPlayer 启动延迟的想法 1,并且我创建了另一个 AVPlayer。它只是存储下一个视频(我播放并暂停它)。

    AVPlayerItem *playerItemNext = [AVPlayerItem playerItemWithURL:urlnext];
    AVPlayer *videoPlayerNext = [AVPlayer playerWithPlayerItem:playerItemNext];
    [videoPlayerNext play];
    [videoPlayerNext pause]; 

当我必须真正播放下一个视频时,我只需这样做:

     videoPlayer = videoPlayerNext;

videoPlayer 是我的播放器。显然欢迎更好的解决方案!

于 2013-08-02T09:36:37.457 回答