MPNowPlayingInfoCenter - 经过的时间在音频暂停时保持计数

时间:2013-12-05 16:30:29

标签: ios core-audio mpnowplayinginfocenter

我目前正在尝试弄清楚如何在iOS上MPNowPlayingInfoCenter指定已用时间。

当我开始播放时,我将经过时间设置为0并将播放速率设置为1.这样可以正常工作。

然后我暂停音频。这可以通过MPNowPlayingInfoCenter正确检测到,并暂停接口上的已用时间。

只有当我恢复播放时才会出现问题:时间显示为暂停时继续播放。例如:

1. Start playback
2. Let it play for 10 seconds
3. Pause for 5 seconds
4. Resume playback

此时,轨道中的实际时间为10秒。然而,信息中心显示15。

我尝试在暂停时将播放速率设置为0,但这会导致一种奇怪的行为:显示的时间会随机变为较低的值。

此外,我没有机会在恢复歌曲之前更新的已用时间,因为我在收到play事件后才有机会这样做。

tl; dr:如何处理MPNowPlayingInfoCenter中的暂停及其时间特征?

3 个答案:

答案 0 :(得分:13)

好吧,实际上将速率设置为0,并在暂停和播放时将时间重置为实际值。

答案 1 :(得分:1)

好吧,我已经为MPMoviePlayerPlaybackStateDidChangeNotification通知设置了一个选择器。每当电影播放,暂停,向上/向下滑动信息中心(控制中心)时都会调用它。或者即使电影是流媒体,它也会在接收响应时暂停/播放。

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(movieStateChange)
                                                 name:MPMoviePlayerPlaybackStateDidChangeNotification 

object:nil];

我做了

- (void)movieStateChange{
    [self updateControlCenter];
}

这就是我的updateControlCenter,它已经启动了播放信息并更新了MPNowPlayingInfoPropertyElapsedPlaybackTime密钥。

- (void)updateControlCenter{
    NSMutableDictionary *nowPlayingInfo = [center.nowPlayingInfo mutableCopy];
    [nowPlayingInfo setObject:[NSNumber numberWithDouble:self.player.currentPlaybackTime] forKey:MPNowPlayingInfoPropertyElapsedPlaybackTime];
    center.nowPlayingInfo = nowPlayingInfo;
}
祝你好运!

答案 2 :(得分:0)

我遇到了这个问题并通过每次播放曲目时更新经过的时间来解决这个问题。所以你的“播放”按钮应该更新信息

Class playingInfoCenter = NSClassFromString(@"MPNowPlayingInfoCenter");
if (playingInfoCenter) {
    NSMutableDictionary *songInfo = [[NSMutableDictionary alloc] init];
    [songInfo setObject:currentTrack.trackTitle forKey:MPMediaItemPropertyTitle];
    [songInfo setObject:currentTrack.artist forKey:MPMediaItemPropertyArtist];
    [songInfo setObject:currentTrack.albumTitle forKey:MPMediaItemPropertyAlbumTitle];
    [songInfo setObject:currentTrack.trackLength forKey:MPMediaItemPropertyPlaybackDuration];
    [songInfo setObject:currentTime forKey:MPNowPlayingInfoPropertyElapsedPlaybackTime];}