2017-02-11 131 views
1

我正在使用MPMusicPlayerController systemMusicPlayer播放 音樂,但在跳過歌曲後,我注意到顯着的延遲。MPMusicPlayerController系統音樂播放器播放skipToNextItem速度慢滯後

這裏是我測量了我的 「滯後」,有時它是更快:

  • 1.280796
  • 1.210124
  • 1.019931
  • 1.167739

跳過幾首歌曲之後聽到聲音之前的延遲相當多地增加了 。


-(void)viewDidLoad { 
    [[MPMusicPlayerController systemMusicPlayer] setQueueWithQuery:[MPMediaQuery songsQuery]]; 
    [[MPMusicPlayerController systemMusicPlayer] prepareToPlay]; 

    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 

    [notificationCenter addObserver:self selector:@selector(handlePlaybackStateChanged:) 
           name:MPMusicPlayerControllerPlaybackStateDidChangeNotification object:nil]; 


    [notificationCenter addObserver:self 
          selector:@selector(handleNowPlayingItemChanged:) 
           name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification 
          object:[MPMusicPlayerController systemMusicPlayer]]; 

    [[MPMusicPlayerController systemMusicPlayer] beginGeneratingPlaybackNotifications]; 

} 

-(IBAction)playBtn:(id)sender {     
    if ([MPMusicPlayerController systemMusicPlayer].playbackState !=  MPMusicPlaybackStatePlaying) { 
      [[MPMusicPlayerController systemMusicPlayer] play]; 
     } else { 
      [[MPMusicPlayerController systemMusicPlayer] pause]; 
     } 
} 

-(void)skipTrack { 

    startTrackChange = [NSDate date];    
    [[MPMusicPlayerController systemMusicPlayer] skipToNextItem]; 
} 


-(void)handleNowPlayingItemChanged:(id)notification { 

    NSLog(@"%f",[startTrackChange timeIntervalSinceNow]); 
} 
+0

更多的測試..但它需要的顯著量時間。 ( 前10秒以上,你聽到任何聲音) – Wayne

+0

我創建了一個示例項目,以減少變數, 量仍然問題仍然存在: -0.092157,-0.268869,-0.237229,-0.074643,-0.096063 , -1.218512,-0.189666,-0.164457 這些測量結果不能揭示何時聲音實際開始變爲可聽見,這比測量值多。 IOS10.x有些東西是非常錯誤的。 – Wayne

+0

我在iPhone6s Plus上測試了IOS音樂應用程序,打開應用程序,選擇下載的音樂,然後選擇所有歌曲。然後一首歌開始按預期播放,然後我迅速點擊下一個按鈕幾次,然後在一段時間內沒有播放。這可能是一個IOS錯誤。我已經向蘋果提交了一個bug,但我不知道他們需要多長時間才能做出迴應,如果有的話。 – Wayne

回答

0

這似乎爲我工作:跳過幾次音樂最終開始播放後

MPMediaQuery *mediaQuery = [MPMediaQuery songsQuery]; 

    // filter out cloud items, cloud items cause delays 
    [mediaQuery addFilterPredicate:[MPMediaPropertyPredicate 
           predicateWithValue:@NO 
             forProperty:MPMediaItemPropertyIsCloudItem]];