Преглед изворни кода

调整资源转数据顺序,先AVAseet再AVPlayItem

harry пре 3 година
родитељ
комит
082f1172a9

+ 2 - 2
BFRecordScreenKit/Classes/BFRSComm.swift

@@ -27,9 +27,9 @@ public var ThemeStyleColor = UIColor.hexColor(hexadecimal: "#389AFF")
 
 
 // 获取视频资源的旋转方向
-public func degressFromVideoFile(url:URL) -> UInt {
+public func degressFromVideoFile(asset: AVAsset) -> UInt {
     var degress :UInt = 0
-    let tracks = AVAsset(url: url).tracks(withMediaType: .video)
+    let tracks = asset.tracks(withMediaType: .video)
     if let track = tracks.first {
         let t = track.preferredTransform
         

+ 11 - 7
BFRecordScreenKit/Classes/BFRecordItemModel.swift

@@ -45,17 +45,18 @@ public class BFRecordItemModel: NSObject {
     func initOriginData(phasset: PHAsset) {
         width = phasset.pixelWidth
         height = phasset.pixelHeight
+        
+        fetchCoverImage(phasset)
+        fetchAVUrlAsset(phasset)
+        
         if phasset.mediaType == .image {
             mediaType = .IMAGE
             localPath = "image"
         } else if phasset.mediaType == .video {
             mediaType = .VIDEO
             fetchPlayItem(phasset)
-
         }
 
-        fetchCoverImage(phasset)
-        fetchAVUrlAsset(phasset)
     }
 
     func fetchCoverImage(_ phasset: PHAsset) {
@@ -97,11 +98,14 @@ public class BFRecordItemModel: NSObject {
         options.deliveryMode = .automatic
 
         PHCachingImageManager().requestAVAsset(forVideo: phasset, options: options, resultHandler: { [weak self] (asset: AVAsset?, _: AVAudioMix?, _) in
+            guard let sself = self else {
+                return
+            }
             if let videoAsset = asset as? AVURLAsset {
-                self?.materialDuraion = videoAsset.duration.seconds
-                self?.localPath = (videoAsset.url.absoluteString.removingPercentEncoding)?.replacingOccurrences(of: "file://", with: "")
-                self?.videoAsset = videoAsset
-                self?.fetchAVUrlAsset?(videoAsset)
+                sself.materialDuraion = videoAsset.duration.seconds
+                sself.localPath = (videoAsset.url.absoluteString.removingPercentEncoding)?.replacingOccurrences(of: "file://", with: "")
+                sself.videoAsset = videoAsset
+                sself.fetchAVUrlAsset?(videoAsset)
             }
         })
     }

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

@@ -1492,12 +1492,13 @@ public class BFRecordScreenController: BFBaseViewController {
     
     // 修正视频旋转方向,因为自己录制的竖屏视频会预览为横屏
     func reloadMaterial(recordItem: BFRecordItemModel) {
-        if let path = recordItem.localPath, let cell: BFImageCoverViewCell = collectionView.cellForItem(at: IndexPath(item: currItemModelIndex, section: 0)) as? BFImageCoverViewCell {
+        if let vasset = recordItem.videoAsset, let cell: BFImageCoverViewCell = collectionView.cellForItem(at: IndexPath(item: currItemModelIndex, section: 0)) as? BFImageCoverViewCell {
             setVideoPlay(item: recordItem.playItem, imageView: cell.playView)
             setAudioPlay(item: recordItem.playItem)
             playBtn = cell.playBtn
+//            recordItem.videoAsset
             
-            let degress = degressFromVideoFile(url: URL(fileURLWithPath: path))
+            let degress = degressFromVideoFile(asset: vasset)
             switch degress {
             case 90:
                 cell.playView.setInputRotation(GPUImageRotationMode(rawValue: 2), at: 0)