使用AVPlayer-Swift的无缝循环视频

时间:2017-02-08 05:32:35

标签: ios video swift3 avplayer

我正在使用AVPlayer在后台使用循环播放本地视频,视频播放正常但在完成视频后,需要暂停才能循环播放视频。我已经尝试了很多方法,并且看到很多关于堆栈溢出的帖子,但我找不到合适的解决方案。我正在使用Swift3。





代码在这里:




  var videoplayer:AVPlayer = AVPlayer() &#xA;&#xA;覆盖func viewDidLoad(){&#xA; super.viewDidLoad()&#xA;&#xA; let path = Bundle.main.path(forResource:“background4”,ofType:“mp4 “)&#XA; videoplayer = AVPlayer(url:URL(fileURLWithPath:path!))&#xA; videoplayer.volume = 0&#xA; videoplayer.actionAtItemEnd = AVPlayerActionAtItemEnd.none;&#xA;&#xA;让playerLayer = AVPlayerLayer(播放器:videoplayer)&#xA; playerLayer.frame = self.view.frame&#xA; playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill&#xA;&#xA; if(videoplayer.rate!= 0){&#xA;打印(“播放视频播放器”)&#xA; self.blurBgImage.isHidden = true&#xA; }&#XA;&#XA; playerLayer.zPosition = -1&#xA; videoplayer.rate = 0&#xA; videoplayer.play()&#XA; self.blurBgImage.layer.addSublayer(playerLayer)&#XA;&#XA; NotificationCenter.default.addObserver(forName:.AVPlayerItemDidPlayToEndTime,object:videoplayer.currentItem,queue:nil,using:{(_)in&#xA; DispatchQueue.main.async {&#xA;&#xA; let t1 = CMTimeMake( 5,100)&#xA; self.videoplayer.seek(to:t1)&#xA; self.videoplayer.play()&#xA;}&#xA;})&#xA;}&#xA; < / code> 
&#xA;&#xA;

我也尝试过AVPlayerLooper。 &#xA;代码是:

&#xA;&#xA;
  var playerLooper:NSObject?&#xA; var playerLayer:AVPlayerLayer!&#xA; var queuePlayer:AVQueuePlayer?&# XA;&#XA; func playVideo(_ filmName:String){&#xA; if let path = Bundle.main.path(forResource:filmName,ofType:“mp4”)let url = URL(fileURLWithPath:path)&#xA; if #available(tvOS 10.0,*){&#xA;让playerItem = AVPlayerItem(url:url as URL)&#xA; self.videoplayer = AVQueuePlayer(items:[playerItem])&#xA; self.playerLayer = AVPlayerLayer(player:self.videoplayer)&#xA; self.playerLooper = AVPlayerLooper(播放器:self.videoplayer as!AVQueuePlayer,templateItem:playerItem)&#xA; self.blurBgImage.layer.addSublayer(!playerLayer)&#XA; self.playerLayer?.frame = self.view.frame&#xA; self.videoplayer.volume = 10&#xA; self.videoplayer.play()&#XA; } else {&#xA; videoplayer = AVPlayer(url:url)&#xA; videoplayer.play()&#XA; loopVideo(录像机)&#XA; }&#xA;}&#xA;}&#xA;  
&#xA;&#xA;

我应该怎样做才能实现无缝循环?在此先感谢。

&#xA;

1 个答案:

答案 0 :(得分:3)

仅供参考,此处有示例代码:https://developer.apple.com/library/content/samplecode/avloopplayer/Introduction/Intro.html

@ matt的已删除答案适合我(在设备/模拟器上)适用于iOS 10+设备:

  

使用AVPlayerLooper。这正是它的用途。

     

https://developer.apple.com/reference/avfoundation/avplayerlooper

     

基本上它为你实现AVQueuePlayer,不断更新   排队,以便它永远不会结束。

它无缝地循环,没有任何白色/黑色光点。

E.g。

private var looper: AVPlayerLooper?

...

let queuePlayer = AVQueuePlayer(playerItem: item)
looper = AVPlayerLooper(player: queuePlayer, templateItem: item)
videoPlayerLayer.player = queuePlayer

如果您最终在可重复使用的单元格中执行此操作(例如UICollectionView),请确保在重新使用单元格之前禁用循环,否则您将遇到一些模糊的崩溃:

looper?.disableLooping()