0

私はオーディオストリーミングを行うためにAVAudioPlayerandを使用しています。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 で、キー「必要なバックグラウンド モード」に「アプリがオーディオを再生」という項目を追加しました。ただし、「再生」はまだバックグラウンドで適切に呼び出されません。私は他に何を逃したのですか?よろしくお願いします。

4

4 に答える 4

1
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

UIBackgroundTaskIdentifier newTaskId = UIBackgroundTaskInvalid;
newTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];

/* そして、info.Plist ファイルで必要なバックグラウンド モード: App PLAYS Audio */

于 2013-09-18T10:02:08.627 に答える
0

この非常に問題に直面しました。-setCategory:withOptions:error: で AVAudioSessionCategoryOptionMixWithOthers を使用することをお勧めします。また、おそらく、カテゴリを設定する前ではなく、設定したにセッションをアクティブにするのが理にかなっています。

于 2013-05-28T07:31:27.460 に答える