Parcourir la source

禁止连摁
获取不到videoasset时

harry il y a 3 ans
Parent
commit
86d5800171

+ 8 - 4
BFRecordScreenKit/Classes/BFRecordItemModel.swift

@@ -141,8 +141,12 @@ 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)) {
-        guard let urlAsset = videoAsset, urlAsset.duration.seconds > 0 else {
+    func splitVideoFileUrlFps(ass:AVURLAsset? = nil, frames: Int, firstImagesCount: Int = 0, maxSize : CGSize = CGSize(width: 200, height: 200), splitCompleteClosure: @escaping ((Bool, [UIImage]) -> Void)) {
+        var urlAsset = ass
+        if urlAsset == nil {
+            urlAsset = videoAsset
+        }
+        if urlAsset == nil || urlAsset!.duration.seconds <= 0 {
             return
         }
 
@@ -153,14 +157,14 @@ public class BFRecordItemModel: NSObject {
 //        let urlAsset = AVURLAsset(url: URL(fileURLWithPath: localPath))
         let start = 0
 //        let end = Int(urlAsset.duration.seconds * Float64(fps))
-        let fps = Double(frames) / urlAsset.duration.seconds
+        let fps = Double(frames) / urlAsset!.duration.seconds
         for i in start ..< frames {
             let timeValue = NSValue(time: CMTimeMake(value: Int64(i * 1000), timescale: Int32(fps * 1000)))
 
             times.append(timeValue)
         }
 
-        let imgGenerator = AVAssetImageGenerator(asset: urlAsset)
+        let imgGenerator = AVAssetImageGenerator(asset: urlAsset!)
         imgGenerator.requestedTimeToleranceBefore = CMTime.zero
         imgGenerator.requestedTimeToleranceAfter = CMTime.zero
         imgGenerator.appliesPreferredTrackTransform = true

+ 6 - 0
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenController.swift

@@ -1195,6 +1195,12 @@ public class BFRecordScreenController: BFBaseViewController {
     }
 
     @objc func deleteRecordAction() {
+        deleteRecordBtn.isEnabled = false
+        DispatchQueue.main.asyncAfter(deadline: .now() + 0.25) {[weak self] in
+            guard let wself = self else { return }
+            wself.deleteRecordBtn.isEnabled = true
+        }
+        
         if !isDragingProgressSlder, isStopAtRecordRange != -1, isStopAtRecordRange < itemModels[currItemModelIndex].voiceStickers.count {
             let model = itemModels[currItemModelIndex].voiceStickers[isStopAtRecordRange]
             itemModels[currItemModelIndex].voiceStickers.remove(at: isStopAtRecordRange)

+ 2 - 2
BFRecordScreenKit/Classes/RecordScreen/View/ProgressView/BFCameraProgressView.swift

@@ -55,8 +55,8 @@ class BFCameraProgressView: BFProgressBaseView {
         if let count = recordItem?.thumbImgs.count, count > 0 {
             DispatchQueue.main.async {[weak self] in
                 guard let wself = self else { return }
-                
-                wself.collectionV.insertItems(at: [IndexPath(row: count - 1, section: 0)])
+                wself.collectionV.reloadData()
+//                wself.collectionV.insertItems(at: [IndexPath(row: count - 1, section: 0)])
             }
         }
     }

+ 12 - 7
BFRecordScreenKit/Classes/RecordScreen/View/ProgressView/BFVideoThumbProgressView.swift

@@ -20,6 +20,10 @@ class BFVideoThumbProgressView: BFProgressBaseView {
             progress = 0
             if recordItem?.mediaType == .Video {
                 dealWithVideoThumb()
+                recordItem?.fetchAVUrlAssetCallBack = {[weak self] in
+                    guard let wself = self else { return }
+                    wself.dealWithVideoThumb()
+                }
             } else if recordItem?.mediaType == .Image {
                 dealWithImageThumb()
             }
@@ -86,17 +90,18 @@ class BFVideoThumbProgressView: BFProgressBaseView {
     func dealWithVideoThumb() {
         if recordItem?.videoAsset == nil &&  recordItem?.playItem == nil {
             addThumbImages(images: [UIImage]())
-            DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {[weak self] in
-                guard let wself = self else { return }
-                
-                wself.dealWithVideoThumb()
-            }
+//            DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {[weak self] in
+//                guard let wself = self else { return }
+//                BFLog(1, message: "重试获取缩略图")
+//                wself.dealWithVideoThumb()
+//            }
             return
         }
         
         var videoAsset = recordItem?.videoAsset
         if videoAsset == nil {
-            videoAsset = recordItem?.playItem?.asset as? AVURLAsset
+            recordItem?.videoAsset = recordItem?.playItem?.asset as? AVURLAsset
+            videoAsset = recordItem?.videoAsset
         }
         
         addThumbImages(images: recordItem!.thumbImgs)
@@ -124,7 +129,7 @@ class BFVideoThumbProgressView: BFProgressBaseView {
                 make.width.equalTo(CGFloat(count) * thumbImageWidth).priority(.high)
             }
 
-            recordItem!.splitVideoFileUrlFps(frames: count, firstImagesCount: Int(ceil(width / 2.0 / thumbImageWidth))) { [weak self, weak recordItem] hadGetAll, images in
+            recordItem!.splitVideoFileUrlFps(ass: videoAsset, frames: count, firstImagesCount: Int(ceil(width / 2.0 / thumbImageWidth))) { [weak self, weak recordItem] hadGetAll, images in
                 guard let wself = self, let sitem = recordItem else {
                     return
                 }