Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 使用自定义开始/结束时间循环AVPlayer_Swift_Avfoundation_Avplayer_Cmtime - Fatal编程技术网

Swift 使用自定义开始/结束时间循环AVPlayer

Swift 使用自定义开始/结束时间循环AVPlayer,swift,avfoundation,avplayer,cmtime,Swift,Avfoundation,Avplayer,Cmtime,我正在使用AVPlayer播放视频。我希望能够在播放视频时根据用户的输入循环视频的各个部分,用户可以按下按钮开始循环,然后在几秒钟后再次按下循环结束-然后它应该在开始时间开始播放,并在当前时间达到指定的结束时间后继续循环 我可以通过获取玩家的当前时间来获得这些开始/结束循环时间 var startoop:CMTime=player.currentTime //几秒钟过去了。。。。 var endLoop:CMTime=player.currentTime 我知道有一种方法可以在视频播放完毕后将其

我正在使用AVPlayer播放视频。我希望能够在播放视频时根据用户的输入循环视频的各个部分,用户可以按下按钮开始循环,然后在几秒钟后再次按下循环结束-然后它应该在开始时间开始播放,并在当前时间达到指定的结束时间后继续循环

我可以通过获取玩家的当前时间来获得这些开始/结束循环时间

var startoop:CMTime=player.currentTime //几秒钟过去了。。。。 var endLoop:CMTime=player.currentTime 我知道有一种方法可以在视频播放完毕后将其清晰地循环回到开头:

NotificationCenter.default.addObserverforName:.AVPlayerItemDidPlayToEndTime,对象:self.player.currentItem,队列:.main{[weak self]\uIn self?player?seekto:CMTime.zero 自我?.player?.rate=自我?.rate±1.0 }
我想知道是否有一种方法可以在我定制的StartOOP和endLoop时间中实现这一点?

在AVFoundation中有几种方法可以实现循环。简单的方法就像您描述的那样,先听通知,然后调用seekto:startoop。您可以使用addBoundaryTimeObserver监听特定时间

但是,执行循环的更高级方法是尝试向AVQueuePlayer添加一个键值观察者,并尝试插入具有所需循环资源特定范围的AVPlayerItem的2个副本。然后可以使用循环技术,如跑步机技术或AVPlayerLooper。创建自定义时间范围资产的关键是使用AVMutableComposition和insertTimeRange

另外,如果你真的想做实验,你可以尝试第三种选择,它可能使用AVMutableComposition作为你的原始源资产,并在播放时动态地改变它的基本曲目。我已经尝试过类似的方法,如果你不操纵正在播放的时间范围,它可以工作。然而,没有关于这种方法的文档,苹果可能会在未来的版本中更改代码,从而打破这种做法

参考资料:


@如果您还有其他问题,请联系我。

请参考-谢谢您的回答。我将如何着手进行第一种方法?为自定义CMTime创建通知-在本例中,endLoop@spitchay我已经更新了我的答案,添加了到