Статус AVPlayer AVPlayerStatusFailed не работает должным образом

Я реализую AVPlayer (не AVAudioPlayer) и пытаюсь воспроизвести звук с URL-адреса. Работает нормально. Но, как мы знаем, иногда у нас может быть недопустимый URL-адрес (URL-адрес, который не имеет байта звука). Когда я воспроизводю звук с любого URL-адреса, статус AVPlayer всегда показывает AVPlayerStatusReadyToPlay, что неверно. Например: в части URL, если указан недопустимый URL, например: http://soundx.mp3slash.net/indian/jhankar_beats/1%28mp3pk.com%29.mp3 (не работает даже в вашем браузере) и даже если вы дадите https://stackoverflow.com/questions/ask или любой URL-адрес сайта (который не содержит байтов звука), AVPlayer всегда показывает AVPlayerStatusReadyToPlay. Я думаю, что в этом случае его статус должен быть AVPlayerItemStatusUnknown или AVPlayerStatusFailed Пожалуйста, помогите, как узнать, что URL недействителен (AVPlayerItemStatusUnknown или AVPlayerStatusFailed), показывает, что я могу показать сообщение пользователю. Заранее благодарим

-(void)playButtonClicked

{

        NSURL *url = [NSURL URLWithString:AUDIO_URL];
        [self.audioSliderBar setMinimumValue:AUDIO_SLIDER_BAR_0];
        playerItem = [AVPlayerItem playerItemWithURL:url];
        player = [AVPlayer playerWithPlayerItem:playerItem];
        player.volume=5.0;


        [player addObserver:self forKeyPath:STATUS options:0 context:nil];

        [playerItem addObserver:self forKeyPath:PLAY_BACK_BUFFER_EMPTY options:NSKeyValueObservingOptionNew context:nil];
        [playerItem addObserver:self forKeyPath:PLAY_BACK_LIKELY_TO_KEEP_UP options:NSKeyValueObservingOptionNew context:nil];

        addObserverFlag=YES;

}

    -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:   (NSDictionary *)change context:(void *)context
{
    if (object == player && [keyPath isEqualToString:STATUS])
    {
        if (player.status == AVPlayerStatusFailed)
        {

          [ViewUtilities showAlert:AUDIO_PLAYER :AUDIO_PLAYER_FAILED_MESSAGE];

        }

        else if (player.status == AVPlayerStatusReadyToPlay)
        {

            else if (player.status == AVPlayerItemStatusUnknown)
        {
            [ViewUtilities showAlert:AUDIO_PLAYER :AUDIO_PLAYER_UNKNOWN];

        }

        if (!player)
        {
            return;
        }
    }
}`

person Ravi    schedule 08.09.2015    source источник
comment
Вы не показываете, что делаете с AVPlayer.   -  person gnasher729    schedule 08.09.2015
comment
AVPlayer не будет ничего проверять, пока вы не начнете играть, или, например, не будет использовать предварительную прокрутку.   -  person gnasher729    schedule 08.09.2015
comment
@ gnasher729, я обновил свой код, теперь посмотрите пожалуйста.   -  person Ravi    schedule 08.09.2015


Ответы (1)


Статус AVPlayer Doc

Возможные значения свойства status, чтобы указать, может ли он успешно воспроизводить элементы.

AVPlayerStatusReadyToPlay Указывает, что проигрыватель готов к воспроизведению экземпляров AVPlayerItem.

Поэтому я думаю, что вам нужно проверить статус конкретного элемента через свойство status типа AVPlayerItemStatus

person Yurii Kolesnykov    schedule 08.09.2015
comment
Спасибо @ Юрий, ты герой. Я добавлял наблюдателя на неправильный объект (проигрыватель), он должен был на playerItem (в моем приведенном выше коде). После добавления в наблюдатель playerItem вместо player он работает как шарм. Спасибо - person Ravi; 08.09.2015
comment
Отметьте этот ответ как разрешение. И если вы хотите знать, я впервые с 2011 года прочитал документ по AVPlayer. - person Yurii Kolesnykov; 08.09.2015
comment
@ Yurii, Готово (ответ как резолюция) с моей стороны, Спасибо - person Ravi; 09.09.2015