我想在前台播放音频文件,背景它应该使用静音开关,即如果静音开关打开,那么它不应该播放,如果静音开关关闭则应播放音频。
**我正在开发SIP呼叫应用程序。当用户接到电话时,应该播放声音/铃声。它应该在应用程序处于后台/前台时播放,如果硬件静音开关打开/关闭,它应该静音/取消静音。
为此,我在下面的代码中使用了AVPlyaer。
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback error:&error];
[session setActive:YES error:nil];
NSURL * audioFileUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test1" ofType:@"mp3"]];
AVPlayer *player = [[AVPlayer alloc] initWithURL: audioFileUrl];
[player play];
我还添加了#34; App使用AirPlay播放音频或流音频/视频"到info.plist中的后台模式
这是在两种模式下播放,但在硬件静音开关打开时不静音。
如果我使用AVAudioSessionCategoryAmbient
不在后台模式上播放。
我使用AVAudioPlayer但在硬件开关打开时无法找到静音
答案 0 :(得分:2)
您的音频会话类别可能设置错误。 由于您要尊重静音开关,因此您应该使用SoloAmbient
AVAudioSessionCategorySoloAmbient
默认类别的类别, 除非您使用setCategory设置类别:error:或 setCategory:withOptions:error:method。
通过屏幕锁定和静音开关(在iPhone上称为响铃/静音开关)使您的音频静音。
默认情况下,使用此类别表示您的应用的音频是 不可混合激活会话将中断任何其他音频 会议也是不可混合的。为了让混合,使用 改为AVAudioSessionCategoryAmbient类别。
适用于iOS 3.0及更高版本。
您似乎使用了此类别:
<强> AVAudioSessionCategoryPlayback 强>
播放录制音乐或其他中心声音的类别 成功使用您的应用程序。
使用此类别时,您的应用音频会继续,静音开关设置为静音或屏幕锁定时。(此开关被调用 iPhone上的响铃/静音开关。)继续播放音频 app转换为背景(例如,当屏幕 锁),将音频值添加到你的UIBackgroundModes键 信息属性列表文件。
默认情况下,使用此类别表示您的应用的音频是 不可混合激活会话将中断任何其他音频 会议也是不可混合的。为了允许混合此类别, 使用AVAudioSessionCategoryOptionMixWithOthers选项。
适用于iOS 3.0及更高版本。
答案 1 :(得分:2)
很高兴地说,我发现skype是如何实现此功能的。
在前台,我们可以使用任何一个类别的AVAudioSession来播放铃声。
plot "< awk '{a[$1]++}END{for(i in a){print i,a[i]}}' datafile |sort -nk1"
在后台,我们必须使用自定义声音的本地通知。这将适用于硬件静音开关。但这里的声音文件长度不应超过30秒。
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory: AVAudioSessionCategorySoloAmbient error:&error];
[session setActive:YES error:nil];
NSURL * audioFileUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test1" ofType:@"mp3"]];
AVPlayer *player = [[AVPlayer alloc] initWithURL: audioFileUrl];
[player play];
希望这会有用:)。
答案 2 :(得分:0)
这是一个用于检测静音开关状态的库:http://sharkfood.com/content/Developers/content/Sound%20Switch/。 它基于Apple的公共API。它只播放系统声音并测量用于完成播放的时间量。它用于Instagram iOS应用程序。