目前我正在开发一款应用程序,我想要快速播放视频,最高可达正常播放速度的20倍。我刚刚意识到,AVPlayer
的{{1}}只支持2.0的播放速度。视频的速度越高,流媒体就越不流畅。
您对其他视频框架有什么建议吗?为了解决我的问题,您可以推荐哪些视频框架?
非常感谢你!
答案 0 :(得分:1)
myAVPlayer.currentItem.audioTimePitchAlgorithm
有默认值
AVAudioTimePitchAlgorithmLowQualityZeroLatency
此模式的可用费率:{0.5,0.666667,0.8,1.0,1.25,1.5,2.0}
将audioTimePitchAlgorithm
更改为
myAVPlayer.currentItem.audioTimePitchAlgorithm = AVAudioTimePitchAlgorithmVarispeed
费率从0,03125x到32x
/ *! @abstract时间间距算法的值@constant
AVAudioTimePitchAlgorithmLowQualityZeroLatency 质量低,非常便宜。适合短暂的快进/快退效果,低音质。 速率折扣为{0.5,0.666667,0.8,1.0,1.25,1.5,2.0}。@constant AVAudioTimePitchAlgorithmTimeDomain 质量适中,价格便宜。适合声音。 可变速率从1/32到32。
@constant AVAudioTimePitchAlgorithmSpectral 质量最高,计算成本最高。适合音乐。 可变速率从1/32到32。
@constant AVAudioTimePitchAlgorithmVarispeed 高品质,无音调校正。音高随着速率而变化。 可变速率从1/32到32.
* /
答案 1 :(得分:0)
如果有人仍然坚持这一点,并希望AVPlayer
播放的视频速度超过2.0:
您需要创建AVMutableComposition
并将时间范围缩放到所需的时间范围。完成后,您可以使用AVPlayer
的播放速率进一步乘以它,最多可达2倍。
这个SO answer解释了如何做到这一点。
这是一个Swift版本:
let asset = AVPlayerItem(url: yourURL).asset
let newRate = 10.0
let composition = AVMutableComposition()
let assetTimeRange = CMTimeRangeMake(kCMTimeZero, asset.duration)
do {
try composition.insertTimeRange(assetTimeRange, of: asset, at: kCMTimeZero)
let destinationTimeRange = CMTimeMultiplyByFloat64(asset.duration, 1/newRate)
composition.scaleTimeRange(assetTimeRange, toDuration: destinationTimeRange)
let newPlayerItem = AVPlayerItem(asset: composition)
yourAVPlayer.replaceCurrentItem(with: newPlayerItem)
} catch {
// Handle the error
print("Inserting time range failed. ", error)
}