我正在使用 AVAudioPlayer
和 NSFileHandle
进行音频流。基本思路是将流式音频数据保存到具有文件系统的设备中,然后使用 AVAudioPlayer
播放刚刚保存的文件。 AVAudioPlayer
仍然可以播放该文件,即使流媒体正在进行中。
我有一个 UIButton
来开始流式传输/下载。当下载的数据累积到一定数量的Bytes时,AVAudioPlayer
会自动播放(触发AVAudioPlayer
的"play"方法)。我的问题是:我点击按钮开始流式传输/下载,然后很快按下 iPhone 的主页按钮,让我的应用程序进入后台。下载继续在后台运行,但 AVAudioPlayer
的“play”方法返回“NO”,这意味着“play”方法不播放音频。
我在音频播放器的初始化方法中添加了AVAudioSession
相关代码:
- (id) initWithURL:(NSString *) downloadedMusicURL
{
if ((self = [super init]))
{
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
CFURLRef url = CFURLCreateWithFileSystemPath (NULL, (CFStringRef)downloadedMusicURL, kCFURLPOSIXPathStyle, FALSE);
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:CFBridgingRelease(url) error:nil];
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setActive:YES error:nil];
[session setCategory:AVAudioSessionCategoryPlayback error:nil];
}
return self;
}
同样在 info.plist 中,我为键“Required background modes”添加了一个项目“App plays audio”。但是,“播放”仍然无法在后台正确调用。我还错过了什么?非常感谢。
最佳答案
您的应用无法在后台开始播放音频。这是有道理的。想一想如果用户没有积极使用的应用程序突然开始发出声音,设备会是什么样子!请记住,对于用户来说,将应用程序发送到后台与退出该应用程序是天真的等价物。您的应用绝不能像僵尸一样死而复生并开始制造噪音!
后台音频设置允许您的应用在前台产生音频继续当它然后进入的背景。然后它可以继续负责音频(如果它接收到远程事件)直到其他应用程序发出声音;之后,您的应用将再次停止运行,直到它被带到前台并发出声音。
因此,如果您想让它正常工作,您需要在您的应用进入后台之前开始播放一些声音。
关于ios - AVAudioPlayer 不开始在后台播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16564298/