AVPlayer状态AVPlayerStatusFailed无法正常工作 [英] AVPlayer status AVPlayerStatusFailed not working Properly

查看:99
本文介绍了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)表明我可以向用户显示消息.预先感谢

I am implementing AVPlayer (not AVAudioPlayer) and trying to play audio from URL. It is working fine. But as we know that sometimes we can have invalid URL (URL that does not have Audio byte). When I play audio from any URL AVPlayer status shows always AVPlayerStatusReadyToPlay which is wrong. For example : In URL part if give invalid URL like : http://soundx.mp3slash.net/indian/jhankar_beats/1%28mp3pk.com%29.mp3 (it does not works even in your browser) and even if you give https://stackoverflow.com/questions/ask or any site URL (which does not have audio bytes), AVPlayer shows always AVPlayerStatusReadyToPlay. I think in this case its status must AVPlayerItemStatusUnknown or AVPlayerStatusFailed Please help, how to know URL is invalid (AVPlayerItemStatusUnknown or AVPlayerStatusFailed) show that I can show message to user. Thanks in advance

-(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;
        }
    }
}`

推荐答案

AVPlayer Doc states

status属性的可能值,以指示它是否可以成功播放项目.

AVPlayerStatusReadyToPlay表示播放器已准备好播放 AVPlayerItem实例.

AVPlayerStatusReadyToPlay Indicates that the player is ready to play AVPlayerItem instances.

所以我认为您需要通过

So I think that you need to check status of particular item via status property of type AVPlayerItemStatus

这篇关于AVPlayer状态AVPlayerStatusFailed无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆