AVPlayer SET fps

Posted

技术标签:

【中文标题】AVPlayer 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

谢谢!!

【问题讨论】:

【参考方案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 你说得对,我忘记了一条信息。我编辑了缺少那块的答案。 完美!真的谢谢!

以上是关于AVPlayer SET fps的主要内容,如果未能解决你的问题,请参考以下文章

AVPlayer 类事件

AVPlayer + 循环 + 背景

查找与 AVPlayerItem 关联的 AVPlayer

AVPlayer 问题,同时直播 (iOS)

如何为 AVPlayer 制作搜索栏

持续时间不是来自AVPlayer currentItem