2012-08-10 103 views
11

我想在AVPlayer中向后播放视频。我已经尝试将费率属性更改为-1.0,虽然它确实起作用,但并不顺利。有什么方法可以顺利播放视频吗?iOS中的反向视频播放

+4

的视频播放是一件有趣的事情,因为视频在每X帧有关键帧,并且关键帧之间的帧都只是存储的变化来自前一帧的图像(不是整个帧)。因此,向后播放视频不仅仅是改变帧的顺序,因为帧与前一帧(而不是下一帧)有关系,并且通常不改变帧的顺序以获得后向版本,大多数情况下你应该重新渲染视频。这是视频出现问题的一般原因。 – holex 2012-08-10 13:12:54

+0

非常有趣的问题。 – Daniel 2012-08-14 02:01:10

+1

谢谢。你能给我建议任何解决方案来反向播放视频吗? – 2012-08-24 09:49:14

回答

6

正如评论中所述,问题在于关键帧和大多数编解码器不是为了向后播放而设计的。有两个选项可以对视频进行重新编码,而不需要您在编辑时实际上反转视频。

  1. 使每一帧都成为关键帧。对于依赖关键帧的H.264等编解码器,我已经看到了这一点。基本上,如果每一帧都是一个关键帧,那么每一帧都可以被解码而不依赖任何先前的帧,所以它与前进的效果相同。
  2. 使用不使用关键帧和非关键帧的编解码器(基本上所有帧总是关键帧)。 PhotoJPEG就是这样一种选择,但我不完全确定它是否会在iOS上播放。我会这样想的。它在Mac上很好用。

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

0

必须在当前项目结束时触及,然后将速率设置为负值。事情是这样的:

-(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