AVPlayer反向播放存在问题

7

我正在尝试为使用AVPlayer播放的视频添加反向播放:

let videoURL = Bundle.main.url(forResource: "video", withExtension: "mov")
videoPlayer = AVPlayer(url:videoURL!)
let playerLayer = AVPlayerLayer(player: videoPlayer)
playerLayer.frame = self.view.frame
videoView.layer.addSublayer(playerLayer)
videoPlayer.play()

我查阅了一些资料,发现如果我将 AVPlayer 的速率改为-1,则可以将电影以倒序模式播放:

 func reverseVideo()  {

        videoPlayer.play()
        videoPlayer.rate = -1
    }

这个功能可以正常工作,但是反向回放存在很多延迟,并且播放不流畅,是否有可能解决这个问题。我在这里阅读了其他主题,但没有帮助。


你只在尝试倒放播放时看到了延迟吗? - Tarun Tyagi
@TarunTyagi 是的 - iOS.Lover
你尝试在触发playbackLikelyToKeepUp后调用reverseVideo方法了吗?你可以设置一个观察者来跟踪这个值。这里是官方文档 - Ayazmon
4个回答

3
这段代码可用于从本地文件系统中使用AVPlayer以倒序播放视频。
let duration = (self.playeritem?.asset.duration)!
let durationSec = CMTimeGetSeconds((self.playeritem?.asset.duration)!)
self.avPlayer?.seek(to: duration, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero)
self.avPlayer?.rate = -1

这是与Tarun Tyagi相同的答案,现在可以工作了,顺便说一下durationSec在这里是无用的。 - iOS.Lover

2
尝试将 videoPlayer.play() videoPlayer.rate = -1 替换为 videoPlayer.playImmediately(atRate: -1)

同样的效果还是有延迟,不流畅,你能回答这个问题吗? https://dev59.com/MlcP5IYBdhLWcg3wa5XQ - iOS.Lover

1
var durTime: CMTime = queuePlayer.currentItem.asset.duration
durationTime = CMTimeGetSeconds(durTime)

if CMTIME_IS_VALID(durTime) {
    queuePlayer.seek(toTime: durTime, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero)
}
else {
    print("In valid time")
}

现在将AVPlayer的速率设置为负值。
queuePlayer.rate = -1

如何使它更加流畅? - Roi Mulia

1

我不确定以下内容是否能够正确运行,因为我之前没有尝试过倒放媒体资产。我认为在开始播放之前先寻找结尾是一个值得尝试的好主意。

player.seek(to: player.currentItem!.duration,
            toleranceBefore: kCMTimeZero,
            toleranceAfter: kCMTimeZero,
            completionHandler: { (finished) in
        player.play()
        player.rate = -1
    })

谢谢,但仍然有延迟! - iOS.Lover
我不确定这是否有帮助,但你可以尝试在调用 player.play() 之前将 player.rate = -1 赋值。 - Tarun Tyagi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接