2012-03-20 17 views
9

基本的なラジオアプリを試していて、URLのリストを取得しています:無効なURL(間違ったパスまたは再生可能なファイルがない正しいパス)オブザーバーは決して呼び出されないようです。AVPlayer Observerが無効な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]; 
    } 

} 

私は私だけの状態ReadyToPlayを得呼び出すどのようなURL:私は何も起こりません不正なURLを選択した場合。 URLが正しく動作しない例:http://audioplayer.wunderground.com:80/RHBrant/Cheyenne.mp3.m3u

どこが間違っていますか?

ありがとうございます。

答えて

10

は、[OK]を、私は私のミスを見つけた:私はすべてplayerItemに追加されたしなければならなかったとき、私は悪いURLのためにキャッチするappDelegate.playerにオブザーバーを追加しました:

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

と相対的方法で

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

これで問題ありません。

Thanx

関連する問題