         timer = Timer.scheduledTimer(timeInterval: 0.5, target: self, selector: #selector(playerTimerAction), userInfo: nil, repeats: true)
         timer?.fireDate = Date()
     }
-    
-    
+  
     // MARK: - 计时器事件
     @objc fileprivate func playerTimerAction() {
         if let playerItem = playerItem {
             if playerItem.duration.timescale != 0 {
                 let currentTime = CMTimeGetSeconds(self.player!.currentTime())
                 let totalTime   = TimeInterval(playerItem.duration.value) / TimeInterval(playerItem.duration.timescale)
-                delegate?.bmPlayer(player: self, playTimeDidChange: currentTime, totalTime: totalTime)
+                weak var _self = self
+                delegate?.bmPlayer(player: _self, playTimeDidChange: currentTime, totalTime: totalTime)
             }
             updateStatus(inclodeLoading: true)
         }

                    if let timeInterVarl    = self.availableDuration() {
                        let duration        = item.duration
                        let totalDuration   = CMTimeGetSeconds(duration)
                        delegate?.bmPlayer(player: self, loadedTimeDidChange: timeInterVarl, totalDuration: totalDuration)
                    }
                    
                case "playbackBufferEmpty":

    @objc fileprivate func moviePlayDidEnd() {
        if state != .playedToTheEnd {
            if let playerItem = playerItem {
                weak var _self = self
                delegate?.bmPlayer(player: _self,
                                   playTimeDidChange: CMTimeGetSeconds(playerItem.duration),
                                   totalTime: CMTimeGetSeconds(playerItem.duration))
            }
