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在后台通话结束后无法继续播放音乐(实际上没有声音)的主要内容,如果未能解决你的问题,请参考以下文章

iOS 后台状态监控通话状态

Kivy 应用程序有啥方法可以继续在后台工作吗?

实现电话通话长度监控 iOS

ibacon 如何在后台工作?

是否可以从结束预付费通话后提出的对话中读取通话费用历史记录?

通话结束后在屏幕上显示弹出窗口