Swift3 swift 3视频在AVPlayer中仅播放声音无视频第二次
在我的应用程序中,我使用了AVPlayer,视频第一次播放得很好,当我返回并再次来到播放器屏幕时,该层正在显示,视频声音也在显示,但视频没有显示。这是我的密码Swift3 swift 3视频在AVPlayer中仅播放声音无视频第二次,swift3,avplayer,avplayerlayer,Swift3,Avplayer,Avplayerlayer,在我的应用程序中,我使用了AVPlayer,视频第一次播放得很好,当我返回并再次来到播放器屏幕时,该层正在显示,视频声音也在显示,但视频没有显示。这是我的密码 if (videoPlaying == true) { videoView.isHidden = false let targetTime:CMTime = CMTimeMake(0, 1) videoPlayer.seek(to: targetTime)
if (videoPlaying == true) {
videoView.isHidden = false
let targetTime:CMTime = CMTimeMake(0, 1)
videoPlayer.seek(to: targetTime)
videoPlayer.pause()
// audioplayer = nil
playerLayer.removeFromSuperlayer()
playerLayer=AVPlayerLayer(player: videoPlayer)
playerLayer.frame = CGRect(x:0 , y: 75 , width: videoView.frame.size.width , height: UIScreen.main.bounds.height-170)
playerLayer.backgroundColor = UIColor.black.cgColor
playerLayer.videoGravity = AVLayerVideoGravityResize
videoView.layer.addSublayer(playerLayer)
let url = NSURL(string: videoString)
let playerItem1 = AVPlayerItem(url: url! as URL)
videoPlayer.replaceCurrentItem(with: playerItem1)
videoPlayer.play()
AppDelegate.shared().showLoading()
// Setting slider max value
let duration : CMTime = videoPlayer.currentItem!.asset.duration
let seconds : Float64 = CMTimeGetSeconds(duration)
videoSlider.maximumValue = Float(seconds)
videoPlayButton.setImage(UIImage(named: "Pause"), for: .normal)
videoPlaying = true
//Adding Default Periodic Observer On Player
videoPlayer.addPeriodicTimeObserver(forInterval: CMTimeMakeWithSeconds(1, 1), queue: DispatchQueue.main) { (CMTime) -> Void in
if videoPlayer.currentItem?.status == .readyToPlay {
AppDelegate.shared().removeLoading()
self.videoSlider.value = Float(CMTimeGetSeconds(videoPlayer.currentTime()))
let currentTime : Int = Int(CMTimeGetSeconds(videoPlayer.currentTime()))
let minutes = currentTime/60
let seconds = currentTime - minutes * 60
self.durationLabel.text = NSString(format: "%02d:%02d", minutes,seconds) as String
}
}
}
else{
videoView.isHidden = true
let url = NSURL(string: videoString)
let playerItem = AVPlayerItem(url: url! as URL)
videoPlayer=AVPlayer(playerItem: playerItem)
playerLayer=AVPlayerLayer(player: videoPlayer)
playerLayer.frame = CGRect(x:0 , y: 75 , width: videoView.frame.size.width , height: UIScreen.main.bounds.height-170)
playerLayer.backgroundColor = UIColor.black.cgColor
playerLayer.videoGravity = AVLayerVideoGravityResize
videoView.layer.addSublayer(playerLayer)
}
我很困惑,当我每次来到玩家屏幕时,我是否必须删除玩家层?帮助我
提前感谢你能告诉我你在if部分和else部分到底在做什么吗???在viewDidLoad中,我正在检查视频播放器是否正在播放视频,在if条件下,如果视频正在播放,那么我将其搜索时间设为零并暂停视频,再次添加了playerlayer,若视频并没有在后台播放,那个么它就进入了其他部分,但在这里我检查了videoplayer,并在if和else部分添加了两层。视频第一次播放效果很好,但当我尝试播放第二个视频时,其显示层不可见,我使用了videoPlayer.replaceCurrentItem(使用:playerItem1)但是我缺少的地方是,如果一个视频已经在播放,我是否每次播放新视频时都必须删除播放器层?您正在播放相同的视频两次或不同???@NikunjDamani我只使用一个在AppDelegate类中声明的播放器,我的要求是,首先我播放了一段视频,然后回到上一页,然后选择相同的视频在这里播放。视频不应该从一开始就开始播放,而应该从当前位置播放。通过使用上述代码,我可以从当前位置播放视频,但视频内容第二次看不见,我可以听到声音,帮我解释为什么视频内容第二次不可见。你能告诉我你在if部分和else部分到底在做什么吗???在viewDidLoad中,我正在检查视频播放器是否正在播放视频,在if条件下,如果视频正在播放,则我将其搜索时间设置为零并暂停视频,然后再次添加playerlayer,如果视频未在后台播放,则其进入else部分,但这里我检查videoplayer,并在if和else部分中添加两次层。视频第一次播放效果很好,但当我尝试播放第二个视频时,其显示层不可见,我使用了videoPlayer.replaceCurrentItem(使用:playerItem1)但是我缺少的地方是,如果一个视频已经在播放,我是否每次播放新视频时都必须删除播放器层?您正在播放相同的视频两次或不同???@NikunjDamani我只使用一个在AppDelegate类中声明的播放器,我的要求是,首先我播放了一段视频,然后回到上一页,然后选择相同的视频在这里播放。视频不应该从一开始就开始播放,而应该从当前位置播放。通过使用上述代码,我可以从当前位置播放视频,但视频内容第二次不可见。我可以听到声音,请帮助我为什么视频内容第二次不可见。