AVPlayer不会触发playbackBufferEmpty,但不会播放

我使用AVPlayer通过互联网播放audio直播。 如果暂停时间超过1分钟,我喜欢恢复播放。

我打电话player.rate = 1.0恢复。 但是,如果数据stream暂停了1分钟以上,则不能再播放。 在这种情况下,我需要重新创buildAVPlayerItem,使其重新工作。

那么我怎么能抓住这个情况,所以我知道播放没有恢复?

  • 我在player.rate上试过KVO。 它仍然在1.0 。 玩家不玩!
  • 我在currentItem.playbackBufferEmpty上试过KVO。 这不是在这种情况下调用。
  • currentItem.status不会切换到.Failed 。 它根本没有改变。

在这种情况下AVPlayer似乎什么都不做。 有任何想法吗?

我构build了一个Playground代码来演示这个问题:

 import UIKit import AVFoundation // keep it running forever so it plays audio import XCPlayground XCPSetExecutionShouldContinueIndefinitely(true) class AVPlayerTest { let player = AVPlayer() let streamurl = NSURL(string: "http://detektor.fm/stream/mp3/musik/")! func startTest() { let item = AVPlayerItem(URL: streamurl) player.replaceCurrentItemWithPlayerItem(item) player.play() // give it some start time to build a buffer NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: #selector(timerTickedToPause), userInfo: nil, repeats: false) } @objc func timerTickedToPause(timer: NSTimer) { player.pause() // pause now for some time. 90s is not enough. NSTimer.scheduledTimerWithTimeInterval(120, target: self, selector: #selector(timerTickedToPlay), userInfo: nil, repeats: false) } @objc func timerTickedToPlay(timer: NSTimer) { // try to resume playback print(player.rate) player.play() print(player.rate) // check in some seconds if it recovered NSTimer.scheduledTimerWithTimeInterval(10, target: self, selector: #selector(timerTickedCheck), userInfo: nil, repeats: false) } @objc func timerTickedCheck(timer: NSTimer) { // it reports rate = 1.0 but is not playing here though! // there is no way to know for me it did not recover here!? print(player.rate) // recover by creating a new item works let item = AVPlayerItem(URL: streamurl) player.replaceCurrentItemWithPlayerItem(item) player.play() } } let test = AVPlayerTest() test.startTest()