Sfoglia il codice sorgente

player loading 响应加速

harry 3 anni fa
parent
commit
0e6a0cd4a1

+ 12 - 4
BFRecordScreenKit/Classes/RecordScreen/Controller/BFMusicManager.swift

@@ -15,7 +15,7 @@ import Alamofire
 class BFMusicManager {
     
     var playStatusCallback : ((AVPlayerItem?, BFMuicInfoCellState) -> Void)?
-    
+    var needDeteactiveStatus = false
     // 试听音乐
     let player:AVPlayer = {
         let p = AVPlayer(playerItem: nil)
@@ -27,7 +27,6 @@ class BFMusicManager {
 
     init() {
         loadedTimeRangesObserver = player.observe(\AVPlayer.currentItem?.loadedTimeRanges, options: [.new, .initial]) { [weak self] (player, change) in
-            BFLog(1, message: "status: 0")
 
             DispatchQueue.main.async {[weak self] in
                 guard let wself = self else { return }
@@ -45,17 +44,26 @@ class BFMusicManager {
     func play() {
         player.play()
         
-        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { [weak self] in
+        needDeteactiveStatus = true
+        deteactiveStaus()
+    }
+    
+    func deteactiveStaus() {
+        DispatchQueue.global().asyncAfter(deadline: .now() + 0.05) {[weak self] in
             guard let wself = self else { return }
             
-            if wself.player.rate == 1.0 {
+            if wself.player.currentItem?.isPlaybackLikelyToKeepUp ?? false{
                 wself.playStatusCallback?(wself.player.currentItem, .playing)
+            }else if (wself.needDeteactiveStatus){
+                BFLog(1, message: "llogpp")
+                wself.deteactiveStaus()
             }
         }
     }
     
     func pause() {
         player.pause()
+        needDeteactiveStatus = false
         playStatusCallback?(player.currentItem, .pause)
     }
     

+ 3 - 1
BFRecordScreenKit/Classes/RecordScreen/Controller/BFMusicSearchController.swift

@@ -142,7 +142,9 @@ class BFMusicSearchController: BFBaseViewController {
             guard let wself = self else { return }
             
             if let indx = wself.chosedIndexPath, let cell = wself.musicTb.cellForRow(at: indx) as? BFMuicInfoCell, (playerItem?.asset as? AVURLAsset)?.url.absoluteString ?? "b" == cell.data?.musicPath ?? "a" {
-                cell.status = playStatus
+                DispatchQueue.main.async {
+                    cell.status = playStatus                    
+                }
             }
             wself.chosedCellStatu = playStatus
         }

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

@@ -868,10 +868,9 @@ public class BFRecordScreenController: BFBaseViewController {
             view.addSubview(voiceSettingBtn)
             voiceSettingBtn.addSubview(voiceIconView)
         }
-   
+
         view.addSubview(cameraFlipBtn)
         
-        
         view.addSubview(subtitleSettingView)
         view.addSubview(audioSettingView)
         //??? add key windows?

+ 3 - 1
BFRecordScreenKit/Classes/RecordScreen/View/BFChooseMusicView.swift

@@ -230,7 +230,9 @@ class BFChooseMusicView: UIView {
             guard let wself = self else { return }
             
             if let indx = wself.chosedIndexPath, let cell = wself.musicTb.cellForRow(at: indx) as? BFMuicInfoCell, (playerItem?.asset as? AVURLAsset)?.url.absoluteString ?? "b" == cell.data?.musicPath ?? "a" {
-                cell.status = status
+                DispatchQueue.main.async {
+                    cell.status = status
+                }
             }
             wself.chosedCellStatu = status
         }