ios - 使用 AmbientSound session 的 AVAudioPlayer 在应用程序处于后台时不播放

标签 ios audio avaudioplayer audiosession

如果这在 apple 文档中,那么我找不到它 - 希望有人能提供帮助:

我的应用程序偶尔会播放简短的音频片段 - 我希望音频与其他应用程序(如 iPod 应用程序)在后台播放的音频混合在一起 - 但我也希望它在应用程序运行时继续播放这些音频片段背景。

我在 info.plist 的 Required Background Modes 设置中设置了“App plays audio”(该应用程序也使用位置服务,因此也设置在那里)

我的应用在 applicationDidFinishLaunching 上设置 Audio Session :

AudioSessionInitialize (NULL,NULL,NULL,NULL);
UInt32 sessionCategory = kAudioSessionCategory_AmbientSound;
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,sizeof (sessionCategory),&sessionCategory); 
AudioSessionSetActive(true);

在我的 viewWillAppear: 方法中,我有:

[super viewWillAppear:animated];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder]; 

以及viewWillDisappear:中相应的事件处理程序和endReceivingRemoteControlEvents代码,如iOS 4: Remote controls for background audio中所述

最后我有一个 AVAudioPlayer,以正常方式设置,在某些事件上播放声音

bool successful = [avAudioPlayer play];
if(!successful)
    NSLog(@"did not play");

当应用程序处于前台时,应用程序可以正常工作并播放音频 - 但是当应用程序进入后台并且应用程序尝试播放声音时,[avAudioPlayer play] 的返回值为 NO,并且声音不会播放- 当切换回前台时,音频再次开始工作。

如果我在设置 session 时改为使用

    UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;

然后音频在前景和背景中完美播放。但是 MediaPlayback 并不是这个应用程序真正正确的模式,因为我只是偶尔播放音频剪辑 - AmbientSound 确实是我应该使用的模式。

我错过了什么?只是不能使用 kAudioSessionCategory_AmbientSound 在后台播放音频吗?如果是这样,我在文档中没有找到任何相关内容。

最佳答案

最后不得不为此提交技术支持请求。

根据 Apple 的说法,AmbientSound 类别不支持后台播放 - 您必须使用 MediaPlayback。

他们声称这在文档中 - 我又看了一遍,但找不到。

好的,使用 kAudioSessionProperty_OverrideCategoryMixWithOthers 可以很容易地将背景声音混合到 MediaPlayback 中 - 但我现在将不得不跳过其他一些环节来复制其他 AmbientSound 功能(遵守静音开关并且在锁定时不播放)。我真的不明白为什么不支持在后台播放 AmbientSound - 但我们开始了。

关于ios - 使用 AmbientSound session 的 AVAudioPlayer 在应用程序处于后台时不播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8763942/

相关文章:

ios - Swift:UIScrollView 不使用 XLPagerTabStrip 显示 subview Controller

ios - 快速解析 UTF8 json 文件不能与 SwiftyJson 一起正常工作

将麦克风输入保存到原始 PCM 文件的 iOS AudioUnit 设置

iphone - 为什么 AVAudioPlayer 在应用程序退出后台模式后自动继续播放?

arrays - 错误: Cannot convert value of type "[String]" to expected argument type "String?"

ios - 自动布局,UiScrollView 内的 UITableView 不会增长

python - 音频数据字符串格式为numpy数组

audio - 心理实验中音频的 Unicode 解码错误

swift - 为什么AVAudioPlayer的currentTime和duration为零?

ios - 删除用户位置注释上的选择图像