簡體   English   中英

在iOS應用中播放Deezer廣播

[英]Playing Deezer radio in iOS app

我正在嘗試通過我的應用流式播放Deezer廣播,但是只能播放第一首曲目,並且在第一首曲目播放完之后(播放器狀態->完成),當我想播放其他曲目時無法獲得任何回調。 當我再次調用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;
    }

}

以下是使用Deezer iOS SDK播放廣播的步驟:

  • 使用current = true調用requestRadioForListening檢索當前歌曲,然后流式傳輸
  • 在歌曲結束之前,您應該在曲目結束前約20秒再次調用current = true的相同方法,這將為您提供有關下一首曲目的信息
  • 歌曲播放完畢后,流式傳輸剛剛檢索到的歌曲

並以此循環。

我在同一個問題上掙扎。 事情是

-(void)playerStateChanged:(DeezerPlayerState)playerState

處於玩家狀態

DeezerPlayerState_Finished

從另一個線程(不是主線程)調用,而Deezer SDK就是其中一個。

解決方法很簡單,在您的switch語句中,請確保使用“ performSelectorOnMainThread”調用[self.grabbergrabStream],如下所示

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM