AVPlayer не запускает воспроизведение PlayBufferEmpty, но не воспроизводит

Я использую AVPlayer для воспроизведения аудио через Интернет. Мне нравится восстанавливать воспроизведение, если оно было приостановлено более чем на 1 минуту.

Я звонюplayer.rate = 1.0 возобновить. Однако, если поток был приостановлен на> 1 минуту, он больше не воспроизводится. Мне нужно пересоздать AVPlayerItem в этом случае, чтобы он снова заработал.

Таккак я могу поймать этот случай, чтобы я знал, что воспроизведение не восстановить?

Я попробовал КВО наplayer.rate, Остается в1.0 хоть. Плеер не играет!Я попробовал КВО наcurrentItem.playbackBufferEmpty, Это не называется в этом случае, хотя.currentItem.status не переключается на.Failed, Это не меняет вообще.

AVPlayer просто ничего не делает в этом случае. Есть идеи?

Я строю код 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()

Ответы на вопрос(1)

Ваш ответ на вопрос