Browse Source

add image record

wenweiwei 3 years ago
parent
commit
30ec010d90

+ 7 - 7
BFRecordScreenKit/Classes/BFRecordExport.swift

@@ -48,13 +48,14 @@ public class BFRecordExport {
             // 切割视频素材
             for (_, itemModel) in itemModels.enumerated() {
                 itemModel.videoStickers.removeAll()
-
+//                let dur = itemModel.materialDuraion
                 if synthesisAll {
                     // 保留全部
-                    //                        let bgMovieInfo = splitBaseMaterial(timelineIn: totalDur, model_in: 0, duration: dur)
-                    //                        bgMovieInfo.volumeGain = 0
-                    //                        itemModel.videoStickers.append(bgMovieInfo)
-                    //                        totalDur += dur
+//                    let dur = itemModel.materialDuraion
+//                    let bgMovieInfo = splitBaseMaterial(timelineIn: totalDur, model_in: 0, duration: dur)
+//                    bgMovieInfo.volumeGain = 0
+//                    itemModel.videoStickers.append(bgMovieInfo)
+//                    totalDur += dur
                     var subDur = 0.0
                     let drangs = itemModel.dealedDurationRanges
                     for srange in drangs {
@@ -65,7 +66,6 @@ public class BFRecordExport {
                         subDur += range.duration.seconds
                     }
                     totalDur += subDur
-                    //                        assert(totalDur == dur)
                 } else {
                     var subDur = 0.0
                     var drangs = itemModel.dealedDurationRanges.filter { srange in
@@ -216,7 +216,7 @@ public class BFRecordExport {
                 }
             }
 
-            BFLog(message: "导出设置的码率为:\(orgeBitRate)")
+            BFLog(1, message: "导出设置的码率为:\(orgeBitRate)")
             let tempBeginExport = Date().timeIntervalSince1970
             if exporter!.prepare(videoSize: outputSize, videoAverageBitRate: orgeBitRate) {
                 exporter!.start(playeTimeRange: CMTimeRange(start: CMTime.zero, end: synthesisAll ? CMTime(seconds: totalDuration, preferredTimescale: 100) : composition.duration))

+ 13 - 13
BFRecordScreenKit/Classes/BFRecordItemModel.swift

@@ -44,9 +44,11 @@ public class BFRecordItemModel: NSObject {
             mediaType = .IMAGE
         } else if phasset.mediaType == .video {
             mediaType = .VIDEO
+            fetchPlayItem(phasset)
+
         }
+
         fetchCoverImage(phasset)
-        fetchPlayItem(phasset)
         fetchAVUrlAsset(phasset)
     }
 
@@ -71,18 +73,16 @@ public class BFRecordItemModel: NSObject {
         let options = PHVideoRequestOptions()
         options.isNetworkAccessAllowed = true
         options.deliveryMode = .automatic
-        if phasset.mediaType == .image {
-        } else if phasset.mediaType == .video {
-            PHImageManager.default().requestPlayerItem(forVideo: phasset, options: options, resultHandler: { [weak self] playerItem, _ in
-
-                guard let item = playerItem else {
-                    cShowHUB(superView: nil, msg: "视频获取失败:\(self?.index ?? 0)")
-                    return
-                }
-                self?.playItem = item
-                self?.fetchPlayItem?(item)
-            })
-        }
+
+        PHImageManager.default().requestPlayerItem(forVideo: phasset, options: options, resultHandler: { [weak self] playerItem, _ in
+            
+            guard let item = playerItem else {
+                cShowHUB(superView: nil, msg: "视频获取失败:\(self?.index ?? 0)")
+                return
+            }
+            self?.playItem = item
+            self?.fetchPlayItem?(item)
+        })
     }
 
     func fetchAVUrlAsset(_ phasset: PHAsset) {

+ 24 - 11
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenController.swift

@@ -444,6 +444,7 @@ public class BFRecordScreenController: BFBaseViewController {
 
             self?.setSubtitleStyle(settingModel: subtitileModel.setting)
         }
+        // 编辑字幕完成
         subtitleEditView.editSubtitleDone = { [weak self] newtext, index in
             // 1,刷新 UI
             self?.subtitleLabel.text = newtext
@@ -452,7 +453,14 @@ public class BFRecordScreenController: BFBaseViewController {
 
             // 更新缓存数据
             if index < (self?.itemModels[self?.currItemModelIndex ?? 0].titleStickers.count ?? 0) {
-                self?.itemModels[self?.currItemModelIndex ?? 0].titleStickers[index].text = newtext
+                if newtext.count == 0 {
+                    // 删除数据
+                    BFLog(message: "清空字幕操作要删除原字幕 sticker 数据")
+                    self?.itemModels[self?.currItemModelIndex ?? 0].titleStickers.remove(at: index)
+                } else {
+                    // 更新数据
+                    self?.itemModels[self?.currItemModelIndex ?? 0].titleStickers[index].text = newtext
+                }
             }
         }
 
@@ -463,9 +471,13 @@ public class BFRecordScreenController: BFBaseViewController {
 
     @objc func editSubtitle() {
         BFLog(message: "编辑字幕 index:\(showSubtitleIndex)")
-        subtitleEditView.isHidden = false
-        subtitleEditView.textView.becomeFirstResponder()
-        subtitleEditView.setNewText(text: subtitleLabel.text ?? "", index: showSubtitleIndex)
+        if !isNormalPlaying {
+            subtitleEditView.isHidden = false
+            subtitleEditView.textView.becomeFirstResponder()
+            subtitleEditView.setNewText(text: subtitleLabel.text ?? "", index: showSubtitleIndex)
+        } else {
+            BFLog(message: "播放状态不可以编辑字幕")
+        }
     }
 
     /// 更新字幕,在回放时使用
@@ -909,7 +921,7 @@ public class BFRecordScreenController: BFBaseViewController {
 
     // MARK: - 音视频处理
 
-    func playRecord(at currentT: CMTime, periodicTimeObserver: @escaping (_ time: CMTime, _ currentItem: AVPlayerItem) -> Void, didPlayToEndTime: @escaping (_ currentT: CMTime, _ currentItem: AVPlayerItem) -> Void,playFailut: @escaping () -> Void) {
+    func playRecord(at currentT: CMTime, periodicTimeObserver: @escaping (_ time: CMTime, _ currentItem: AVPlayerItem) -> Void, didPlayToEndTime: @escaping (_ currentT: CMTime, _ currentItem: AVPlayerItem) -> Void, playFailut: @escaping () -> Void) {
         if currentPlayRecordIndex == -3 { // 刚录音完,不需要播放
             return
         }
@@ -949,7 +961,7 @@ public class BFRecordScreenController: BFBaseViewController {
                 self?.currentPlayRecordIndex = -1
                 didPlayToEndTime(currentT, newItem)
             }
-           _ = recordPlayer?.addPeriodicTimeObserver(forInterval: CMTime(value: 1, timescale: 100), queue: DispatchQueue.global()) { [weak self] time in
+            _ = recordPlayer?.addPeriodicTimeObserver(forInterval: CMTime(value: 1, timescale: 100), queue: DispatchQueue.global()) { [weak self] time in
                 periodicTimeObserver(time, newItem)
             } as? NSKeyValueObservation
         }
@@ -1091,6 +1103,9 @@ public class BFRecordScreenController: BFBaseViewController {
     }
 
     func setAudioPlay(item: AVPlayerItem?) {
+        guard let item = item else {
+            return
+        }
         if let playItem = assetPlayer?.currentItem {
             NotificationCenter.default.removeObserver(self, name: .AVPlayerItemDidPlayToEndTime, object: playItem)
             assetPlayer?.replaceCurrentItem(with: item)
@@ -1106,9 +1121,7 @@ public class BFRecordScreenController: BFBaseViewController {
                         BFLog(message: "播放一段进度:\(currentT),\(currentItem)")
                     }, didPlayToEndTime: { startT, currentItem in
                         BFLog(message: "播放一段结束:\(startT),\(currentItem)")
-                    }, playFailut: {
-                        
-                    })
+                    }, playFailut: {})
                 }
             } as? NSKeyValueObservation
         }
@@ -1340,11 +1353,11 @@ public extension BFRecordScreenController {
             isNormalPlaying = true
             playRecord(at: currentAssetProgress, periodicTimeObserver: { [weak self] currentT, currentItem in
                 BFLog(message: "播放一段进度:\(currentT),\(currentItem)")
-                self?.imageRecordProgress(progress:CMTimeGetSeconds(currentT))
+                self?.imageRecordProgress(progress: CMTimeGetSeconds(currentT))
             }, didPlayToEndTime: { [weak self] startT, currentItem in
                 BFLog(message: "播放一段结束:\(startT),\(currentItem)")
                 self?.imageRecordPlay()
-            }) {[weak self]  in
+            }) { [weak self] in
                 DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3) {
                     self?.imageRecordPlay()
                 }