Я реализую 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;
}
}
}`