Swift - UISlider 作为视频洗涤器的平滑度问题
Posted
技术标签:
【中文标题】Swift - UISlider 作为视频洗涤器的平滑度问题【英文标题】:Swift - UISlider as video scrubber smoothness issue 【发布时间】:2016-05-12 02:04:31 【问题描述】:所以我一直在使用 UISlider 开发视频清理器,并且在大多数情况下它工作得很好。它能够通过视频向前平滑地逐帧移动,但是当我向后移动时,它会变得不稳定并且不那么平滑。下面是我擦洗视频的代码:
func sliderBeganTracking(slider: CustomUISlider!)
if isPlaying == true
self.touchCount += 1
pauseVideo()
func sliderValueChanged(slider: CustomUISlider!)
let videoDuration = CMTimeGetSeconds(player.currentItem!.duration)
let elapsedTime: Float64 = videoDuration * Float64(chosePosSlider.value)
let time: CMTime = CMTimeMakeWithSeconds(elapsedTime, self.player.currentTime().timescale)
self.player.seekToTime(time, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero)
任何人都知道为什么当我尝试向后滑动时它会停止平稳运行和/或是否有更好的解决方案或方法来创建一个可以平滑滑动视频的 UISlider? T
【问题讨论】:
【参考方案1】:这里的问题(双关语不是有意的)与视频编码播放的方式有关。几乎所有视频标准都使用“关键帧”模型,其中对单个帧的整个图像进行编码,然后进行一系列较小的增量更改,以记录从最后一个关键帧开始更改的像素。这使您可以存储整个视频,而无需存储每一帧的每个像素。
虽然这在播放视频时效果很好向前,因为操作系统可以将增量更改应用到内存中已有的像素,但在播放时效果不佳向后,因为不可能以相同的方式“撤消”增量。这就是为什么您可以顺利播放向前,但是当您向后播放时,事情会变得不稳定,因为操作系统会向后跳到最近的关键帧。
您的解决方案与this question about negative playback rates 的解决方案相同。 TLDR;是将有问题的视频重新编码为每一帧都是关键帧的格式。您可以在视频软件中执行此操作,也可以将视频转换为 PhotoJPEG 等格式。
【讨论】:
以上是关于Swift - UISlider 作为视频洗涤器的平滑度问题的主要内容,如果未能解决你的问题,请参考以下文章