Подтвердить что ты не робот

AVPlayer статус всегда AVPlayerStatusReadyToPlay

Я использую AVPlayer для воспроизведения аудио с URL-адреса

В ViewDidLoad:

self.playerItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:imageText]];

self.player = [AVPlayer playerWithPlayerItem:playerItem];

[player addObserver:self forKeyPath:@"status" options:0 context:nil];

[player play];

Observer

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
                        change:(NSDictionary *)change context:(void *)context {
    if (object == player && [keyPath isEqualToString:@"status"]) {
        if (player.status == AVPlayerStatusReadyToPlay) {
            //[playingLbl setText:@"Playing Audio"];
            NSLog(@"fineee");
            [playBtn setEnabled:YES];
        } else if (player.status == AVPlayerStatusFailed) {
            // something went wrong. player.error should contain some information
            NSLog(@"not fineee");
            NSLog(@"%@",player.error);

        }
        else if (player.status == AVPlayerItemStatusUnknown) {
            NSLog(@"AVPlayer Unknown");


        }
    }
}

но игрок иногда застревает и не воспроизводит аудио, но тогда также статус AVPlayerStatusReadyToPlay. Он никогда не входит в AVPlayerStatusFailed или AVPlayerItemStatusUnknown. Поскольку я хочу обработать ошибку AVPlayer, он также должен войти в них. Пожалуйста, помогите!

4b9b3361

Ответ 1

Вы должны наблюдать за статусом CurrentItem. Ошибка AVPlayer из-за ошибки AVPlayerItem, если все пошло не так, начинается с AVPlayerItem, затем AVPlayer.

попробовать:

[item addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];

в вашем watchValueForKeyPath:

if (object == audioPlayer.currentItem && [keyPath isEqualToString:@"status"]) {
    if (audioPlayer.currentItem.status == AVPlayerItemStatusFailed) {
        NSLog(@"------player item failed:%@",audioPlayer.currentItem.error);
    }
}

Вы можете взглянуть на обработку AVPlayer или использовать ее непосредственно из HysteriaPlayer, моего проекта с открытым исходным кодом.