Jelajahi Sumber

精准定位进度

harry 3 tahun lalu
induk
melakukan
f5e63b1f11

+ 5 - 3
BFRecordScreenKit/Classes/BFRecordExport.swift

@@ -200,7 +200,7 @@ public class BFRecordExport {
                 }else{
                     let error = NSError(domain: "err", code: -1, userInfo: nil)
                     self?.exportCompletion?(error as Error, nil)
-                    
+                    cShowHUB(superView: nil, msg: "导出失败")
                 }
                 
                 // 导出完成后取消导出
@@ -217,8 +217,10 @@ public class BFRecordExport {
         PHPhotoLibrary.shared().performChanges {
             PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: url)
         } completionHandler: { isFinished, _ in
-            DispatchQueue.main.async {
-                cShowHUB(superView: nil, msg: "保存成功")
+            if isFinished {
+                DispatchQueue.main.async {
+                    cShowHUB(superView: nil, msg: "保存成功")
+                }
             }
         }
     }

+ 14 - 8
BFRecordScreenKit/Classes/BFRecordScreenController.swift

@@ -182,6 +182,7 @@ public class BFRecordScreenController: BFBaseViewController {
         return toolV
         
     }()
+    
     //MARK: ------------------ 生命周期
     deinit {
         cleanMovieTarget()
@@ -492,23 +493,22 @@ public class BFRecordScreenController: BFBaseViewController {
     
     func play(){
         BFLog(1, message: "开始播放")
+        isNormalPlaying = true
         assetPlayer?.volume = 0.2
         movie?.startProcessing()
-        isNormalPlaying = true
-        let second = assetPlayer?.currentItem?.currentTime()
-        assetPlayer?.seek(to: second ?? CMTime.zero, toleranceBefore: CMTime(value: 1, timescale: 1000), toleranceAfter: CMTime(value: 1, timescale: 1000), completionHandler: {[weak self] finished in
-            if finished {
-                self?.assetPlayer?.play()
-            }
-        })
+        self.assetPlayer?.play()
     }
     
     func pause(){
         BFLog(1, message: "暂停播放")
+        isNormalPlaying = false
         movie?.cancelProcessing()
         assetPlayer?.pause()
         recordPlayer?.pause()
-        isNormalPlaying = false
+        
+        let second = self.currentAssetProgress
+        assetPlayer?.seek(to: second , toleranceBefore: CMTime(value: 1, timescale: 1000), toleranceAfter: CMTime(value: 1, timescale: 1000), completionHandler: { finished in
+        })
     }
     
     func fetchVideo(){
@@ -604,6 +604,9 @@ public class BFRecordScreenController: BFBaseViewController {
             assetPlayer = AVPlayer(playerItem: item)
             avplayerTimeObserver = assetPlayer?.addPeriodicTimeObserver(forInterval: CMTime(value: 1, timescale: 100), queue: DispatchQueue.global()) {[weak self] time in
              //    进度监控
+                if !(self?.isNormalPlaying ?? false) {
+                    return
+                }
                 self?.currentAssetProgress = time
                 BFLog(1, message: "curr:\(CMTimeGetSeconds(time))")
                 if CMTimeGetSeconds(item.duration) > 0, !(self?.isDragingProgressSlder ?? false) {
@@ -638,6 +641,9 @@ public class BFRecordScreenController: BFBaseViewController {
             }
         })
         movie?.removeAllTargets()
+        movie?.removeFramebuffer()
+        GPUImageContext.sharedFramebufferCache().purgeAllUnassignedFramebuffers()
+        
     }
     
     //MARK: - 录音对应图像绘制