Browse Source

Merge branch 'master' of https://git.yishihui.com/iOS/BFRecordScreenKit
合并代码

jsonwang 3 years ago
parent
commit
399ea6dc82

+ 27 - 10
BFRecordScreenKit/Classes/BFVideoCompositionManager.swift

@@ -15,15 +15,32 @@ class BFVideoCompositionManager {
     var itemModels = [BFRecordItemModel]()
     var itemModels = [BFRecordItemModel]()
     var currItemModelIndex = 0
     var currItemModelIndex = 0
     
     
-    var write = GPUImageMovieWriter(movieURL: URL(fileURLWithPath: exportVideosDirectory+"test.mov"), size: UIScreen.main.bounds.size, fileType: "com.apple.quicktime-movie", outputSettings: [
-                AVVideoCodecKey: AVVideoCodecH264,
-                AVVideoWidthKey: 1080,
-                AVVideoHeightKey: 1920,
-                AVVideoCompressionPropertiesKey: [AVVideoAverageBitRateKey: 6*1024*1024 ]
-            ] as [String : Any])
+    var write : GPUImageMovieWriter?
+   
+    func getVideoSize(asset: AVURLAsset) -> CGSize {
+        var size = CGSize.zero
+        asset.tracks.forEach { track in
+            if track.mediaType == .video {
+                let realSize = __CGSizeApplyAffineTransform(track.naturalSize, track.preferredTransform)
+                size = CGSize(width: ceil(abs(realSize.width)), height: ceil(abs(realSize.height)))
+            }
+        }
+
+        return size
+    }
+    
     func export(avsss:AVURLAsset){
     func export(avsss:AVURLAsset){
         let start = Date()
         let start = Date()
         saveMovie = GPUImageMovie(asset: avsss)
         saveMovie = GPUImageMovie(asset: avsss)
+        let size = getVideoSize(asset: avsss)
+        
+        write = GPUImageMovieWriter(movieURL: URL(fileURLWithPath: exportVideosDirectory+"test.mov"), size: CGSize(width: 1080, height: 1920), fileType: "com.apple.quicktime-movie", outputSettings: [
+                    AVVideoCodecKey: AVVideoCodecH264,
+                    AVVideoWidthKey: 1080.0,
+                    AVVideoHeightKey: size.height * 1080.0 / size.width ,
+                    AVVideoCompressionPropertiesKey: [AVVideoAverageBitRateKey: 6*1024*1024 ]
+                ] as [String : Any])
+        
         if let saveWrite = write{
         if let saveWrite = write{
             let filter = GPUImageFilter()
             let filter = GPUImageFilter()
             saveMovie.addTarget(filter)
             saveMovie.addTarget(filter)
@@ -34,10 +51,10 @@ class BFVideoCompositionManager {
             saveMovie.enableSynchronizedEncoding(using: saveWrite)
             saveMovie.enableSynchronizedEncoding(using: saveWrite)
             saveMovie.startProcessing()
             saveMovie.startProcessing()
             saveWrite.startRecording()
             saveWrite.startRecording()
-            DispatchQueue.global().asyncAfter(deadline: .now() + 2) { [weak self] in
-                saveWrite.finishRecording()
-                self?.saveMovie.endProcessing()
-            }
+//            DispatchQueue.global().asyncAfter(deadline: .now() + 2) { [weak self] in
+//                saveWrite.finishRecording()
+//                self?.saveMovie.endProcessing()
+//            }
             saveWrite.completionBlock = {[weak self] in
             saveWrite.completionBlock = {[weak self] in
                 BFLog(1, message: "导出完毕:\(Date().timeIntervalSince(start))")
                 BFLog(1, message: "导出完毕:\(Date().timeIntervalSince(start))")
                 self?.mix(date: start, index: 0)
                 self?.mix(date: start, index: 0)

+ 4 - 8
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenController.swift

@@ -458,7 +458,7 @@ public class BFRecordScreenController: BFBaseViewController {
                 newSubtitle.taskID = (header?["task_id"] as? String) ?? ""
                 newSubtitle.taskID = (header?["task_id"] as? String) ?? ""
 
 
                 // 这里加300ms 是因为返回结果为了切到字,时长提前一些时间,具体时间官方没说和原音频有关系。这里我们先延后300ms 单位:毫秒。
                 // 这里加300ms 是因为返回结果为了切到字,时长提前一些时间,具体时间官方没说和原音频有关系。这里我们先延后300ms 单位:毫秒。
-
+                
                 newSubtitle.timelineIn = (self?.recorderManager?.voiceModel?.startTime ?? 0.0) + Float64((((payload?["begin_time"]) as? Int) ?? 0) + 300) / 1000.0
                 newSubtitle.timelineIn = (self?.recorderManager?.voiceModel?.startTime ?? 0.0) + Float64((((payload?["begin_time"]) as? Int) ?? 0) + 300) / 1000.0
 
 
                 newSubtitle.timelineOut = (self?.recorderManager?.voiceModel?.startTime ?? 0.0) + Float64(((payload?["time"]) as? Int) ?? 0) / 1000.0
                 newSubtitle.timelineOut = (self?.recorderManager?.voiceModel?.startTime ?? 0.0) + Float64(((payload?["time"]) as? Int) ?? 0) / 1000.0
@@ -555,7 +555,6 @@ public class BFRecordScreenController: BFBaseViewController {
                     self?.resetCurrentProgress()
                     self?.resetCurrentProgress()
                     self?.deleteRecordBtn.isHidden = true
                     self?.deleteRecordBtn.isHidden = true
                     self?.recordBtn.isHidden = (self?.itemModels[self?.currItemModelIndex ?? 0].mediaType == .IMAGE && (self?.isEndPlay ?? false)) ? false : (self?.isEndPlay ?? false)
                     self?.recordBtn.isHidden = (self?.itemModels[self?.currItemModelIndex ?? 0].mediaType == .IMAGE && (self?.isEndPlay ?? false)) ? false : (self?.isEndPlay ?? false)
-                    self?.recorderManager?.voiceModel = nil
                 }
                 }
                 sself.currentPlayRecordIndex = -3 // 刚录音完,不需要播放录音
                 sself.currentPlayRecordIndex = -3 // 刚录音完,不需要播放录音
                 BFLog(3, message: "重置播放index-\(#function) = \(sself.currentPlayRecordIndex)")
                 BFLog(3, message: "重置播放index-\(#function) = \(sself.currentPlayRecordIndex)")
@@ -808,9 +807,6 @@ public class BFRecordScreenController: BFBaseViewController {
         if !checkStatus(show: false) {
         if !checkStatus(show: false) {
             return
             return
         }
         }
-
-        let point = recognizer.location(in: bottomeView)
-
         switch recognizer.state {
         switch recognizer.state {
         case .began:
         case .began:
             touchStart = recognizer.location(in: bottomeView)
             touchStart = recognizer.location(in: bottomeView)
@@ -1172,6 +1168,7 @@ public class BFRecordScreenController: BFBaseViewController {
         searchStopAtRecordRange(needAdsorb: true)
         searchStopAtRecordRange(needAdsorb: true)
         changeWithDrawBtnLayout(0)
         changeWithDrawBtnLayout(0)
         isEndPlay = (progress == 1)
         isEndPlay = (progress == 1)
+        recorderManager?.voiceModel = nil
     }
     }
 
 
     // 是否吸附在录音首尾处
     // 是否吸附在录音首尾处
@@ -1431,6 +1428,7 @@ public class BFRecordScreenController: BFBaseViewController {
 
 
     func play() {
     func play() {
         BFLog(1, message: "开始播放 \(currentAssetProgress.seconds)")
         BFLog(1, message: "开始播放 \(currentAssetProgress.seconds)")
+        recorderManager?.voiceModel = nil
 
 
         isNormalPlaying = true
         isNormalPlaying = true
         if isEndPlay {
         if isEndPlay {
@@ -1703,11 +1701,9 @@ public class BFRecordScreenController: BFBaseViewController {
         // 注:视频无法以录制进度驱动,因当录音开始录音时播放器还未播放,导致进度不一致
         // 注:视频无法以录制进度驱动,因当录音开始录音时播放器还未播放,导致进度不一致
         // 注:在录制停止时,视频播放器进度依然在走,误差在80毫秒左右
         // 注:在录制停止时,视频播放器进度依然在走,误差在80毫秒左右
         if isRecording, itemModels[currItemModelIndex].mediaType == .IMAGE {
         if isRecording, itemModels[currItemModelIndex].mediaType == .IMAGE {
-            let ratioX = 0.08
             let startTime = recorderManager?.voiceModel?.startTime ?? 0
             let startTime = recorderManager?.voiceModel?.startTime ?? 0
-
             // 使用播放器的进度来画线,因为进度是跟着播放器来了
             // 使用播放器的进度来画线,因为进度是跟着播放器来了
-            indirectionView?.setProgress(start: startTime, progress: max(0, progress - ratioX))
+            indirectionView?.setProgress(start: startTime, progress: progress)
         }
         }
         if itemModels[currItemModelIndex].mediaType == .IMAGE {
         if itemModels[currItemModelIndex].mediaType == .IMAGE {
             imageRecordProgress(isRecord: true, progress: progress)
             imageRecordProgress(isRecord: true, progress: progress)

+ 6 - 0
BFRecordScreenKit/Classes/RecordScreen/View/BFIndirectionProgressView.swift

@@ -77,6 +77,12 @@ class BFIndirectionProgressView: UIView {
         detectionAndCreateItem(start: start, progress: progress)
         detectionAndCreateItem(start: start, progress: progress)
         currentItem?.frame.size.width = progress < 0 ? 0 : progress * percenWidth
         currentItem?.frame.size.width = progress < 0 ? 0 : progress * percenWidth
         BFLog(message: "当前view:\(String(describing: currentItem))")
         BFLog(message: "当前view:\(String(describing: currentItem))")
+        let vc = subviews.first { [weak self] sub in
+            (self?.currentItem?.frame.minX ?? 0) < sub.frame.minX && sub.frame.minX < (self?.currentItem?.frame.maxX ?? 0)
+        }
+        if vc !== nil {
+            vc?.removeFromSuperview()
+        }
     }
     }
 
 
     /// 检测并创建item
     /// 检测并创建item

+ 0 - 6
BFRecordScreenKit/Classes/RecordScreen/View/BFVideoThumbProgressView.swift

@@ -207,7 +207,6 @@ class BFVideoThumbProgressView: UIView {
             guard let image = recordItem?.coverImg else {
             guard let image = recordItem?.coverImg else {
                 return
                 return
             }
             }
-            var lastiv = UIImageView()
             let lastIndex = thumbImgs.count - 1
             let lastIndex = thumbImgs.count - 1
             for i in lastIndex ... lastIndex + 10 {
             for i in lastIndex ... lastIndex + 10 {
                 let iv = UIImageView(image: image)
                 let iv = UIImageView(image: image)
@@ -220,12 +219,8 @@ class BFVideoThumbProgressView: UIView {
                     make.height.equalTo(50)
                     make.height.equalTo(50)
                     make.width.equalTo(thumbImageWidth)
                     make.width.equalTo(thumbImageWidth)
                 }
                 }
-                lastiv = iv
                 thumbImgs.append(image)
                 thumbImgs.append(image)
             }
             }
-            lastiv.snp.makeConstraints { make in
-                make.right.equalTo(width * -0.5)
-            }
         }
         }
     }
     }
 
 
@@ -284,7 +279,6 @@ extension BFVideoThumbProgressView: UIScrollViewDelegate {
     }
     }
 
 
     func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
     func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
-        var dur: CGFloat = 0
         let totalW = recordItem?.mediaType == .VIDEO ? (scrollView.contentSize.width - width) :  (CGFloat(recordItem?.materialDuraion ?? 0) * thumbImageWidth / 2.0)
         let totalW = recordItem?.mediaType == .VIDEO ? (scrollView.contentSize.width - width) :  (CGFloat(recordItem?.materialDuraion ?? 0) * thumbImageWidth / 2.0)
         isDrag = false
         isDrag = false
         dragEndHandle?(totalW > 0 ? Float((scrollView.contentOffset.x / totalW)) : 0)
         dragEndHandle?(totalW > 0 ? Float((scrollView.contentOffset.x / totalW)) : 0)