处理外屏播放的问题

This commit is contained in:
Zhihai Zhu 2024-04-20 11:51:36 +08:00
parent c38e6a78de
commit 96d030977a

View File

@ -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 {
//sliderseek
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
}
}
//readeroutputcopynextSampleBuffertime,,seekcopynextSampleBuffer
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 {
//avplayeravplayerLayer:
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()
})