2017-02-11 112 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]];