同步多个AVPlayer

3
我正在寻找解决问题的方法。我有5个UIView,它们都在同一个位置。每个UIView都带有不同视频的AVPlayer。更确切地说,它们都是相同的视频,但编码速度不同。
  1. 视频1x速度
  2. 视频4x速度
  3. 视频8x速度
  4. 视频16x速度
  5. 视频24x速度
默认情况下,视频1可见并正在播放,但我应该能够在视频之间切换,但切换对用户不可见,因此我需要保持它们同步。所以如果我正在观看视频1并切换到视频2,则视频2应该从视频1停止的位置开始播放。
意思是,它应该看起来像是在某个动作(例如轻扫手势)后加速播放。
我希望我已经描述得足够清楚了,非常感谢任何建议。
1个回答

1

我最终使用了观察者,每5秒钟拍摄一次currentTime的快照,并使用seekToTime方法调用所有其他AVPlayer。这可以很好地保持它们同步。我只需要为每个具有不同速度的播放器调整CMTime即可。例如,在这里我有一个4倍速的视频:

videoPosition = player1.currentTime;  //gets the video duration
        videoPositionInSeconds = (Float64) videoPosition.value/videoPosition.timescale; //transfers the CMTime duration into seconds
        [player2 seekToTime: CMTimeMakeWithSeconds(videoPositionInSeconds/4.0, player1.currentItem.asset.duration.timescale) toleranceBefore: kCMTimeZero toleranceAfter: kCMTimeZero];

希望这有所帮助。

当你这样做的时候,它会稍微跳过去吗? - Adam
在我的设备上(iPad第三代,Retina屏幕),它运行得非常流畅。对于用户来说几乎没有注意到。 - kchromik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接