AVPlayer在Swift3 iOS中播放多个视频时显示黑屏
我正在开发基于播放器的AVPlayer在Swift3 iOS中播放多个视频时显示黑屏,ios,video,swift3,avplayer,avplayerlayer,Ios,Video,Swift3,Avplayer,Avplayerlayer,我正在开发基于播放器的应用程序,其中我必须播放多个视频 视频使用AVPlayer。每个video都必须使用一些CIFilter效果,因此我使用VideoComposition来实现这一点 我的问题是,当我的VideoArray中有多个视频时,首先Video可以完美地播放音频,但当它播放到下一个视频时,AVPlayer会显示黑屏,但音频的声音会出现。每当播放视频时,我都会调用以下常用方法: private func createPlayerForVideoIndex(index: Int){
应用程序,其中我必须播放多个视频
视频
使用AVPlayer
。每个video
都必须使用一些CIFilter
效果,因此我使用VideoComposition
来实现这一点
我的问题是,当我的VideoArray
中有多个视频时,首先Video
可以完美地播放音频,但当它播放到下一个视频时,AVPlayer
会显示黑屏,但音频
的声音会出现。每当播放视频时,我都会调用以下常用方法:
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
}
我想,上面的方法应该有问题,每次调用每个视频(我指的是下一个视频)
任何人都可以推荐我。老实说,我没有阅读完整的问题,但尝试使用单独的播放器,如为createPlayerForVideoIndex
@PrashantTukadiyaNo问题创建新的播放器对象,谢谢您的回答。当我评论这行“playerItem.videoComposition=videoFilterComposition”时,它工作得很好。顺便问一下,你能告诉我如何在这里分离播放器吗?我想你使用的是同一个播放器对象,这可能是个问题,所以我建议每次都创建一个新的播放器对象。这很好,但我不认为问题出在播放器上,因为我得到了正确的视频声音,只有显示器变黑了。新设备上一次只能有16个视频播放器,旧设备上只能有4个(我想说iphone 4s和其他),老实说,我没有读完整的问题,但尝试单独的播放器,比如为createPlayerForVideoIndex
@PrashantTukadiyaNo问题创建新的播放器对象,谢谢你的回答。当我评论这行“playerItem.videoComposition=videoFilterComposition”时,它工作得很好。顺便问一下,你能告诉我如何在这里分离播放器吗?我想你使用的是同一个播放器对象,这可能是个问题,所以我建议每次都创建一个新的播放器对象。这很好,但我不认为问题出在播放器上,因为我得到了正确的视频声音,只有显示器变黑了。在较新的设备上一次只能播放16个视频播放器,在较旧的设备上只能播放4个视频播放器(我想说的是iphone 4s和iphone 4s)