@AVPlayer mostra uma tela preta ao reproduzir vários vídeos no Swift3 iOS
Eu estou trabalhando emVideo
baseado em jogadorApplication
, onde eu tenho que jogar váriosVideos
usandoAVPlayer
. Cadavideo
tem que jogar com algunsCIFilter
efeito, então eu estou usandoVideoComposition
por isso
Meu problema é quando há mais de umVideo
no meuVideoArray
então primeiroVideo
está tocando perfeitamente com o áudio, mas quando chegar ao próximo vídeo,AVPlayer
mostra tela preta, masaudio
som doVideo
está vindo. Estou invocando o método comum abaixo sempre queVideo
está jogando
private func createPlayerForVideoIndex(index: Int){
guard let videoComposition = videoFilterComposition else { return }
self.player?.pause()
self.audioPlayer?.pause()
playerLayer?.removeFromSuperlayer()
let video = videoClipsArray.object(at: index) as! VideoFileModel
playerItem = AVPlayerItem(url:NSURL(fileURLWithPath: video.localFilePath) as URL)
playerItem?.videoComposition = videoComposition
self.player = AVPlayer(playerItem: playerItem)
playerLayer = AVPlayerLayer(player: player)
playerLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill
playerLayer?.frame = CGRect(x:0, y:67, width:self.view.frame.size.width, height:250)
self.view.layer.addSublayer(playerLayer!)
if !myScrollView.isDescendant(of: self.view) {
myScrollView.frame = (playerLayer?.frame)!
myScrollView.delegate = self
myScrollView.isPagingEnabled = true
myScrollView.showsHorizontalScrollIndicator = false
myScrollView.showsVerticalScrollIndicator = false
myScrollView.backgroundColor = UIColor.clear
self.view.addSubview(myScrollView)
}
self.view.bringSubview(toFront: self.pageControl)
self.myScrollView.contentSize = CGSize(width:self.myScrollView.frame.size.width * 4,height: self.myScrollView.frame.size.height)
let startSeconds : Int64 = Int64(video.leftRangeValue)
let targetTime:CMTime = CMTimeMake(startSeconds, 1)
self.player?.seek(to: targetTime)
let endSeconds : Int64 = Int64(video.rightRangeValue)
self.player?.currentItem?.forwardPlaybackEndTime = CMTimeMake(endSeconds, 1)
self.player?.volume = videoVolumeSlider.value
self.player?.play()
self.audioPlayer?.play()
self.player?.rate = video.slowFastMotionRate
}
Presumo que deva ter o problema com o método acima, que está sempre chamando para cadaVideo
(Quero dizer no próximo vídeo).
Alguém pode me sugeri