2

我正在开发一个应用程序,它允许流式传输将一个接一个地播放的音频文件列表。我正在使用来自github的 mattgallagher 的 audiostreamer 。

当应用程序处于活动状态时,这可以正常工作,但是当它进入后台并且一首歌曲完成时,下一首歌曲无法启动。换句话说,音频流媒体的初始化不在后台工作。

在我的 info.plist 中,我已将“必需的背景模式”设置为“应用程序播放音频”,但这无助于在应用程序处于后台时启动流。

现在已经有一个星期了,我正在尝试寻找解决方案,但没有找到任何解决方案。谁能帮我解决这个问题?

4

2 回答 2

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];
于 2013-07-12T07:31:42.040 回答
0

你应该使用UIBackgroundModesiPhoneOSKeys

在您的.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];
于 2013-07-10T13:36:58.477 回答