Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios AVPlayer Observer从未调用无效的URL_Ios_Avplayer - Fatal编程技术网

Ios AVPlayer Observer从未调用无效的URL

Ios AVPlayer Observer从未调用无效的URL,ios,avplayer,Ios,Avplayer,我正在尝试做一个基本的广播应用程序,我得到了一个URL列表:当我试图调用一个无效的URL(错误路径或没有可播放文件的正确路径)时,观察者似乎永远不会被调用。以下是我的部分代码: urlStream = [NSURL URLWithString:mp3URL]; self.playerItem = [AVPlayerItem playerItemWithURL:urlStream]; [playerItem addObserver:self

我正在尝试做一个基本的广播应用程序,我得到了一个URL列表:当我试图调用一个无效的URL(错误路径或没有可播放文件的正确路径)时,观察者似乎永远不会被调用。以下是我的部分代码:

        urlStream = [NSURL URLWithString:mp3URL];  

        self.playerItem = [AVPlayerItem playerItemWithURL:urlStream];

        [playerItem addObserver:self forKeyPath:@"playbackBufferEmpty"   options:NSKeyValueObservingOptionNew context:nil];
        [playerItem addObserver:self forKeyPath:@"playbackLikelyToKeepUp" options:NSKeyValueObservingOptionNew context:nil];
        [appDelegate.player addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];

        [appDelegate.player replaceCurrentItemWithPlayerItem:playerItem]; //OK

        [appDelegate.player play];
在相对观察者方法中,我得到:

    if (object == playerItem && [keyPath isEqualToString:@"playbackBufferEmpty"])
{
    if (playerItem.playbackBufferEmpty) 
    {
        NSLog(@"playbackBufferEmpty");
        [self alertBuffer];
    }

}

if (object == playerItem && [keyPath isEqualToString:@"playbackLikelyToKeepUp"])
{
    if (playerItem.playbackLikelyToKeepUp)
    {
        NSLog(@"playbackLikelyToKeepUp");
        [loadStation stopAnimating];

        if (playerItem.status == AVPlayerItemStatusReadyToPlay) {
            NSLog(@"AVPlayerItemStatusReadyToPlay");
        }
        else if (playerItem.status == AVPlayerStatusFailed) {
            NSLog(@"AVPlayerStatusFailed");
        }
        else if (playerItem.status == AVPlayerStatusUnknown) {
            NSLog(@"AVPlayerStatusUnknown");
        }
    }
}

else if (object == appDelegate.player && [keyPath isEqualToString:@"status"]) {
    if (appDelegate.player.status == AVPlayerStatusReadyToPlay) {
        NSLog(@"Player Status = Ready to Play");

    } 
    if (appDelegate.player.status == AVPlayerStatusUnknown) {
        NSLog(@"Player Status = Sometimes did wrong.");
        [self alertUnknown];
    }
    if (appDelegate.player.status == AVPlayerStatusFailed) {
        NSLog(@"Player Status = Status Failed.");
        [self alertStatusFailed];
    }

}
无论我调用什么URL,我只得到ReadyToPlay状态:当我选择无效URL时,什么都不会发生。 URL不起作用的一个例子是:

我错在哪里


非常感谢。

好的,我发现了我的错误:我将observer添加到appDelegate.player以捕获错误URL,而我所要做的就是添加到playerItem:

        [playerItem addObserver:self forKeyPath:@"status" options:0 context:nil];
在相对方法中:

         if ([playerItem status] == AVPlayerStatusFailed) {
             NSLog(@"playerItem Status = Failed.");
             NSLog(@"Error = %@",error.description);
             return;
         }
现在没事了

塔克斯