From 96d030977ac901afbcd77f8e42facc17131aa512 Mon Sep 17 00:00:00 2001 From: Zhihai Zhu <> Date: Sat, 20 Apr 2024 11:51:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86=E5=A4=96=E5=B1=8F=E6=92=AD?= =?UTF-8?q?=E6=94=BE=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ZZHCustomPlayer.swift | 96 ++++--------------- 1 file changed, 20 insertions(+), 76 deletions(-) diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift index 99c2aec..2ed7980 100644 --- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift +++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift @@ -98,9 +98,6 @@ class ZZHCustomPlayer: UIView { super.init(frame: frame) NotificationCenter.default.addObserver(self, selector: #selector(notification_PlayerEndTime(notification:)), name: AVPlayerItem.didPlayToEndTimeNotification, object: nil) - - - let playerWidth = KScreenWidth let playerHeight = 200 playerLayerBgView = UIView() @@ -140,71 +137,33 @@ class ZZHCustomPlayer: UIView { //通过slider进行seek播放时间点 func manualToSeekPlay(value:Float,isMoving:Bool){ - if isMoving { - self.play(false) - print("此处已暂停播放,那么后面希望不要出现 sta.....> 的打印信息") +// self.play(false) + self.avPlayer?.pause() } -// Task { - let totalSec = CMTimeGetSeconds((self.avPlayer?.currentItem?.duration)!) - var atSec = Float(totalSec) * value - var timeScale:CMTimeScale? = self.avPlayer?.currentItem?.duration.timescale - if let ts = timeScale { - atSec = atSec * Float(ts) - } - else { - timeScale = CMTimeScale(1) - } - let ct = CMTime(value:CMTimeValue(atSec) , timescale: timeScale!) -// CustomPlayerShareSemaphore.wait() -// CustomPlayerShareRecursiveLock.lock() -// self.quickLoadAReaderWhenSeek(startCT: ct) -// CustomPlayerShareRecursiveLock.unlock() -// CustomPlayerShareSemaphore.signal() - print("正在seek.....\(ct) ismainthread:\(Thread.isMainThread)") -// DispatchQueue.main.async { + let totalSec = CMTimeGetSeconds((self.avPlayer?.currentItem?.duration)!) + var atSec = Float(totalSec) * value + var timeScale:CMTimeScale? = self.avPlayer?.currentItem?.duration.timescale + if let ts = timeScale { + atSec = atSec * Float(ts) + } + else { + timeScale = CMTimeScale(1) + } + let ct = CMTime(value:CMTimeValue(atSec) , timescale: timeScale!) + playerIsSeeking = true - self.avPlayer?.seek(to: ct,toleranceBefore:.zero,toleranceAfter: .zero, completionHandler: { finished in - if finished { - if(!isMoving) {//结束拖动时,再进行播放 -// CustomPlayerShareSemaphore.wait() -// CustomPlayerShareRecursiveLock.lock() -// self.quickLoadAReaderWhenSeek(startCT: ct) -// CustomPlayerShareRecursiveLock.unlock() -// CustomPlayerShareSemaphore.signal() - self.play(true) - self.playerIsSeeking = false - } - } - - }) -// } - -// } + self.avPlayer?.seek(to: ct,toleranceBefore:.zero,toleranceAfter: .zero) + if(!isMoving) {//结束拖动时,再进行播放 +// self.play(true) + self.avPlayer?.play() + self.playerIsSeeking = false + } - - -} - - //检查视频的当前播放时间是否落后于readeroutput的copynextSampleBuffer的对应time,如果是,则seek到copynextSampleBuffer下一个时间点 - func checkFBTime(ct_Buffer:CMTime?) { - return //该方法目前有问题,行不通,会闪屏,并且会卡顿 -// guard let ct_Buffer,let playerCurrCT = self.avPlayer?.currentTime() else { -// return -// } -// print("checkFBTime......call CMTimeGetSeconds:\(CMTimeGetSeconds(playerCurrCT))") -// if ct_Buffer > playerCurrCT{ -// print("in checkFBTime......call\nct_Buffer: \(ct_Buffer),\nplayerCurrCT: \(playerCurrCT)") -// let nct = CMTime(value: ct_Buffer.value+20, timescale: ct_Buffer.timescale) -// self.avPlayer?.seek(to: nct,toleranceBefore:.zero,toleranceAfter: .zero, completionHandler: {finished in -// print("checkFBTime seek result:\(finished)") -// }) -// } } - //初始化播放器信息 func setUPPlayer() { Task {[weak self] in @@ -224,34 +183,20 @@ class ZZHCustomPlayer: UIView { //改变avplayer所在的avplayerLayer视图曾层:用户外接屏幕发声改变时 func moveToOtherPlayerLayer(destLayer:AVPlayerLayer) { - print("moveToOtherPlayerLayer 准备暂停播放") self.play(false) - print("avPlayerLayer 准备移除player") self.avPlayerLayer?.player = nil - print("avPlayerLayer 已经移除player") destLayer.player = self.avPlayer - if assetTrack != nil { - quickLoadAReaderWhenSeek(startCT: (self.avPlayer?.currentTime())!) - } - - print("外屏destLayer 已添加player") self.play(true) - print("moveToOtherPlayerLayer 恢复播放play") } //当外接屏幕断开时,恢复到原来的layer层上 func recoveryPlayerLayer(otherLayer:AVPlayerLayer) { - print("recoveryPlayerLayer 准备暂停播放") self.play(false) - print("otherLayer 准备移除player") otherLayer.player = nil - print("otherLayer 已经移除player") avPlayerLayer?.player = self.avPlayer - quickLoadAReaderWhenSeek(startCT: (self.avPlayer?.currentTime())!) - print("手机屏幕avPlayerLayer 已添加player") self.play(true) - print("recoveryPlayerLayer 恢复播放play") } + //暂停或者播放 @objc func playOrPause(sender:UIButton) { if prePlayingState == false {//播放 @@ -312,7 +257,6 @@ class ZZHCustomPlayer: UIView { //监听播放完毕 @objc func notification_PlayerEndTime(notification:Notification){ - print("PlayerEndTime....") avPlayer?.seek(to: .zero,toleranceBefore: .zero,toleranceAfter: .zero,completionHandler: {[weak self] finish in self?.reLoadPlay() })