我正在开发一个应用程序,它允许流式传输一个接一个播放的音频文件列表。我正在使用来自github的mattgallagher的audiostreamer。
当应用程序处于活动状态时,此功能正常,但当它在后台运行并且一首歌曲完成时,下一首歌曲无法启动。换句话说,音频流的初始化无法在后台运行
在我的info.plist中,我已将“所需的后台模式”设置为“ App播放音频”,但是当应用程序出现时,这无助于启动流在后台。
现在已经过了一周,我正在尝试寻找解决方案,但没有找到任何解决方案。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
当您停止播放音频文件时,您的应用程序将立即停止,因此第二个应用程序将无法开始播放。
初始化一个音频会话,它将在循环中播放短的静音音频文件。只要你需要,你可以保留它。 会话应该允许混合音频,这对音频没有影响,因为音频文件是静音的。
AudioSessionInitialize(NULL, NULL, NULL, NULL);
AudioSessionSetActive(YES);
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
UInt32 allowMixing = true;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixing), &allowMixing);
NSString* path = [[NSBundle mainBundle] pathForResource:@"silentAudio" ofType:@"m4a"];
NSURL* fileURL = [NSURL fileURLWithPath:path];
NSError* error = nil;
self.beatPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error];
if (error != nil)
{
//process the error
}
_beatPlayer.numberOfLoops = -1;
[_beatPlayer play];
停止播放也会停止应用程序线程:
[_beatPlayer stop];
答案 1 :(得分:0)
您应该使用UIBackgroundModes
:iPhoneOSKeys。
在.plist
文件中:
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
更新
将此添加到您的初始化代码:
NSError *setCategoryErr = nil;
NSError *activationErr = nil;
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&setCategoryErr];
[[AVAudioSession sharedInstance] setActive:YES error:&activationErr];