0

アプリで 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;
    }

}
4

2 に答える 2

0

私は同じ問題に苦しんでいました。事は

-(void)playerStateChanged:(DeezerPlayerState)playerState

プレーヤーの状態で

DeezerPlayerState_Finished

別のスレッド (メイン スレッドではない) から呼び出され、Deezer SDK が原因です。

解決策は簡単です。switch ステートメントで、「performSelectorOnMainThread」を使用して [self.grabbergrabStream] が呼び出されていることを確認してください。

[self.grabber performSelectorOnMainThread:@selector(grabStream) withObject:nil waitUntilDone:false];
于 2014-05-26T14:40:05.120 に答える