2013-10-17 35 views
9

AVPlayerを使用してURLからオーディオを再生すると、たとえばwifiから切断するときに再生を中止することがあります。 AVPlayer:ネットワークの中断を処理する方法

[player play]; 

はAVPlayer

player.rate // Value is 1.0 

player.currentItem.isPlaybackLikelyToKeepUp // Value is YES 

player.status // Value is AVPlayerStatusReadyToPlay 

player.error // Value is nil 

を再開しませんが、プレイヤーが任意のオーディオを再生していません。

AVPlayerの接続を解除し、AVPlayer を再接続してもう一度再生を開始するにはどうすればよいですか?

+0

音声のみを再生したときにわからが、他の回答で提案されているように、ビデオのために、AVPlayerItemFailedToPlayToEndTimeNotification' 'を待ち受けていません。また、HLSライブビデオストリームでは、AVPlayerItemを再作成してAVPlayerに設定する必要があるようです。 'play()'を呼び出すだけで、シークするなどしても私たちにとってはうまくいかないようです。今すぐもっと良い解決策を探していますが、これは私がこの時点で知っている最高のものです。また、avplayeritemに '.status'が失敗した場合、再作成する必要があります(私の前提)。 – Jonny

答えて

11

ネットワークの変更を処理するには、AVPlayerItemFailedToPlayToEndTimeNotificationのオブザーバを追加する必要があります。スウィフト3で

- (void) playURL:(NSURL *)url 
{ 
    AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemFailedToPlayToEndTime:) name:AVPlayerItemFailedToPlayToEndTimeNotification object:playerItem]; 
    self.player = [AVPlayer playerWithPlayerItem:playerItem]; 
    [self.player play]; 
} 

- (void) playerItemFailedToPlayToEndTime:(NSNotification *)notification 
{ 
    NSError *error = notification.userInfo[AVPlayerItemFailedToPlayToEndTimeErrorKey]; 
    // Handle error ... 
} 
0

の0xced答え:

var playerItem: AVPlayerItem? 
var player: AVPlayer? 

func instantiatePlayer(_ url: URL) { 
    self.playerItem = AVPlayerItem(url: url)    
    self.player = AVPlayer(playerItem: self.playerItem) 
     NotificationCenter.default.addObserver(self, selector: #selector(playerItemFailedToPlay(_:)), name: NSNotification.Name.AVPlayerItemFailedToPlayToEndTime, object: nil) 
} 

func playerItemFailedToPlay(_ notification: Notification) { 
    let error = notification.userInfo?[AVPlayerItemFailedToPlayToEndTimeErrorKey] as? Error 

} 
関連する問題