提高AVPlayer的最大播放速度

时间:2014-03-20 14:39:25

标签: ios objective-c avfoundation avplayer

目前我正在开发一款应用程序,我想要快速播放视频,最高可达正常播放速度的20倍。我刚刚意识到,AVPlayer的{​​{1}}只支持2.0的播放速度。视频的速度越高,流媒体就越不流畅。

您对其他视频框架有什么建议吗?为了解决我的问题,您可以推荐哪些视频框架?

非常感谢你!

2 个答案:

答案 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)
}