我正在尝试通过我的应用程序流式播放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;
}
}
答案 0 :(得分:1)
以下是使用Deezer iOS SDK流式传输广播的步骤:
并循环播放。
答案 1 :(得分:0)
我正在努力解决同样的问题。 事情是
-(void)playerStateChanged:(DeezerPlayerState)playerState
播放器状态
DeezerPlayerState_Finished
从另一个线程(而不是主线程)调用,而Deezer SDK是应该责备的。
解决方案很简单,在你的switch语句中确保使用' performSelectorOnMainThread'来调用[self.grabber grabStream],就像这样
[self.grabber performSelectorOnMainThread:@selector(grabStream) withObject:nil waitUntilDone:false];