处理外屏播放的问题
This commit is contained in:
parent
c38e6a78de
commit
96d030977a
@ -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()
|
||||
})
|
||||
|
||||
Loading…
Reference in New Issue
Block a user