【问题标题】:Reverse video playback in iOS在 iOS 中反向播放视频
【发布时间】:2012-08-10 13:01:21
【问题描述】:

我想在 AVPlayer 中向后播放视频。我尝试将rates 属性更改为-1.0,虽然它确实有效,但并不顺利。有什么方法可以让我顺利向后播放视频吗?

【问题讨论】:

  • 视频播放是一件有趣的事情,因为视频在每个X帧都有关键帧,关键帧之间的帧只是存储了图像从上一帧(不是整帧)的变化.所以向后播放视频不仅仅是改变帧的顺序,因为帧与前一个(而不是下一个!)有关系,而且,通常,你不会改变帧的顺序来获得向后版本,大多数情况下您应该再次重新渲染视频。这就是您对视频有问题的一般原因。
  • 谢谢。你能建议我任何反向播放视频的解决方案吗?

标签: ios avfoundation media


【解决方案1】:

正如 cmets 中所述,问题在于关键帧以及大多数编解码器并非设计为向后播放的事实。有 2 个选项可用于重新编码视频,不需要您在编辑时实际反转视频。

  1. 使每一帧都成为关键帧。我已经看到这对于像 H.264 这样依赖关键帧的编解码器非常有效。基本上,如果每一帧都是关键帧,那么每一帧都可以在不依赖任何先前帧的情况下进行解码,因此它实际上与向前播放相同。
  2. 使用不使用关键帧和非关键帧的编解码器(基本上所有帧都是关键帧)。 PhotoJPEG 就是这样一种选择,尽管我不完全确定它是否可以在 iOS 上播放。我会这么认为。它在 Mac 上运行良好。

请注意,与典型的“每 x 帧关键帧”编码视频相比,此选项中的任何一个都会导致文件大小更大。

【讨论】:

    【解决方案2】:

    您必须到达当前项目的末尾,然后将费率设置为负值。像这样的:

    -(void)reversePlay { CMTime durTime = myPlayer.currentItem.asset.duration; if (CMTIME_IS_VALID(durTime)) { [myPlayer seekToTime:durTime toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero]; [myPlayer setRate:-1.0]; } else NSLog(@"Invalid time"); }

    来源:https://stackoverflow.com/a/16104363/701043

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      • 2013-08-05
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      相关资源
      最近更新 更多