2013-10-17 21 views
9

Khi sử dụng AVPlayer để phát âm thanh từ url, nó sẽ ngừng phát khi ngắt kết nối ví dụ từ wifi.AVPlayer: Cách xử lý gián đoạn mạng

[player play]; 

Không tiếp tục AVPlayer

player.rate // Value is 1.0 

player.currentItem.isPlaybackLikelyToKeepUp // Value is YES 

player.status // Value is AVPlayerStatusReadyToPlay 

player.error // Value is nil 

Nhưng các cầu thủ không được chơi bất kỳ âm thanh.

Làm cách nào để xử lý ngắt kết nối khỏi AVPlayer, để kết nối lại AVPlayer và bắt đầu phát lại?

+0

Không chắc về khi chơi chỉ có âm thanh, nhưng dành cho video, nghe cho 'AVPlayerItemFailedToPlayToEndTimeNotification' như đề xuất trong câu trả lời khác. Ngoài ra có vẻ như đối với các luồng video trực tiếp của HLS, chúng tôi cần tạo lại AVPlayerItem và đặt nó thành AVPlayer. Chỉ cần gọi 'play()', việc tìm kiếm vv dường như không có tác dụng đối với chúng ta. Tìm kiếm một giải pháp tốt hơn ngay bây giờ nhưng đây là điều tốt nhất tôi biết tại thời điểm này. Ngoài ra nếu avplayeritem có '.status' thất bại, chúng ta cũng cần phải tạo lại nó (giả định của tôi). – Jonny

Trả lời

11

Để xử lý các thay đổi mạng, bạn phải thêm người quan sát cho AVPlayerItemFailedToPlayToEndTimeNotification.

- (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

câu trả lời 0xced trong Swift 3:

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 

} 
Các vấn đề liên quan