浏览代码

修改摄像录制预览的封面图

harry 3 年之前
父节点
当前提交
7265ec6461

+ 15 - 6
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenCameraManager.swift

@@ -90,7 +90,8 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
         let iv = UIImageView()
         iv.frame = UIScreen.main.bounds
         iv.layer.addSublayer(playerLayer)
-
+        iv.contentMode = .scaleAspectFit
+        iv.backgroundColor = .black
         return iv
     }()
     lazy var playerLayer : AVPlayerLayer = {
@@ -412,7 +413,7 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
 
             let tt = currentAssetProgress - currPlayTime
             BFLog(1, message: "asset - tt: \(tt.seconds), curr:\(currentAssetProgress.seconds)")
-            playerCoverIV.image = PQVideoSnapshotUtil.videoSnapshot(videoURL: URL(fileURLWithPath: mod.locationPath), time: tt.seconds)
+            setCoverImage(mod.timelineCMOut)
 
             avplayer.currentItem?.seek(to: tt, toleranceBefore: CMTime(value: 1, timescale: 1_000_000), toleranceAfter: CMTime(value: 1, timescale: 1_000_000), completionHandler: {[weak avplayer] _ in
                             
@@ -456,7 +457,8 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
                 // 播放到末尾了
                 wself.dele?.isEndPlay = true
                 wself.dele?.pause()
-                wself.playerLayer.removeFromSuperlayer()
+//                wself.playerLayer.removeFromSuperlayer()
+                wself.playerCoverIV.isHidden = true
             }
         }
     }
@@ -475,11 +477,9 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
             CMTimeCompare(m.timelineCMIn, currentAssetProgress) <= 0 && CMTimeCompare(m.timelineCMOut, currentAssetProgress) > 0
         }){
             currPlayTime = mod.timelineCMIn
-            let tt = currentAssetProgress - currPlayTime
 
             avplayerReplaceItem(newItem: AVPlayerItem(url: URL(fileURLWithPath: mod.locationPath)))
-            playerCoverIV.isHidden = false
-            playerCoverIV.image = PQVideoSnapshotUtil.videoSnapshot(videoURL: URL(fileURLWithPath: mod.locationPath), time: tt.seconds)
+            setCoverImage(mod.timelineCMOut)
 
             prepareToPlayNext(needPlay: false)
         }else{
@@ -487,6 +487,15 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
         }
     }
     
+    func setCoverImage(_ dur: CMTime){
+        playerCoverIV.isHidden = false
+        if let mod = recordItem?.videoStickers.first(where: { m in
+            CMTimeCompare(m.timelineCMIn, (dur + CMTime(seconds: 0.5, preferredTimescale: 1000))) <= 0 && CMTimeCompare(m.timelineCMOut, (dur + CMTime(seconds: 0.5, preferredTimescale: 1000))) > 0
+        }){
+            playerCoverIV.image = PQVideoSnapshotUtil.videoSnapshot(videoURL: URL(fileURLWithPath: mod.locationPath), time: .zero)
+        }
+    }
+    
     override func changeRecordMaterail(){
         //
         if recordItem?.videoStickers.count ?? 0 == 0 {

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

@@ -1367,6 +1367,8 @@ public class BFRecordScreenController: BFBaseViewController {
         ///
         DispatchQueue.main.async {[weak self] in
             guard let wself = self else { return }
+            wself.recordBtn.isHidden = false
+            wself.recordBtn.alpha = 1
             
             if voiceModel?.currIndex == wself.currItemModelIndex {
                 if wself.currMediaType == .Image {

+ 8 - 3
BFRecordScreenKit/Classes/RecordScreen/View/ProgressView/BFVideoThumbProgressView.swift

@@ -84,8 +84,7 @@ class BFVideoThumbProgressView: BFProgressBaseView {
 
     /// 处理视频缩略图
     func dealWithVideoThumb() {
-        guard let videoAsset = recordItem?.videoAsset else {
-            // 可能icloud资源没回来,清空原有内容
+        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 }
@@ -94,6 +93,12 @@ class BFVideoThumbProgressView: BFProgressBaseView {
             }
             return
         }
+        
+        var videoAsset = recordItem?.videoAsset
+        if videoAsset == nil {
+            videoAsset = recordItem?.playItem?.asset as? AVURLAsset
+        }
+        
         addThumbImages(images: recordItem!.thumbImgs)
         if recordItem!.thumbImgs.count > 0 {
             // 代表已经获取过了,不用在重新去获得
@@ -108,7 +113,7 @@ class BFVideoThumbProgressView: BFProgressBaseView {
         }
 
         let date = Date()
-        let dur = videoAsset.duration.seconds
+        let dur = videoAsset?.duration.seconds ?? 0.0
         if dur > 0 {
             let count = fetchThumbStrategy.frameNumberOfVideo(assetDuration: dur)
             progessIndicateBackV.snp.remakeConstraints { make in