Browse Source

删除多余变量;优化录制结束可能出现的黑色封面

harry 3 years ago
parent
commit
fab3f621fc

+ 18 - 25
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenCameraManager.swift

@@ -11,6 +11,8 @@
  
  videosticker 已经存储好了,在合成时,需要更新下进入的时间就可以了,不需要再切割了
  
+ 录音1s失败和摄像头1s失败不同步,需要分开计算
+ 
  
  
  */
@@ -42,10 +44,6 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
     
     // 用于打开摄像头初始流程
     static var firstOpenCamera : Bool = true
-    //当前录制的缩略图数量
-    var currVideoThumImagesNum = 0
-    //当前摄像的序号
-    var currVideoIndex = 0
     
     var currPlayTime : CMTime = .zero
     
@@ -55,6 +53,7 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
     
     // 录制时音频结果
     var recordFinishedResult = false
+    var hadDeleteVideoOfFailed = false
     
     var movieWrite : GPUImageMovieWriter?
     
@@ -109,10 +108,9 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
     
     deinit {
         if avplayerTimeObserver != nil {
-            avplayer.removeTimeObserver(avplayerTimeObserver)
+            avplayer.removeTimeObserver(avplayerTimeObserver as Any)
             avplayerTimeObserver?.invalidate()
         }
-        
     }
     
     override func resetEnv(){
@@ -127,14 +125,12 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
 
         if let count = recordItem?.voiceStickers.count, count > 0 {
             currentAssetProgress = recordItem!.materialDuraion
-            currVideoIndex = count
             cameraProgressV?.isHidden = false
             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
@@ -160,13 +156,9 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
     }
     
     func initplayer(){
-        
-        guard let preView = playView else {
-            return
+        if let preView = playView {
+            preView.addSubview(playerCoverIV)
         }
-        
-        playView?.addSubview(playerCoverIV)
-        
     }
     
     override func startRecord(){
@@ -179,15 +171,14 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
 
         super.startRecord()
 
-        currVideoThumImagesNum = 0
         startTime = Date()
+        hadDeleteVideoOfFailed = false
         
         videoModel = PQEditVisionTrackMaterialsModel()
         videoModel.thumImgs = [UIImage]()
         videoModel.timelineCMIn = currentAssetProgress
         videoModel.timelineCMOut = currentAssetProgress
         videoModel.locationPath = "nil"
-        currVideoIndex = recordItem?.videoStickers.count ?? 0
         
         // 为了第一时间能更新collection view数据
         if !BFRecordScreenCameraManager.firstOpenCamera{
@@ -251,7 +242,8 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
                         }
                     }else{
                         // 录制失败后恢复原样
-                        wself.recordFinished(isSuccess: false)
+                        wself.revertLast()
+                        wself.recordEndCallBack?(false, nil)
                         cShowHUB(superView: nil, msg: "shoot_tips_least".BFLocale)
 
                     }
@@ -272,13 +264,12 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
     
     override func recordFinished(isSuccess:Bool) {
         recordFinishedResult = isSuccess
+        
+        //
         if videoModel.locationPath != "nil" {
             if isSuccess {
-                currentAssetProgress = videoModel.timelineCMOut
-                // 屏蔽是因为成功要以摄像头为准
                 currentAssetProgress = videoModel.timelineCMOut
                 recordEndCallBack?(true, videoModel)
-                
             }else{
                 if (videoModel.thumImgs?.count ?? 0) > 0 { //用图片数量来判断是否已经删除了当次录制
                     revertLast()
@@ -350,6 +341,7 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
     
     // 录制失败 , 不足一秒时恢复上一次状态
     func revertLast(_ modIndex : Int = -1){
+        hadDeleteVideoOfFailed = true
         var vmod : PQEditVisionTrackMaterialsModel?
         if modIndex >= 0 && modIndex < recordItem?.videoStickers.count ?? 0{
             vmod = recordItem?.videoStickers[modIndex]
@@ -448,7 +440,7 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
         if let mod = recordItem?.videoStickers.sorted(by: { m1, m2 in
             m1.timelineCMIn.seconds < m2.timelineCMIn.seconds
         }).first(where: { mod in
-            CMTimeCompare(mod.timelineCMIn, currentAssetProgress + CMTime(seconds: 0.033, preferredTimescale: 1000)) <= 0 && CMTimeCompare((currentAssetProgress + CMTime(seconds: 0.033, preferredTimescale: 1000)), mod.timelineCMOut) < 0
+            CMTimeCompare(mod.timelineCMIn, currentAssetProgress + CMTime(seconds: 0.33, preferredTimescale: 1000)) <= 0 && CMTimeCompare((currentAssetProgress + CMTime(seconds: 0.33, preferredTimescale: 1000)), mod.timelineCMOut) < 0
         }){
             currPlayTime = mod.timelineCMIn
             locationTo(time: currentAssetProgress)
@@ -468,8 +460,9 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
             playRecordVoice(needPlay: needPlay)
         }else {
             locationTo(time: currentAssetProgress)
+            playerCoverIV.isHidden = true
         }
-        playerCoverIV.isHidden = (CMTimeCompare(currentAssetProgress, recordItem?.materialDuraion ?? .zero) >= 0)
+//        playerCoverIV.isHidden = (CMTimeCompare(currentAssetProgress, recordItem?.materialDuraion ?? .zero) >= 0)
         if !playerCoverIV.isHidden {
             BFLog(1, message: "stor")
         }
@@ -536,6 +529,8 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
         playerCoverIV.isHidden = (CMTimeCompare(currentAssetProgress, recordItem?.materialDuraion ?? .zero) >= 0)
     }
     
+    
+    // 获取下一个视频的封面图
     func setCoverImage(_ dur: CMTime){
         if let mod = recordItem?.videoStickers.first(where: { m in
             CMTimeCompare(m.timelineCMIn, (dur + CMTime(seconds: 0.5, preferredTimescale: 1000))) <= 0 && CMTimeCompare(m.timelineCMOut, (dur + CMTime(seconds: 0.5, preferredTimescale: 1000))) > 0
@@ -544,7 +539,6 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
             playerCoverIV.image = PQVideoSnapshotUtil.videoSnapshot(videoURL: URL(fileURLWithPath: mod.locationPath), time: .zero)
         }
         playerCoverIV.isHidden = (CMTimeCompare(currentAssetProgress, recordItem?.materialDuraion ?? .zero) >= 0)
-
     }
     
     override func changeRecordMaterail(){
@@ -637,7 +631,7 @@ extension BFRecordScreenCameraManager : GPUImageVideoCameraDelegate {
         let dur = CMTime(seconds: movieWrite?.duration.seconds ?? 0, preferredTimescale: 1000)
         // 获取缩略图
         let coculationCount = Int(dur.seconds / 5.0)
-        if coculationCount >= currVideoThumImagesNum{
+        if coculationCount >= (videoModel.thumImgs?.count ?? 0) {
             imageFromBuffer(sampleBuffer) { [weak self]  img in
                 guard let wself = self else { return }
                 
@@ -645,7 +639,6 @@ extension BFRecordScreenCameraManager : GPUImageVideoCameraDelegate {
                     BFLog(1, message: "取一张缩略图出来 \(dur.seconds), \(wself.recordItem?.thumbImgs.count ?? 0)")
                     wself.recordItem?.thumbImgs.append(img!)
                     wself.videoModel.thumImgs?.append(img!)
-                    wself.currVideoThumImagesNum += 1
                     wself.addNewThumb()
                 }
             }