Bladeren bron

Merge branch 'master' of https://git.yishihui.com/iOS/BFRecordScreenKit

* 'master' of https://git.yishihui.com/iOS/BFRecordScreenKit:
  1.update playRecord
  1.iCloud视频
harry 3 jaren geleden
bovenliggende
commit
b185787ce5

+ 2 - 9
BFRecordScreenKit/Classes/BFRecordItemModel.swift

@@ -78,9 +78,6 @@ public class BFRecordItemModel: NSObject {
     }
 
     func fetchPlayItem(_ phasset: PHAsset) {
-        let options = PHVideoRequestOptions()
-        options.isNetworkAccessAllowed = true
-        options.deliveryMode = .automatic
         PQPHAssetVideoParaseUtil.parasToAVPlayerItem(phAsset: phasset) { [weak self] playerItem, _, _ in
             guard let item = playerItem else {
                 self?.fetchPlayItemCallBack?(self)
@@ -92,11 +89,7 @@ public class BFRecordItemModel: NSObject {
     }
 
     public func fetchAVUrlAsset(_ phasset: PHAsset) {
-        let options = PHVideoRequestOptions()
-        options.isNetworkAccessAllowed = true
-        options.deliveryMode = .automatic
-
-        PHCachingImageManager().requestAVAsset(forVideo: phasset, options: options, resultHandler: { [weak self] (asset: AVAsset?, _: AVAudioMix?, _) in
+        PQPHAssetVideoParaseUtil.parasToAVAsset(phAsset: phasset) {[weak self] asset, size, _, _ in
             guard let sself = self else {
                 return
             }
@@ -105,7 +98,7 @@ public class BFRecordItemModel: NSObject {
                 sself.videoAsset = videoAsset
                 sself.fetchAVUrlAssetCallBack?()
             }
-        })
+        }
     }
 
     func generationTimeRanges(needSort _: Bool = false) {

+ 28 - 16
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenController.swift

@@ -1408,26 +1408,33 @@ public class BFRecordScreenController: BFBaseViewController {
             hadPrepareToPlayRecord = false
             BFLog(1, message: "录音播放器初始化(有时候不准)")
             BFLog(3, message: "重置播放index-\(#function) = \(currentPlayRecordIndex)")
-            NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: newItem, queue: .main) { [weak self, weak recordedAudio] _ in
-                self?.hadPrepareToPlayRecord = false
-                self?.currentPlayRecordIndex = -1
-                self?.recordPlayer?.volume = 0
-                self?.assetPlayer?.volume = self?.noSpeakVolume ?? 0
-                didPlayToEndTime((shouldPlayRecordIndex, recordedAudio) as? (Int, PQVoiceModel), newItem)
+            NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: newItem, queue: .main) { [weak self] _ in
+                guard let sself = self else {
+                    return
+                }
+                sself.hadPrepareToPlayRecord = false
+                sself.currentPlayRecordIndex = -1
+                sself.recordPlayer?.volume = 0
+                sself.assetPlayer?.volume = sself.noSpeakVolume
+                didPlayToEndTime((shouldPlayRecordIndex, recordedAudio), newItem)
             }
             avplayerTimeObserver?.invalidate()
-            avplayerTimeObserver = recordPlayer?.addPeriodicTimeObserver(forInterval: CMTime(value: 1, timescale: 1000), queue: DispatchQueue.global()) { [weak self, weak recordPlayer] time in
-                BFLog(3, message: "当前播放---\(time),\(time.seconds),\(recordPlayer?.currentItem?.currentTime().seconds ?? 0),\(recordPlayer?.currentItem?.duration.seconds ?? 0)")
-                if CMTimeGetSeconds(self?.currenStartPlayTime ?? CMTime.zero) <= 0 {
-                    BFLog(message: "重新更新开始播放进度\(#function)-\(self?.currenStartPlayTime.seconds ?? 0)")
-                    self?.currenStartPlayTime = time
+            avplayerTimeObserver = recordPlayer?.addPeriodicTimeObserver(forInterval: CMTime(value: 1, timescale: 1000), queue: DispatchQueue.global()) { [weak self, weak recordPlayer,weak assetPlayer] time in
+                guard let sself = self,let rPlay = recordPlayer,let aPlay = assetPlayer else {
+                    return
+                }
+                BFLog(3, message: "当前播放---\(time),\(time.seconds),\(rPlay.currentItem?.currentTime().seconds ?? 0),\(rPlay.currentItem?.duration.seconds ?? 0)")
+                if CMTimeGetSeconds(sself.currenStartPlayTime) <= 0 {
+                    BFLog(message: "重新更新开始播放进度\(#function)-\(sself.currenStartPlayTime.seconds)")
+                    sself.currenStartPlayTime = time
                 }
-                let progressTime = CMTime(seconds: CMTimeGetSeconds(time) - CMTimeGetSeconds(self?.currenStartPlayTime ?? CMTime.zero), preferredTimescale: 1000)
+                let progressTime = CMTime(seconds: CMTimeGetSeconds(time) - CMTimeGetSeconds(sself.currenStartPlayTime), preferredTimescale: 1000)
                 BFLog(message: "progressTime进度\(#function)-\(progressTime.seconds)")
                 periodicTimeObserver(progressTime, newItem)
-                if (recordPlayer?.currentItem?.currentTime().seconds ?? 0) > (recordPlayer?.currentItem?.duration.seconds ?? 0) - 0.1 {
-                    recordPlayer?.volume = 0
-                    self?.assetPlayer?.volume = self?.noSpeakVolume ?? 0
+                if (rPlay.currentItem?.currentTime().seconds ?? 0) > (rPlay.currentItem?.duration.seconds ?? 0) - 0.1 {
+                    rPlay.volume = 0
+                    aPlay.volume = sself.noSpeakVolume
+                    didPlayToEndTime((shouldPlayRecordIndex, recordedAudio), newItem)
                 }
             } as? NSKeyValueObservation
         }
@@ -1598,11 +1605,11 @@ public class BFRecordScreenController: BFBaseViewController {
                 if index == 0 {
                     if asset.mediaType == .video {
                         itemModel.fetchAVUrlAssetCallBack = { [weak self, weak itemModel] in
-                            //                            self?.export(avsss:uralss)
                             DispatchQueue.main.async { [weak self, weak itemModel] in
                                 self?.progressThumV.recordItem = itemModel
                                 self?.progressThumV.isHidden = false
                                 self?.recordBtn.isEnabled = true
+                                self?.reloadMaterial()
                             }
                         }
                     } else {
@@ -1648,14 +1655,17 @@ public class BFRecordScreenController: BFBaseViewController {
     }
 
     func setAudioPlay(item: AVPlayerItem?) {
+        BFLog(message: "设置播放器item:\(String(describing: item))")
         guard let item = item else {
             return
         }
         if let playItem = assetPlayer?.currentItem {
             NotificationCenter.default.removeObserver(self, name: .AVPlayerItemDidPlayToEndTime, object: playItem)
             assetPlayer?.replaceCurrentItem(with: item)
+            BFLog(message: "设置播放器playItem-替换:\(String(describing: item))")
         } else {
             assetPlayer = AVPlayer(playerItem: item)
+            BFLog(message: "设置播放器item-替换:\(String(describing: item))")
             assetPlayer?.volume = noSpeakVolume
             avplayerTimeObserver?.invalidate()
             avplayerTimeObserver = assetPlayer?.addPeriodicTimeObserver(forInterval: CMTime(value: 1, timescale: 1000), queue: DispatchQueue.global()) { [weak self] time in
@@ -1820,7 +1830,9 @@ public class BFRecordScreenController: BFBaseViewController {
     // 修正视频旋转方向,因为自己录制的竖屏视频会预览为横屏
     func reloadMaterial() {
         let recordItem = itemModels[currItemModelIndex]
+        BFLog(message: "设置播放器reloadMaterial:\(recordItem)")
         if let vasset = recordItem.videoAsset, let cell: BFImageCoverViewCell = collectionView.cellForItem(at: IndexPath(item: currItemModelIndex, section: 0)) as? BFImageCoverViewCell {
+            BFLog(message: "设置播放器reloadMaterial-开始:\(recordItem)")
             setVideoPlay(item: recordItem.playItem, imageView: cell.playView)
             setAudioPlay(item: recordItem.playItem)
             let degress = degressFromVideoFile(asset: vasset)