播放 AVQueuePlayer 的第 n 个项目
Play nth item of AVQueuePlayer
我有一个 AVQueuePlayer
的实例,我已经用 AVPlayerItem
的视频集合初始化了它(假设我有 10 个项目),在按钮事件中,我需要播放集合中第 n 个索引的项目。
我用过 - (void)replaceCurrentItemWithPlayerItem:(AVPlayerItem *)item
但它用传递的 AVPlayerItem
替换了当前播放的项目。
我需要播放 AVQueuePlayer
中的第 n 个 AVPlayerItem
。任何帮助将不胜感激。
- (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)。
两个想法,未测试:
一个。进步
NSUInteger indexToPlay = …
AVPlayerItem *currentItem = [queuePlayer currentItem];
NSUInteger currentIndex = [[queuePlayer items] indexOfObject:currentItem];
for (;currentIndex<indexToPlay; currentIndex++)
{
[queuePlayer advanceToNextItem];
}
乙。计算时间
使用 -duration
(AVPlayerItem
) 获取从队列开头到(但不包括)第 n 个视频的所有视频的持续时间,然后转到结果时间
-seekToTime:toleranceBefore:toleranceAfter:
.
我觉得容忍度和解码延迟应该没有问题,因为似乎时间是视频的开始。
我有一个 AVQueuePlayer
的实例,我已经用 AVPlayerItem
的视频集合初始化了它(假设我有 10 个项目),在按钮事件中,我需要播放集合中第 n 个索引的项目。
我用过 - (void)replaceCurrentItemWithPlayerItem:(AVPlayerItem *)item
但它用传递的 AVPlayerItem
替换了当前播放的项目。
我需要播放 AVQueuePlayer
中的第 n 个 AVPlayerItem
。任何帮助将不胜感激。
- (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)。
两个想法,未测试:
一个。进步
NSUInteger indexToPlay = …
AVPlayerItem *currentItem = [queuePlayer currentItem];
NSUInteger currentIndex = [[queuePlayer items] indexOfObject:currentItem];
for (;currentIndex<indexToPlay; currentIndex++)
{
[queuePlayer advanceToNextItem];
}
乙。计算时间
使用 -duration
(AVPlayerItem
) 获取从队列开头到(但不包括)第 n 个视频的所有视频的持续时间,然后转到结果时间
-seekToTime:toleranceBefore:toleranceAfter:
.
我觉得容忍度和解码延迟应该没有问题,因为似乎时间是视频的开始。