2

次々に再生されるオーディオ ファイルのリストをストリーミングできるアプリケーションを開発しています。githubのマットギャラガーのオーディオストリーマーを使用しています。

これは、アプリがアクティブなときは正常に機能しますが、バックグラウンドになり、1 つの曲が終了すると、次の曲の開始に失敗します。つまり、オーディオ ストリーマーの初期化がバックグラウンドで機能していません。

私の info.plist で、「Required background modes」を「App Plays audio」に設定しましたが、アプリがバックグラウンドにあるときにストリームを開始するのにこれは役に立ちません。

1週間ほど経ちましたが、解決策を探していますが、見つかりませんでした。この問題を解決するのを手伝ってくれる人はいますか?

4

2 に答える 2

1

オーディオ ファイルの再生を停止するとすぐにアプリケーションが停止するため、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

使用する必要があります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];
于 2013-07-10T13:36:58.477 に答える