ios - AVPlayer layer showing blank screen when application running or idle for 15 minutes -
i create custom video player using avplayer()
, avplayerlayer()
classes. code working fine application fresh start goes wrong , showing blank screen when application running or idle more 15 minutes. when occurrences issue classes of application having avplayerlayer
showing blank screen. don't know why happens.
avplayer() , avplayerlayer() instances initialized below.
override func viewdidload() { super.viewdidload() // additional setup after loading view. dispatch_async(dispatch_get_main_queue(), { let playeritem = avplayeritem(url: self.itemurl) self.avplayer = avplayer(playeritem: playeritem) nsnotificationcenter.defaultcenter().addobserver(self, selector: #selector(videopreviewview.restartvideofrombeginning), name: avplayeritemdidplaytoendtimenotification, object: self.avplayer.currentitem) self.avplayerlayer = avplayerlayer(player: self.avplayer) self.view.layer.addsublayer(self.avplayerlayer) self.avplayerlayer.frame = self.view.bounds self.avplayer.pause() }) } }
play function
func playvideo(sender: anyobject) { avplayer.play() if (avplayer.rate != 0 && avplayer.error == nil) { print("playing") } slider.hidden=false mytimer = nstimer.scheduledtimerwithtimeinterval(0.1, target: self, selector: #selector(videopreviewview.updateslider), userinfo: nil, repeats: true) slider.addtarget(self, action: #selector(videopreviewview.slidervaluedidchange(_: )), forcontrolevents: uicontrolevents.valuechanged) slider.minimumvalue = 0.0 slider.continuous = true pausebutton.hidden=false playbutton.hidden=true closeviewbutton.hidden = false }
restart video
func restartvideofrombeginning() { let seconds: int64 = 0 let preferredtimescale: int32 = 1 let seektime: cmtime = cmtimemake(seconds, preferredtimescale) avplayer?.seektotime(seektime) avplayer?.pause() pausebutton.hidden=true playbutton.hidden = false closeviewbutton.hidden=false }
func updateslider() { if (avplayer.rate != 0 && avplayer.error == nil) { print("playing") } else{ print("not playing.") } currenttime = float(cmtimegetseconds(avplayer.currenttime())) duration = avplayer.currentitem!.asset.duration totalduration = float(cmtimegetseconds(duration)) slider.value = currenttime // setting slider value current time slider.maximumvalue = totalduration // setting maximum value total duration of video }
func slidervaluedidchange(sender: uislider!) { timeinsecond=slider.value newtime = cmtimemakewithseconds(double(timeinsecond), 1)// setting new time using slider value avplayer.seektotime(newtime) }
@ibaction func closeviewaction(sender: anyobject) { pausebutton.hidden=true self.avplayer.pause() self.avplayerlayer.removefromsuperlayer() self.dismissviewcontrolleranimated(true, completion: nil) }
Comments
Post a Comment