|
@@ -167,6 +167,7 @@ class PQEditMusicSearchController: PQBaseViewController {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ var avPlayerTimeObserver:Any?
|
|
|
|
|
|
|
|
|
func playStuckPointMusic(itemData: PQVoiceModel?, isClearCurrentMusic: Bool = false) {
|
|
@@ -178,6 +179,10 @@ class PQEditMusicSearchController: PQBaseViewController {
|
|
|
avPlayer.pause()
|
|
|
playerItem?.removeObserver(self, forKeyPath: "status")
|
|
|
playerItem?.removeObserver(self, forKeyPath: "error")
|
|
|
+ if avPlayerTimeObserver != nil {
|
|
|
+ avPlayer.removeTimeObserver(avPlayerTimeObserver as Any)
|
|
|
+ }
|
|
|
+
|
|
|
playerItem = AVPlayerItem(url: URL(string: itemData?.musicPath ?? "")!)
|
|
|
if (itemData?.endTime ?? 0) > 0, (itemData?.endTime ?? 0) > (itemData?.startTime ?? 0) {
|
|
|
playerItem?.forwardPlaybackEndTime = CMTime(value: CMTimeValue((itemData?.endTime ?? 0) * playerTimescale), timescale: CMTimeScale(playerTimescale))
|
|
@@ -187,6 +192,15 @@ class PQEditMusicSearchController: PQBaseViewController {
|
|
|
playerItem?.addObserver(self, forKeyPath: "error", options: .new, context: nil)
|
|
|
avPlayer.seek(to: CMTime(value: CMTimeValue((itemData?.startTime ?? 0) * playerTimescale), timescale: CMTimeScale(playerTimescale)))
|
|
|
avPlayer.play()
|
|
|
+
|
|
|
+ avPlayerTimeObserver = avPlayer.addPeriodicTimeObserver(forInterval: CMTime(value: 1, timescale: 10), queue: DispatchQueue.global()) {[weak self] time in
|
|
|
+ if fabs(CMTimeGetSeconds(time) - (itemData?.startTime ?? 0)) > 0.1 {
|
|
|
+ self?.avPlayer.removeTimeObserver(self?.avPlayerTimeObserver as Any)
|
|
|
+ self?.avPlayerTimeObserver = nil
|
|
|
+
|
|
|
+ PQNotification.post(name: NSNotification.Name(rawValue: "MusicContentCellIconLoadingAnimationStop"), object: nil)
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|