【问题标题】:Swift - UISlider as video scrubber smoothness issueSwift - UISlider 作为视频洗涤器的平滑度问题
【发布时间】: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

【问题讨论】:

    标签: swift video avplayer uislider


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 2021-10-23
      • 2016-05-09
      • 2011-08-10
      相关资源
      最近更新 更多