iOS SDK存在问题。我无法找到使用连续值减慢视频速度的API。
我已经制作了一个带滑块和AVPlayer的应用程序,我想根据滑块值将视频的速度从50%更改为150%。
就目前而言,我只是成功地改变了视频的速度,但只改变了离散值,并重新编译了视频。 (为了做到这一点,我使用了AVMutableComposition API。
您知道是否可以连续更改速度,而无需重新编译?
非常感谢!
Jery
答案 0 :(得分:2)
AVPlayer的rate属性允许播放速度更改(如果关联的AVPlayerItem能够改变它)(对canPlaySlowForward或canPlayFastForward做出响应)。正常播放的速率为1.0,停止的速率为0,可以设置为其他值但可能会舍入到它能够达到的最接近的离散值,例如2:1,3:2,5:4以获得更快的速度, 1:2,2:3和4:5用于较慢的速度。
使用较旧的MPMoviePlayerController及其类似的currentPlaybackRate属性,我发现它需要进行任何设置并将其报告回来,但仍会将其四舍五入到上面的一个离散值。例如,将其设置为1.05即使currentPlaybackRate在读取时会说1.05,也会获得正常速度(1:1)。设置为1.2,它将在1.25X(5:4)播放。它被限制在2:1(双倍速度),超过它将悬挂或跳跃。
出于某种原因,iOS API Reference没有提到这些离散速度。他们是通过实验发现的。他们有道理。由于硬件以固定速率(例如,每秒30或60帧)显示视频帧,因此一些倍数比其他倍数更容易。通过每帧显示两次可以实现半速,并且通过每隔一帧丢弃来实现双倍速度。每3帧中掉落1个就可以获得150%(3:2)的速度。但要做到105%就更难了,每21帧掉落一次。特别是如果这是在硬件中完成的,你可以看出为什么它们可能只限于某些倍数。