6

Ich habe eine NSTimer Konfiguration, die alle 0.1 Sekunden auslöst, im Callback hole ich currentTime() und benutze es, um das Label mit der Dauer des Videos zu aktualisieren. Wenn ich vorwärts suche, indem ich die rate auf 3 setze, hält dieser Timer an, aber wenn ich die Rate auf -3 setze, läuft das Video weiter, aber die currentTime() gibt immer noch denselben Wert zurück, als ich anfing zu suchen . Dies geschieht, bis ich aufhören zu suchen und dann currentTime() gibt die richtige Zeit zurückAVPlayer aktualisiert currentPlaybackTime nicht bei Rückwärtssuche

Wie kann ich die aktuelle Zeit abrufen, die das Video ist, die funktioniert, wenn rückwärts suchen?

Edit: Hier ist der Code I (übersetzt von Xamarin C#) verwenden:

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; 
    } 
} 
+0

Können Sie bitte Code hinzufügen? Ich habe dieses Verhalten in [Demo-Projekt] (https://developer.apple.com/library/ios/samplecode/AVPlayerDemo/Introduction/Intro.html) versucht, funktioniert wie erwartet. –

+0

@RomanErmolov Ich habe meinen Code hinzugefügt, ich werde in den Code schauen, um zu sehen, was ich falsch mache – vrwim

Antwort

2

Versuchen CMTimeGetSeconds(player.currentTime()) statt player.currentTime().seconds. Für mich geht das.

Überprüfen Sie auch, ob der Timer tatsächlich ausgeführt wird (fügen Sie z. B. NSLog-Aufrufe hinzu), vielleicht blockieren Sie nur den Thread.

+0

Ich blockierte den Thread nicht, aber ich bemerkte, dass ich eine Überprüfung hatte, ob das Video pausiert war (offensichtlich sollte die Filmzeit nicht stimmen) Dann tu update), aber ich hatte es so: 'time> 0' statt' time! = 0'. – vrwim

+0

@vrwim im obigen Code, vielleicht ist alles richtig, und Ihre Zeit> 0' war das Problem. jetzt ist es gelöst? –