音频播放器在后台播放,应该使用硬件静音开关

我想在前台,后台播放音频文件,它应该与静音开关一起工作,即静音开关打开时不应播放,如果静音开关关闭,则应播放音频。

**基本上正在开发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];

此外,我还添加了“应用程序播放音频或使用AirPlay播放音频/视频”到info.plist中的背景模式

这是在两种模式下播放,但硬件静音开关打开时不会静音。 如果我使用“AVAudioSessionCategoryAmbient”不在背景模式中播放。 我使用AVAudioPlayer,但在硬件开关打开时无法找到静音

请帮我解决它或以其他任何方式来达到此目的。 提前致谢。


您的音频会话类别可能设置不正确。 既然你想尊重静音开关,你应该使用SoloAmbient

AVAudioSessionCategorySoloAmbient

用于默认类别的类别,除非您使用setCategory:error:或setCategory:withOptions:error:方法设置类别。

屏幕锁定和Silent开关(称为iPhone上的Ring / Silent开关)会使您的音频静音。

默认情况下,使用此类别意味着您的应用程序的音频不可混合 - 激活您的会话将中断任何其他音频会话也是不可混合的。 要允许混合,请改用AVAudioSessionCategoryAmbient类别。

适用于iOS 3.0及更高版本。

您似乎已经使用了这个类别:

AVAudioSessionCategoryPlayback

用于播放录制音乐或其他声音的类别,这些对于成功使用您的应用程序至关重要。

使用此类别时, 您的应用音频会继续,无声开关会设置为无声或屏幕锁定。 (该开关在iPhone上称为铃声/静音开关。)要在应用程序转换到背景时继续播放音频(例如,屏幕锁定时),请将音频值添加到信息属性列表文件中的UIBackgroundModes项。

默认情况下,使用此类别意味着您的应用程序的音频不可混合 - 激活您的会话将中断任何其他音频会话也是不可混合的。 要允许为此类别混音,请使用AVAudioSessionCategoryOptionMixWithOthers选项。

适用于iOS 3.0及更高版本。

资料来源: https //developer.apple.com/library/prerelease/ios/documentation/AVFoundation/Reference/AVAudioSession_ClassReference/index.html#//apple_ref/doc/constant_group/Audio_Session_Categories


我很高兴地说,我发现Skype是如何实现这一功能的。

在前台,我们可以使用任何一个类别的AVAudioSession来播放铃声。

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];

在后台我们必须使用自定义声音的本地通知。 这将与硬件静音开关一起使用。 但是这里声音文件的长度不应该超过30秒。

    UILocalNotification* notification = [[UILocalNotification alloc] init];
    [notification @"Title"];
    [notification setAlertBody:@"Body"];
    [notification setAlertAction:noteAction];
    [notification setSoundName:@"ringtone.mp3"];
    [[UIApplication sharedApplication] presentLocalNotificationNow:notification];

希望这将是有用的:)。


以下是用于检测静音开关状态的库:http://sharkfood.com/content/Developers/content/Sound%20Switch/。 它基于Apple的公共API。 它只是播放系统声音并测量用于完成播放的时间量。 它在Instagram iOS应用程序中使用。

链接地址: http://www.djcxy.com/p/86873.html

上一篇: Audio Player play in background and should be work with hardware mute switch

下一篇: Qt C++ library in Android Eclipse project: QSQLITE driver not loaded