播放AVQueuePlayer的第n项

时间:2015-04-22 07:15:58

标签: ios objective-c cocoa-touch avqueueplayer

我有一个AVQueuePlayer的实例,我使用AVPlayerItem用一组视频初始化它(假设我有10个项目),在按钮事件中,我需要播放该项目来自该集合的第n个索引。

我使用了- (void)replaceCurrentItemWithPlayerItem:(AVPlayerItem *)item,但它用已传递的AVPlayerItem替换了当前的播放项目。

我需要播放AVPlayerItem的第AVQueuePlayer个。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:5)

两个未经测试的想法:

一个。前进

NSUInteger indexToPlay = …
AVPlayerItem *currentItem = [queuePlayer currentItem];
NSUInteger currentIndex = [[queuePlayer items] indexOfObject:currentItem];
for (;currentIndex<indexToPlay; currentIndex++)
{
  [queuePlayer advanceToNextItem];
}

B中。计算时间

使用-durationAVPlayerItem)从队列开头到(但不包括)第n个视频的所有视频获取持续时间,然后转到结果时间 -seekToTime:toleranceBefore:toleranceAfter:

我认为您应该对容差和解码延迟没有问题,因为似乎时间是视频的开始。

答案 1 :(得分:3)

- (void)playAudioAtIndex:(NSInteger)index
{
    [player removeAllItems];
    for (int i = index; i <playerItems.count; i ++) {
        AVPlayerItem* obj = [playerItems objectAtIndex:i];
        if ([player canInsertItem:obj afterItem:nil]) {
        [obj seekToTime:kCMTimeZero];
        [player insertItem:obj afterItem:nil];
        }
    }
}

playerItems是您存储AVPlayerItems的NSMutableArray(NSArray)。