Ios 如何在swift 3中将AVPlayer从4秒循环到8秒?
我在swift 3中有一个播放视频的AVPlayer-问题是我想在A到B秒(例如4到8秒)之间使用循环,这是我的循环代码,但不起作用Ios 如何在swift 3中将AVPlayer从4秒循环到8秒?,ios,loops,swift3,avplayer,Ios,Loops,Swift3,Avplayer,我在swift 3中有一个播放视频的AVPlayer-问题是我想在A到B秒(例如4到8秒)之间使用循环,这是我的循环代码,但不起作用 NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: self.Player.currentItem, queue: nil, using: { (_) in DispatchQueue.main.async {
NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: self.Player.currentItem, queue: nil, using: { (_) in
DispatchQueue.main.async {
self.Player.seek(to: kCMTimeZero)
self.Player.play()
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 4.0) {
// check if player is still playing
if self.Player.rate != 0 {
print("OK")
print("Player reached 4.0 seconds")
let timeScale = self.Player.currentItem?.asset.duration.timescale;
// let seconds = kCMTimeZero
let time = CMTimeMakeWithSeconds( 8.0 , timeScale!)
self.Player.seek(to: time, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero)
self.Player.play()
}
}
}
})
问题是,此循环不起作用,并且由于AVPlayerItemDidPlayToEndTime,在播放器完成电影之前,打印(“确定”)将不起作用。您可以添加定期时间观察者来监视当前时间
let timeObserverToken = player.addPeriodicTimeObserver(forInterval: someInterval, queue: DispatchQueue.main) { [unowned self] time in
let seconds = CMTimeGetSeconds(cmTime)
if seconds >= 8.0 {
// jump back to 4 seconds
// do stuff
}
}
您可以添加定期时间观察者来监视当前时间
let timeObserverToken = player.addPeriodicTimeObserver(forInterval: someInterval, queue: DispatchQueue.main) { [unowned self] time in
let seconds = CMTimeGetSeconds(cmTime)
if seconds >= 8.0 {
// jump back to 4 seconds
// do stuff
}
}
有几种选择: 如果希望无间隙播放,可以使用以下命令开始: iOS 10之前: iOS 10+: 苹果在ios10之前的“解决方案”确实有效,这是我瞄准ios9以来唯一实现无缝循环的方法 如果您正在使用该解决方案,您还需要为其提供正确长度的avplayeritem,或者添加到解决方案中,以便在将其发送给播放器时将其切碎 为此,您可以做一些事情,比如我如何更改Apple代码(抱歉,如果它有点稀疏-只是试图显示主要的更改)-基本上是添加发送曲目和要使用的时间块,然后将其制作为AVMutableCompositionTrack(我已经删除了所有视频内容-您希望保留这些内容):
有几种选择: 如果希望无间隙播放,可以使用以下命令开始: iOS 10之前: iOS 10+: 苹果在ios10之前的“解决方案”确实有效,这是我瞄准ios9以来唯一实现无缝循环的方法 如果您正在使用该解决方案,您还需要为其提供正确长度的avplayeritem,或者添加到解决方案中,以便在将其发送给播放器时将其切碎 为此,您可以做一些事情,比如我如何更改Apple代码(抱歉,如果它有点稀疏-只是试图显示主要的更改)-基本上是添加发送曲目和要使用的时间块,然后将其制作为AVMutableCompositionTrack(我已经删除了所有视频内容-您希望保留这些内容):
我应该为间隔写些什么?因为我使用了init(),但收到了错误libc++abi.dylib:以NSException类型的未捕获异常终止,我应该为forInterval编写什么?因为我使用了init(),但我收到了错误libc++abi.dylib:以NSExceptionfirst类型的未捕获异常终止我有视频播放器而不是音频播放器-第二,我想在用户按下按钮时,例如,循环从视频的4.0秒开始到8.0秒。默认情况下,我链接的这两件事都可以做视频。制作avplayerlooper时,可以在init中选择正确的时间范围。对于ios10之前的版本,您需要使用类似于合成的内容来告诉它播放哪个部分,但我看不到这些秒之间循环视频代码中的4.0秒和8.0秒。这对我来说是一个很好的答案-海报似乎希望您为其编写应用程序him@mehdok目前无法打开xcode,但是你可以让合成有音频/视频/和IIR。首先,我有视频播放器,而不是音频播放器。第二,当用户按下按钮时,我想做。例如,循环从视频的4.0秒开始到8.0秒。默认情况下,我链接的两件事都可以做视频。制作avplayerlooper时,可以在init中选择正确的时间范围。对于ios10之前的版本,您需要使用类似于合成的内容来告诉它播放哪个部分,但我看不到这些秒之间循环视频代码中的4.0秒和8.0秒。这对我来说是一个很好的答案-海报似乎希望您为其编写应用程序him@mehdok目前无法打开xcode,但是你可以让这篇文章有音频/视频/和iirc