向后搜索时,AVPlayer不会更新currentPlaybackTime

vrw*_*wim 6 mpmovieplayercontroller video-streaming nstimer ios avplayer

我有一个NSTimer设置,每秒触发一次0.1,在我获取的回调中,currentTime()并使用它来更新视频持续时间的标签.

当我正在寻找前进时,通过设置rate为3,此计时器保持运行,但是当我将速率设置为-3时,视频会保持运行,但currentTime()仍然会从我开始搜索时返回相同的值.这种情况一直持续到我停止寻找然后currentTime()返回正确的时间

如何获取视频所处的当前时间,这在向后搜索时会起作用?

编辑:这是我使用的代码(从Xamarin C#翻译):

class VideoPlayer: UIView {

    var player: AVPlayer!
    var wasPaused: Bool!

    func play(url: String) {
        // set the URL to the Video Player
        let streamingURL: NSURL = NSURL(string: url)!
        player = AVPlayer(URL: streamingURL)
        let playerLayer = AVPlayerLayer(layer: player)
        layer.insertSublayer(playerLayer, atIndex: 0)

        // Reset the state
        player.seekToTime(CMTime(seconds: 0, preferredTimescale: 600))

        // Start a timer to move the scrub label
        NSTimer(timeInterval: 0.1, target: self, selector: #selector(playbackTimeUpdated), userInfo: nil, repeats: true)
    }

    func playbackTimeUpdated() {
        // This one is not correct when seeking backwards
        let time = player.currentTime().seconds;

        // Use the time to adjust a UIProgressView
    }

    // Gets called when the reverse button is released
    func reverseTouchUp() {
        player.rate = 1
    }

    // Gets called when the reverse button is pressed
    func reverseTouchDown()
    {
        player.rate = -3;
    }
}
Run Code Online (Sandbox Code Playgroud)

Ant*_*hev 2

尝试CMTimeGetSeconds(player.currentTime())代替player.currentTime().seconds. 这个对我有用。

还要检查您的计时器是否确实正在运行(例如,向其添加 NSLog 调用),也许您只是阻塞了它的线程。