浏览代码

横屏视频的修正

harry 3 年之前
父节点
当前提交
d9a48d79ae

+ 29 - 0
BFRecordScreenKit/Classes/BFRSComm.swift

@@ -8,6 +8,7 @@
 import Foundation
 
 import BFCommonKit
+import AVFoundation
 
 // class BFUIConfig{}
 
@@ -23,3 +24,31 @@ func currentBundle() -> Bundle? {
 //    return UIColor.hexColor(hexadecimal: "#28BE67")
 // }
 public var ThemeStyleColor = UIColor.hexColor(hexadecimal: "#28BE67")
+
+
+// 获取视频资源的旋转方向
+public func degressFromVideoFile(url:URL) -> UInt {
+    var degress :UInt = 0
+    let tracks = AVAsset(url: url).tracks(withMediaType: .video)
+    if let track = tracks.first {
+        let t = track.preferredTransform
+        
+        if(t.a == 0 && t.b == 1.0 && t.c == -1.0 && t.d == 0){
+            // Portrait
+            degress = 90;
+        }else if(t.a == 0 && t.b == -1.0 && t.c == 1.0 && t.d == 0){
+            // PortraitUpsideDown
+            degress = 270;
+        }else if(t.a == 1.0 && t.b == 0 && t.c == 0 && t.d == 1.0){
+            // LandscapeRight
+            degress = 0;
+        }else if(t.a == -1.0 && t.b == 0 && t.c == 0 && t.d == -1.0){
+            // LandscapeLeft
+            degress = 180;
+        }
+    }
+    
+    
+    return degress
+}
+

+ 1 - 0
BFRecordScreenKit/Classes/BFRecordItemModel.swift

@@ -40,6 +40,7 @@ public class BFRecordItemModel: NSObject {
     public var index = 0 // 素材index
     public var width = 0 // 素材宽
     public var height = 0 // 素材高
+    public var videoDegress : UInt = 0  // 视频拍摄角度 90,270为横屏,180,0为竖屏
 
     func initOriginData(phasset: PHAsset) {
         width = phasset.pixelWidth

+ 1 - 1
BFRecordScreenKit/Classes/BFVideoThumbImageFetchHelper.swift

@@ -31,7 +31,7 @@ func splitVideoFileUrlFps(urlAsset: AVURLAsset, fps: Double, firstImagesCount:In
     let imgGenerator = AVAssetImageGenerator(asset: urlAsset)
     imgGenerator.requestedTimeToleranceBefore = CMTime.zero
     imgGenerator.requestedTimeToleranceAfter = CMTime.zero
-
+    imgGenerator.appliesPreferredTrackTransform = true
     let timesCount = times.count
     var cocu = 0
     // 获取每一帧的图片

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

@@ -1445,6 +1445,27 @@ extension BFRecordScreenController: PQSpeechTranscriberUtilDelegate {
             self.itemModels[self.currItemModelIndex].titleStickers.append(newSubtitle)
         }
     }
+    
+    func reloadMaterial(recordItem : BFRecordItemModel) {
+        
+        if let path = recordItem.localPath, let lastCell: BFImageCoverViewCell = collectionView.cellForItem(at: IndexPath(item: currItemModelIndex, section: 0)) as? BFImageCoverViewCell {
+            
+            setAudioPlay(item: recordItem.playItem)
+            setVideoPlay(item: recordItem.playItem, imageView: lastCell.playView)
+            
+            let degress = degressFromVideoFile(url: URL(fileURLWithPath: path))
+            switch (degress) {
+            case 90:
+                lastCell.playView.setInputRotation(GPUImageRotationMode.init(rawValue: 2), at: 0)
+            case 180:
+                lastCell.playView.setInputRotation(GPUImageRotationMode.init(rawValue: 7), at: 0)
+            case 270:
+                lastCell.playView.setInputRotation(GPUImageRotationMode.init(rawValue: 1), at: 0)
+            default:
+                break;
+            }
+        }
+    }
 }
 
 // MARK: - UICollectionViewDelegate
@@ -1470,10 +1491,12 @@ extension BFRecordScreenController: UICollectionViewDelegate, UICollectionViewDa
                 self?.progressThumV.isHidden = false
             }
         }
-        recordItem.fetchPlayItem = { [weak self, weak cell] _ in
+        recordItem.fetchPlayItem = { [weak self, weak recordItem] _ in
+            guard let item = recordItem else {
+                return
+            }
             if indexPath.item == self?.currItemModelIndex {
-                self?.setAudioPlay(item: recordItem.playItem)
-                self?.setVideoPlay(item: recordItem.playItem, imageView: cell?.playView)
+                self?.reloadMaterial(recordItem: item)
             }
         }
         cell.btnClickHandle = { [weak self] sender, _ in
@@ -1506,9 +1529,8 @@ extension BFRecordScreenController: UICollectionViewDelegate, UICollectionViewDa
             assetPlayer?.seek(to: CMTime.zero)
             recordPlayer?.seek(to: CMTime.zero)
             if recordItem.mediaType == .VIDEO {
-                let currCell: BFImageCoverViewCell? = collectionView.cellForItem(at: IndexPath(item: page, section: 0)) as? BFImageCoverViewCell
-                setVideoPlay(item: recordItem.playItem, imageView: currCell?.playView)
-                setAudioPlay(item: recordItem.playItem)
+                self.reloadMaterial(recordItem: recordItem)
+                                
                 assetPlayer?.seek(to: .zero, toleranceBefore: CMTime(value: 1, timescale: 1_000_000), toleranceAfter: CMTime(value: 1, timescale: 1_000_000))
             }
             if changeItemHandle != nil {
@@ -1523,6 +1545,7 @@ extension BFRecordScreenController: UICollectionViewDelegate, UICollectionViewDa
             
             // 更新当前page
             currItemModelIndex = page
+//            drawOrUpdateRecordProgessLable()
         }
     }
 

+ 1 - 1
BFRecordScreenKit/Classes/RecordScreen/View/BFVideoThumbProgressView.swift

@@ -104,7 +104,7 @@ class BFVideoThumbProgressView: UIView {
         if dur > 0 {
             let fps = Double(fetchThumbStrategy.frameNumberOfVideo(assetDuration: dur)) / dur
             splitVideoFileUrlFps(urlAsset: videoAsset, fps: fps, firstImagesCount: 4) { [weak self] hadGetAll, images in
-                BFLog(1, message: "\(hadGetAll), \(Date().timeIntervalSince(date))")
+                BFLog(1, message: "获取缩略图:\(hadGetAll), \(Date().timeIntervalSince(date))")
                 self?.recordItem!.thumbImgs.removeAll()
                 self?.recordItem!.thumbImgs.append(contentsOf: images)
                 self?.addThumbImages(images: images)