0

AVPlayer を使用してリモート mp3 をストリーミングしようとしています。

オーディオ セッションを設定し、Plays Audio In Background を info.plist ファイルに追加しました。

私はこのコードを実行しています:

self.timeObserver = [self->player addPeriodicTimeObserverForInterval:CMTimeMake(1, 1) queue:nil usingBlock:^(CMTime time) {
    [self updateControls];
}];

毎秒 updateControls を呼び出す時間オブザーバーを追加します。

問題は、サウンド バッファが少ない場合、プレーヤーが一時停止するだけで、バックグラウンドでこのコードが停止するため、アプリで手動で再生を再度押す必要があることです。(プレーヤーを一時停止すると、このコードも実行されません)

私は何か間違ったことをしていますか?中断することなくバックグラウンドでコードを実行するにはどうすればよいですか?

4

2 に答える 2

0

次のようにバックグラウンドコードをエンベロープする必要があります。

__block UIBackgroundTaskIdentifier bgTask = nil;
    bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^(void) {
        [[UIApplication sharedApplication] endBackgroundTask: bgTask];
        bgTask = UIBackgroundTaskInvalid;
    }];

//Your bg code here

[[UIApplication sharedApplication] endBackgroundTask: bgTask];
    bgTask = UIBackgroundTaskInvalid;
于 2011-08-16T05:12:30.210 に答える
0

バックグラウンドで任意のコードを無期限に実行することはできません。オーディオを再生し続けることはできますが、最前線のアプリでない場合は、UIを更新することを期待するべきではありません。アプリがフォアグラウンドに戻ったときにUIを更新できます。

AVAudioSessionを適切に設定してアクティブにし、UIBackgroundModesを設定している限り、オーディオの最前線に立つことができます。

http://developer.apple.com/library/iOS/#documentation/Audio/Conceptual/AudioSessionProgrammingGuide/Configuration/Configuration.htmlを参照してください

于 2011-08-21T22:44:47.490 に答える