浏览代码

camera获取缩略图修改

harry 3 年之前
父节点
当前提交
9c0129c90e

+ 2 - 2
BFRecordScreenKit/Classes/BFRecordItemModel.swift

@@ -141,7 +141,7 @@ public class BFRecordItemModel: NSObject {
     /// - parameter frames                          : 需要取的帧数
     /// - parameter firstImagesCount             : 获取首先N张连续视频帧后先返回给调用方使用作为缓冲
     /// - parameter splitCompleteClosure    : 回调
-    func splitVideoFileUrlFps(frames: Int, firstImagesCount: Int = 0, maxSize _: CGSize = CGSize(width: 200, height: 200), splitCompleteClosure: @escaping ((Bool, [UIImage]) -> Void)) {
+    func splitVideoFileUrlFps(frames: Int, firstImagesCount: Int = 0, maxSize : CGSize = CGSize(width: 200, height: 200), splitCompleteClosure: @escaping ((Bool, [UIImage]) -> Void)) {
         guard let urlAsset = videoAsset, urlAsset.duration.seconds > 0 else {
             return
         }
@@ -164,7 +164,7 @@ public class BFRecordItemModel: NSObject {
         imgGenerator.requestedTimeToleranceBefore = CMTime.zero
         imgGenerator.requestedTimeToleranceAfter = CMTime.zero
         imgGenerator.appliesPreferredTrackTransform = true
-        imgGenerator.maximumSize = CGSize(width: 200, height: 200)
+        imgGenerator.maximumSize = maxSize
         let timesCount = times.count
         var cocu = 0
         // 获取每一帧的图片

+ 22 - 14
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenCameraManager.swift

@@ -196,6 +196,8 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
             wself.recordProgressCallBack?(currDur)
             wself.updateUI(progress: currDur)
 //            BFLog(1, message: "currTime: \(wself.currentAssetProgress.seconds)")
+            
+//            wself.getThumImage()
         })
         RunLoop.current.add(timerr!, forMode: .common)
     }
@@ -532,27 +534,33 @@ extension BFRecordScreenCameraManager : GPUImageVideoCameraDelegate {
         // 获取缩略图
         let coculationCount = Int(dur.seconds / 5.0)
         if coculationCount >= currVideoThumImagesNum{
-            if let img = imageFromBuffer(sampleBuffer){
-                BFLog(1, message: "取一张缩略图出来 \(dur.seconds), \(recordItem?.thumbImgs.count ?? 0)")
-                recordItem?.thumbImgs.append(img)
-                videoModel.thumImgs?.append(img)
-                currVideoThumImagesNum += 1
-                addNewThumb()
+            imageFromBuffer(sampleBuffer) { [weak self]  img in
+                guard let wself = self else { return }
+                
+                if img != nil {
+                    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()
+                }
             }
         }
     }
     
-    func imageFromBuffer(_ buff: CMSampleBuffer) -> UIImage? {
+    func imageFromBuffer(_ buff: CMSampleBuffer, callback: ((UIImage?)->Void)){
         if let buffer = CMSampleBufferGetImageBuffer(buff) {
             let ciImage = CIImage(cvPixelBuffer: buffer)
-
-            return UIImage(ciImage: ciImage.oriented(forExifOrientation: 6),
-                           scale: cScreenWidth / 50.0,
-                           orientation: .up)
-
+            let img = UIImage(ciImage: ciImage.oriented(forExifOrientation: 6),
+                              scale: cScreenWidth / 70.0,
+                              orientation: .up)
+            if let data = img.jpegData(compressionQuality: 0.3){
+                callback(UIImage(data: data))
+            }
+        }else{
+            callback(nil)
         }
-
-        return nil
+        
     }
     
 }

+ 1 - 1
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenController.swift

@@ -1120,7 +1120,7 @@ public class BFRecordScreenController: BFBaseViewController {
         case .changed:
             if beginOnStartBtn == true {
                 let nowPoint = recognizer.location(in: bottomeView)
-                BFLog(1, message: "nowPoint x: \(nowPoint.x) y:\(nowPoint.y)")
+//                BFLog(1, message: "nowPoint x: \(nowPoint.x) y:\(nowPoint.y)")
                 if recordBtn.frame.contains(nowPoint) {
                 } else {}
             }