在iOS应用程序中播放Deezer电台

时间:2014-02-21 14:16:28

标签: ios radio deezer

我正在尝试通过我的应用程序流式播放Deezer收音机,但只能播放第一首曲目,并且当我想在第一首曲目完成播放后播放其他曲目时无法获得任何回调(playertate - >结束)。当我再次调用grabStream时,我不会通过DeezerSessionRequestDelegate方法。任何帮助,将不胜感激。感谢。

以下是使用的主要方法:

-(void)grabStream{
    [[DeezerSession sharedSession] requestRadioForListening:kRadioId];
}
#pragma mark - DeezerSessionRequestDelegate

- (void)deezerSessionRequestDidReceiveResponse:(NSData *)data {
    NSLog(@"deezerSessionRequestDidReceiveResponse");
    NSDictionary* dictionary = [data objectFromJSONData];
    DeezerTrack* track = [[DeezerTrack alloc] initWithDictionary:dictionary];

    if ([_delegate respondsToSelector:@selector(onGetStream:forTrackId:)]) {
        NSString* stream = [dictionary objectForKey:@"stream"];
        if ([stream isKindOfClass:[NSString class]]) [_delegate onGetStream:stream forTrackId:[track deezerID]];
    }

    [track release];
}

- (void)deezerSessionRequestDidFailWithError:(NSError*)error {
    NSLog(@"deezerSessionRequestDidFailWithError");
}

并在另一个班级

#pragma mark - DeezerGrabberDelegate

- (void)onGetStream:(NSString *)stream forTrackId:(NSString *)trackId{
    NSLog(@"onGetStream :: previous stream track id :: %@ next track id :: %@",     _currentStreamTrackId, trackId);

    if(![trackId isEqualToString:_currentStreamTrackId]){
         _currentStreamTrackId = trackId;
        [[DeezerAudioPlayer sharedSession] initPlayerForRadioWithDeezerId:trackId stream:stream];

    }

 }


#pragma mark - DeezerAudioPlayerDelegate

 -(void)playerStateChanged:(DeezerPlayerState)playerState{
    NSLog(@"playerStateChanged :: %i", playerState);

    switch (playerState) {
        case DeezerPlayerState_Initialized :
        case DeezerPlayerState_Ready :            
        case DeezerPlayerState_Playing :
        case DeezerPlayerState_Paused :
        case DeezerPlayerState_WaitingForData :
        case DeezerPlayerState_Stopped :break;
        case DeezerPlayerState_Finished :
            NSLog(@"+++++++++++++End of track, we're going to play another one");
            [self.grabber grabStream];

            break;
    }

}

2 个答案:

答案 0 :(得分:1)

以下是使用Deezer iOS SDK流式传输广播的步骤:

  • 使用current = true调用requestRadioForListening来检索 当前的歌然后流吧
  • 在歌曲结束之前,你应该在音轨结束前约20秒再次使用current = true调用相同的方法, 将为您提供有关下一首曲目的信息
  • 如果歌曲完成,请将您刚检索到的歌曲流式传输

并循环播放。

答案 1 :(得分:0)

我正在努力解决同样的问题。 事情是

-(void)playerStateChanged:(DeezerPlayerState)playerState

播放器状态

  

DeezerPlayerState_Finished

从另一个线程(而不是主线程)调用,而Deezer SDK是应该责备的。

解决方案很简单,在你的switch语句中确保使用' performSelectorOnMainThread'来调用[self.grabber grabStream],就像这样

[self.grabber performSelectorOnMainThread:@selector(grabStream) withObject:nil waitUntilDone:false];