Существует жесткое ограничение на 16 видеоплееров одновременно на более новых устройствах 4 на старых устройствах (я хочу сказать, iphone 4s и обратно)
отаю надVideo
на основе игрокаApplication
где я должен играть несколькоVideos
с помощьюAVPlayer
, каждыйvideo
должен играть с некоторымиCIFilter
эффект, поэтому я используюVideoComposition
для этого.
Моя проблема в том, когда есть более одногоVideo
в моемVideoArray
тогда сначалаVideo
отлично играет со звуком, но когда он подходит к следующему видео, тоAVPlayer
показывает черный экран, ноaudio
звукVideo
приближается. Я использую приведенный ниже общий метод всякий раз, когдаVideo
играет:
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
}
Я предполагаю, что должна быть проблема с вышеуказанным методом, который вызывается каждый раз для каждогоVideo
(Я имею ввиду со следующим видео).
Может кто-нибудь, пожалуйста, предложите мне.