Swift - UISlider作为视频擦除器平滑度问题

时间:2016-05-12 02:04:32

标签: swift video avplayer uislider

所以我一直在使用UISlider处理视频擦洗器,并且大多数情况下它工作得很好。它可以通过视频FORWARD一帧一帧地平滑移动,但是当我向后移动时,它会变得不稳定,并且不会平滑。以下是我擦洗视频的代码:

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? Ť

1 个答案:

答案 0 :(得分:0)

此处播放中的问题(双关语不是故意的)与视频编码以进行播放的方式有关。几乎所有视频标准都使用“关键帧”模型,该模型对单个帧的整个图像进行编码,然后进行一系列较小的增量更改,以记录从最后一个关键帧开始要更改的像素。这样一来,您可以存储整个视频,而无需存储每一帧的每个像素。

虽然在视频播放向前时这很好用,因为操作系统可以将增量更改应用到它已经在内存中的像素,但是在播放时效果不佳>向后,因为不可能以相同的方式“撤消”增量。这就是为什么您可以顺畅播放的原因,但是当您向后播放时,由于操作系统正在向后跳到最近的关键帧,所以事情变得不连贯。

您的解决方案与this question about negative playback rates中的解决方案相同。 TLDR;是将有问题的视频重新编码为每一帧都是关键帧的格式。您可以在视频软件中执行此操作,也可以将视频转换为PhotoJPEG之类的格式。