2

我想MPMusicPlayerController.applicationMusicPlayer()實例開始從一個特定的開始時間玩:MPMusicPlayerController不會尋求給予playbackTime

applicationMusicPlayer.setQueueWithStoreIDs([String(track.id)]) 
    applicationMusicPlayer.currentPlaybackTime = 10.0 
    print(applicationMusicPlayer.currentPlaybackTime) // will print 10.0 

但是一旦玩家開始玩的項目,將其復位currentPlaybackTime爲零,將從頭開始:

applicationMusicPlayer.play() 
print(applicationMusicPlayer.currentPlaybackTime) // will print 0.0 

我想,也許是因爲我的播放設置爲剛剛創建,還沒有準備好球員,但既不.prepareToPlay()或.isPreparedToPlay( )幫助我解決這個問題。

我甚至試圖等待幾秒鐘,然後才從我設置的位置開始播放。沒有成功,非常令人沮喪。

也許它與我直接從Apple Music中播放歌曲的事實有某種聯繫?我無法切換到AVPlayer,因爲我必須從Apple Music播放音樂。

希望有什麼想法和幫助!

更新:我找到了方法beginSeekingBackward在MPMediaPlayback和它說,如果內容流,它不會有任何影響: https://developer.apple.com/documentation/mediaplayer/mpmediaplayback/1616248-beginseekingbackward?language=objc 好像只有內置的音樂應用程序已超過流控制音樂播放?

+1

我不確定applicationMusicPlayer是這種情況,但嘗試在可以維護強引用的地方定義它(如此,var myPlayer = ApplicationMusicPlayer())。 – solenoid

+0

@solenoid好吧,不是它正在發佈......它肯定是保留下來的,可以播放音樂。問題是,它不會播放曲目從某個時間低谷開始蘋果音樂 – Jan

+0

你試過用systemMusicPlayer()嗎? – solenoid

回答

0

我剛碰到這個確切的問題。我設法用下面的代碼繞過它。

它創建一個後臺線程,不斷檢查播放器的currentPlaybackTime。只要currentPlaybackTime不是我設定的時間,我將currentPlaybackTime設定回我想要的。

這感覺像一個可怕的黑客,但它到目前爲止我的工作。

MPMusicPlayerController *player = [MPMusicPlayerController systemMusicPlayer]; 
player.currentPlaybackTime = _startTime; 
[player play]; 

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul); 
dispatch_async(queue, ^{ 
    while(true) { 
     if (player.currentPlaybackTime != _startTime) { 
      player.currentPlaybackTime = _startTime; 
      break; 
     } 
    } 
}); 
+0

真正的野蠻:D你不會在播放中遇到任何中斷嗎?一切都聽起來很順利嗎? – Jan

+0

@Jan我還不確定。聽起來像他們應該的,但我有測試用戶提到音樂中存在微小的抖動。 –