1

ビデオの再生と録画の両方をサポートするアプリケーションを構築しています (同時にではなく、提供される 2 つの別個の機能です)。アプリがバックグラウンドに入って戻った後にビデオを再生するには、plist にApp plays audio項目を追加する必要がありました (再生に使用しています)。Required background modesMPMoviePlayerController

ただし、これにより、ビデオ録画に問題が発生します (使用UIImagePickerControllerしています)。基本的に、ピッカーが ([キャンセル] ボタンによって、またはメディアの選択が終了したときに) ピッカーが閉じられた後でも、アプリはオーディオ録音セッションを実行し続けます。

plist からアイテムを削除するApp plays audioと、ImagePickerController のオーディオ セッションは誤動作を停止しますがMPMoviePlayerViewController、バックグラウンド モードからアプリに切り替えたときに再生を再開できません。

MPMoviePlayerControllerとの両方がUIImagePickerController適切に機能するように、オーディオ セッションの処理をカスタマイズする方法はありますか?

4

2 に答える 2

2

はい、必要に応じてオーディオセッションの処理をカスタマイズする方法があります。設定を設定しようとしないでくださいApp plays audio

代わりに、AppDelegateコード(通常、提供されている単純なウィザードプロジェクトのAppDelegate.mにあります)で、でapplicationWillResignActive:の再生を停止するメソッドでコードを指定しMPMoviePlayerController、を使用applicationDidBecomeActive:して、一時停止した時点で再生を再開します。必要に応じて。

これにより、一時停止後にビデオを再開できるだけでなく、状態を保存して、アプリがメモリから削除された場合やユーザーがビデオを終了した場合にビデオを再開できるようになります。

于 2012-10-29T06:25:59.043 に答える
1

バックグラウンドモードをスクラッチし、代わりに通知を使用してプレーヤーを一時停止/再開できます。UIApplicationクラスリファレンスUIApplicationDidBecomeActiveNotificationのおよびUIApplicationWillResignActiveNotificationを参照してください。

あなたはいくつかのコードを引っ掛けて、これがこのクラスに実装されているのを見ることができます。そのクラスの関連コードの一部を次に示します。

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(_didBecomeActive:)
                                                 name:UIApplicationDidBecomeActiveNotification
                                               object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(_willResignActive:)
                                             name:UIApplicationWillResignActiveNotification
                                           object:nil];

- (void) _didBecomeActive:(NSNotification*)notification {
  if (_wasPlaying) {
    [_movieController play];
  }
}

- (void) _willResignActive:(NSNotification*)notification {
  _wasPlaying = _movieController.currentPlaybackRate != 0.0;
  if (_wasPlaying) {
    [_movieController pause];
  }
}
于 2012-10-29T14:33:25.050 に答える