freestreamer在后台通话结束后无法继续播放音乐(实际上没有声音)
Posted
技术标签:
【中文标题】freestreamer在后台通话结束后无法继续播放音乐(实际上没有声音)【英文标题】:freestreamer can not resume play music after call end when app in background(have no sound actually) 【发布时间】:2015-05-26 11:54:57 【问题描述】:我尝试用freestreamer播放音乐,app在后台来电,音乐可以停止,但是如果通话结束(CTCallStateDisconnected),音乐就不能再恢复了,可以捕捉通话结束时的状态(AVAudiosessionInterruptionTypeEnded) 在 FSAudioStream 函数里面命名
else if ([interruptionType intValue] == AVAudioSessionInterruptionTypeEnded)
if (self.wasInterrupted)
self.wasInterrupted = NO;
@synchronized (self)
[[AVAudioSession sharedInstance] setActive:YES error:nil];
fsAudioStreamPrivateActiveSessions[[NSNumber numberWithUnsignedLong:(unsigned long)self]] = @"";
if (self.wasContinuousStream)
/*
* Resume playing.
*/
[self play];
else
/*
* Resume playing.
*/
[self playFromOffset:_lastSeekByteOffset];
而且app还可以在后台捕捉到kFsAudioStreamPlaying的状态,表示又开始播放音乐了,但是我根本听不到音乐!!!有人可以知道如何解决这个问题吗? 顺便说一句,我也设置了
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
支持后台播放。
2015 年 5 月 27 日更新:
我看过一些关于:Background audio doesn't resume after a call,在这种情况下在代码中捕捉到这个中断通知,也可以检测到通话结束状态并重新启动音乐,但完全没有声音
【问题讨论】:
【参考方案1】:很高兴,解决这个问题:在后台,我们应该添加一些代码来支持后台播放
@synchronized (self)
[[AVAudioSession sharedInstance] setActive:YES error:nil];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
fsAudioStreamPrivateActiveSessions[[NSNumber numberWithUnsignedLong:(unsigned long)self]] = @"";
这将解决这个问题!
【讨论】:
我想我也遇到了同样的问题,你能告诉我更多关于解决方案的信息吗?你把这个@synchronized
代码放在哪里了?
@Tommecpe 在 Common/FSAudioStream.mm 文件中,link
是的,我已经尝试过了,但我没有看到任何变化...当我在后台时,我可以停止我的音频流,但我无法播放它。您是否进行了其他更改?
当我第一次在我的代码中使用[AVAudioSession sharedInstance]
时,我还添加了[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
,不仅在@synchronized
中以上是关于freestreamer在后台通话结束后无法继续播放音乐(实际上没有声音)的主要内容,如果未能解决你的问题,请参考以下文章