2

我对 AVQueuePlayer 上的 removeAllItems 有疑问。

我使用 AVQueuePlayer 播放来自网络的音乐。为了播放下一首歌曲,在这个类中我们有方法 advanceToNextItem。但是对于以前我们应该创建新队列。

为什么我这样做:

- (void) initPlayer{
    ...
    playlist = [NSMutableArray array];
    playlistItems = [NSMutableArray array];
    ...
    player = [AVQueuePlayer queuePlayerWithItems:nil];
    player.actionAtItemEnd = AVPlayerActionAtItemEndAdvance;
    ...
}

- (void) play{
    if ([player.items count] <= 0){
        [self playAtIndex:0];   //first run fires here
    } 
    [player play];
}

- (void)playAtIndex:(int)index
{
    [player removeAllItems]; // <------at first run it work correctly
    for (int i = index; i <playlistItems.count; i ++) {
        AVPlayerItem* obj = [playlistItems objectAtIndex:i];
        if ([player canInsertItem:obj afterItem:nil]) {
            [obj seekToTime:kCMTimeZero];
            [player insertItem:obj afterItem:nil];
        }
    }
}

- (void) addTracks:(NSArray *)tracks{
    [playlist addObjectsFromArray:tracks];

    for (Track *track in tracks){
        AVPlayerItem *item = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:track.trackURL]];
        ...
        [playlistItems addObject:item];
    }
}

然后我与播放器一起工作:

[player initPlayer];
[player addTracks:tracksList];
[player play]; // all works fine, play next, pause and so on
...

在某个地方我去上一首曲目并调用playAtIndex:x,首先调用[player removeAllItems]并且程序在它上面崩溃。

Xcode 返回我:

*** 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“*** -[__NSArrayM objectAtIndex:]: index 2147483647 beyond bounds [0 .. 153]”

我试图只调用 [player removeAllItems] 并且它崩溃了。

哪里可能有问题?

4

0 回答 0