【问题标题】:AVPlayer SET fpsAVPlayer SET fps
【发布时间】:2019-11-10 10:40:06
【问题描述】:

你好,我有一个经典的播放器

var player = AVPlayer(url: fileUrl)
player.play() 

可以设置播放器的FPS吗?例如我想以 30fps 播放慢动作视频 (240fps)

我试试

player.play()
player.rate = 0.5

但这只能以 120fps 播放 240fps 的视频。

可以在视频播放期间更改 FPS

let timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: false) {_ in
        player.rate = 0.5
}

这很好用,但不能像上面那样设置 30FPS

谢谢!!

【问题讨论】:

    标签: ios video avplayer frame-rate swift5


    【解决方案1】:

    如果我正确理解了这个问题,您只是想放慢内容,因此设置速率是正确的方法(您也可以在内容播放期间这样做)。

    如果你想从 240 到 30 fps,这意味着你想将速率设置为 30/240,这意味着 1/8。

    所以应该这样做:

    player.rate = Float(1)/Float(8)
    

    您还应该将 playerItem audioPitchAlgorithm 设置为 lowQualityZeroLatency 以外的其他值,以使其低于 0.5 到 1/32

    lowQualityZeroLatency

    此算法适用于短暂的快进和快退效果以及低质量的语音。速率被捕捉到 {0.5, 0.666667, 0.8, 1.0, 1.25, 1.5, 2.0}。

    我测试正确的这个片段达到了 1/8 的速度。

    let playerItem = AVPlayerItem(url: URL(string:"https://devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_example_ts/master.m3u8")!)
    playerItem.audioTimePitchAlgorithm = .varispeed
    let avPlayer = AVPlayer(playerItem: playerItem)
    
    let vc = AVPlayerViewController()
    vc.player = avPlayer
    
    avPlayer.rate = 0.125
    self.present(vc, animated: true)
    

    【讨论】:

    • 不起作用。如果你有一个 3 秒 240fps 的视频, player.rate = Float(1)/Float(8) 你有 6 秒。我认为 3 秒 240fps 视频等于 21 秒 30 fps 视频
    • @StefanoVet 你说得对,我忘记了一条信息。我编辑了缺少那块的答案。
    • 完美!真的谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    相关资源
    最近更新 更多