私はオーディオストリーミングを行うためにAVAudioPlayer
andを使用しています。NSFileHandle
基本的な考え方は、ストリーミング オーディオ データをファイル システムを使用してデバイスに保存し、AVAudioPlayer
保存したばかりのファイルを再生するために使用することです。 AVAudioPlayer
ストリーミング中でもそのファイルを再生できます。
UIButton
ストリーミング/ダウンロードを開始する必要があります。ダウンロードしたデータが一定のBytesまで蓄積されると、自動的に再生されAVAudioPlayer
ます(の"play"メソッドAVAudioPlayer
がトリガーされます)。私の質問は、ボタンをタップしてストリーミング/ダウンロードを開始し、すぐに iPhone のホームボタンを押してアプリをバックグラウンドにすることです。ダウンロードはバックグラウンドで実行され続けますが、"play" メソッドAVAudioPlayer
は "NO" を返します。これは、"play" メソッドがオーディオを再生しないことを意味します。
AVAudioSession
関連するコードをオーディオ プレーヤーの init メソッドに追加しました。
- (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 で、キー「必要なバックグラウンド モード」に「アプリがオーディオを再生」という項目を追加しました。ただし、「再生」はまだバックグラウンドで適切に呼び出されません。私は他に何を逃したのですか?よろしくお願いします。