|
@@ -73,7 +73,7 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
if (wself.dele?.isNormalPlaying ?? false){
|
|
|
wself.currentAssetProgress = CMTime(seconds: (currTime + wself.currPlayTime).seconds, preferredTimescale: 1000)
|
|
|
}
|
|
|
- BFLog(1, message: "拖动 currTime: \(currTime.seconds)")
|
|
|
+// BFLog(1, message: "拖动 currTime: \(currTime.seconds)")
|
|
|
DispatchQueue.main.async {[weak self] in
|
|
|
guard let wself = self else { return }
|
|
|
wself.dele?.updateSubtitle(time: wself.currentAssetProgress)
|
|
@@ -86,6 +86,13 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
return p
|
|
|
}()
|
|
|
|
|
|
+ lazy var playerCoverIV : UIImageView = {
|
|
|
+ let iv = UIImageView()
|
|
|
+ iv.frame = UIScreen.main.bounds
|
|
|
+ iv.layer.addSublayer(playerLayer)
|
|
|
+
|
|
|
+ return iv
|
|
|
+ }()
|
|
|
lazy var playerLayer : AVPlayerLayer = {
|
|
|
let layer = AVPlayerLayer(player: avplayer)
|
|
|
layer.frame = UIScreen.main.bounds
|
|
@@ -119,12 +126,12 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
progreddL?.isHidden = false
|
|
|
progreddL?.text = CMTimeGetSeconds(currentAssetProgress).formatDurationToHMS()
|
|
|
cameraProgressV?.collectionV.scrollRectToVisible(CGRect(x: (cameraProgressV?.collectionV.contentSize.width)! - 1, y: (cameraProgressV?.collectionV.contentSize.height)! - 1, width: 1, height: 1), animated: false)
|
|
|
-
|
|
|
-
|
|
|
+ dele?.isEndPlay = true
|
|
|
}else {
|
|
|
currVideoIndex = 0
|
|
|
cameraProgressV?.isHidden = true
|
|
|
progreddL?.isHidden = true
|
|
|
+ playerCoverIV.isHidden = true
|
|
|
}
|
|
|
|
|
|
camera.startCapture()
|
|
@@ -151,8 +158,8 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
guard let preView = playView else {
|
|
|
return
|
|
|
}
|
|
|
-
|
|
|
- preView.layer.addSublayer(playerLayer)
|
|
|
+
|
|
|
+ playView?.addSubview(playerCoverIV)
|
|
|
|
|
|
}
|
|
|
|
|
@@ -162,7 +169,7 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- playerLayer.removeFromSuperlayer()
|
|
|
+ playerCoverIV.isHidden = true
|
|
|
|
|
|
super.startRecord()
|
|
|
|
|
@@ -331,12 +338,11 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
|
|
|
// 使用avplayer进行播放视频和音频
|
|
|
override func play() {
|
|
|
- guard let preView = playView else {
|
|
|
+ guard playView != nil else {
|
|
|
return
|
|
|
}
|
|
|
- if playerLayer.superlayer == nil {
|
|
|
- preView.layer.addSublayer(playerLayer)
|
|
|
- }
|
|
|
+
|
|
|
+ playerCoverIV.isHidden = false
|
|
|
|
|
|
camera?.pauseCapture()
|
|
|
|
|
@@ -384,8 +390,12 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
currPlayTime = mod.timelineCMIn
|
|
|
locationTo(time: mod.timelineCMIn)
|
|
|
avplayerReplaceItem(newItem: AVPlayerItem(url: URL(fileURLWithPath: mod.locationPath)))
|
|
|
-
|
|
|
- avplayer.currentItem?.seek(to: tt, toleranceBefore: CMTime(value: 1, timescale: 1_000_000), toleranceAfter: CMTime(value: 1, timescale: 1_000_000), completionHandler: {[weak avplayer] _ in
|
|
|
+ playerCoverIV.image = PQVideoSnapshotUtil.videoSnapshot(videoURL: URL(fileURLWithPath: mod.locationPath), time: tt.seconds)
|
|
|
+
|
|
|
+ avplayer.currentItem?.seek(to: tt, toleranceBefore: CMTime(value: 1, timescale: 1_000_000), toleranceAfter: CMTime(value: 1, timescale: 1_000_000), completionHandler: {[weak self, weak avplayer] _ in
|
|
|
+
|
|
|
+ guard let wself = self else { return }
|
|
|
+
|
|
|
if needPlay {
|
|
|
avplayer?.play()
|
|
|
}
|
|
@@ -396,7 +406,11 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
}
|
|
|
|
|
|
func avplayerReplaceItem(newItem: AVPlayerItem?){
|
|
|
- if let item = avplayer.currentItem {
|
|
|
+
|
|
|
+ if let item = avplayer.currentItem{
|
|
|
+ if (item.asset as? AVURLAsset)?.url == (newItem?.asset as? AVURLAsset)?.url {
|
|
|
+ return
|
|
|
+ }
|
|
|
NotificationCenter.default.removeObserver(self as Any, name: .AVPlayerItemDidPlayToEndTime, object: item)
|
|
|
}
|
|
|
|
|
@@ -411,7 +425,7 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
}
|
|
|
|
|
|
BFLog(1, message: "endPlay:\(wself.currentAssetProgress.seconds), 总时长:\(wself.recordItem!.materialDuraion.seconds), currplayer:\(wself.avplayer.currentItem?.currentTime().seconds ?? 0)")
|
|
|
-
|
|
|
+
|
|
|
// 如果离结束大于0.7s,代表还有下一段视频
|
|
|
if ((wself.recordItem?.materialDuraion ?? .zero) - wself.currentAssetProgress).seconds > 0.7 {
|
|
|
wself.prepareToPlayNext()
|
|
@@ -437,12 +451,17 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
if let mod = recordItem?.videoStickers.first(where: { m in
|
|
|
CMTimeCompare(m.timelineCMIn, currentAssetProgress) <= 0 && CMTimeCompare(m.timelineCMOut, currentAssetProgress) > 0
|
|
|
}){
|
|
|
+ let tt = currentAssetProgress - currPlayTime
|
|
|
+
|
|
|
avplayerReplaceItem(newItem: AVPlayerItem(url: URL(fileURLWithPath: mod.locationPath)))
|
|
|
currPlayTime = mod.timelineCMIn
|
|
|
+ playerCoverIV.isHidden = false
|
|
|
+ playerCoverIV.image = PQVideoSnapshotUtil.videoSnapshot(videoURL: URL(fileURLWithPath: mod.locationPath), time: tt.seconds)
|
|
|
|
|
|
- let tt = currentAssetProgress - currPlayTime
|
|
|
BFLog(1, message: "asset - tt: \(tt.seconds), curr:\(currentAssetProgress.seconds)")
|
|
|
prepareToPlayNext(tt, needPlay: false)
|
|
|
+ }else{
|
|
|
+ playerCoverIV.isHidden = true
|
|
|
}
|
|
|
}
|
|
|
|