背景声音与cocoalibspotify(Background Audio with cocoali

2019-07-30 11:28发布

我已经正确启用背景音乐我的应用程序(在plist中)。 当前后播放下一首曲目是在后台完成(当手机被锁定/关)使用SPPlaybackManager不起作用。

在当前曲目结束,音频停止,该应用程序将不会开始播放下一首曲目,直到手机解锁,我的应用程序再次变得活跃。

我该如何解决? 下面是一个代码片段我使用,开始下一首曲目的播放。 我观察到,当前曲目变为零,然后开始播放下一首曲目。 日志显示我下当前曲目在播放管理器对象被设置,但可惜是沉默。

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {



    if([keyPath isEqualToString:@"spotifyPlaybackManager.currentTrack"]){

        NSLog(@"%@ %@",keyPath,self.spotifyPlaybackManager.currentTrack);

        if(self.spotifyPlaybackManager.currentTrack==nil && self.mode == PlayerModeSpotify){

            NSLog(@"PLAY NEXT");
            [self.spotifyPlaybackManager playTrack:self.nextSPTrack callback:^(NSError *error){
                if(error) TKLog(@"Spotify Playback Error %@",error);
            }];
        }
        [[NSNotificationCenter defaultCenter] postNotificationName:PlayerNowPlayingItemDidChange object:self];
        return;
    }



    [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}

安慰:

spotifyPlaybackManager.currentTrack (null)
PLAY NEXT
spotifyPlaybackManager.currentTrack <SPTrack: 0x60f8390>: Karaoke

Answer 1:

该解决方案是非常简单的,但我花了一年的时间实现它。 我的旧的解决办法是启动一首曲目结束之前后台任务,并保持运行,直到下一个曲目被打。 这是很容易出错。 代替:

让您的播放状态的曲目(播放或暂停)。 每当你过渡到播放,启动一个后台任务。 永远都不要停止,除非你过渡到暂停。 保持状态,甚至播放轨道之间。 只要你有背景音频模式,在你的info.plist和音频播放,您的后台任务将有无限超时。

一些伪代码:

@interface PlayController
@property BOOL playing;

- (void)playPlaylist:(SPPlaylist*)playlist startingAtRow:(int)row;
@end

@implementation PlayController
- (void)setPlaying:(BOOL)playing
{
    if(playing == _playing) return;
    _playing = playing;

    UIApplication *app = [UIApplication sharedApplication];
    if(playing)
        self.playbackBackgroundTask = [app beginBackgroundTaskWithExpirationHandler:^ {
            NSLog(@"Still playing music but background task expired! :(");
                    [app endBackgroundTask:self.playbackBackgroundTask];
                self.playbackBackgroundTask = UIBackgroundTaskInvalid;
            }];
    else if(!playing && self.playbackBackgroundTask != UIBackgroundTaskInvalid)
        [app endBackgroundTask:self.playbackBackgroundTask];
}
...
@end

编辑:哦,我终于博客上讲述它 。



Answer 2:

CocoaLibSpotify做了很多的工作,开始播放曲目,并在这个过程中可能会产生新的内螺纹。 我怀疑这是允许在backgrounding的声音风格,所以你很可能需要启动一个临时后台任务来改变轨道。



文章来源: Background Audio with cocoalibspotify