私は、MPMoviePlayerViewController を介して有効なデバイスを放送するために 10 秒のプレビュー ビデオを表示するアプリに取り組んでいます。ユーザーは、MPVolumeView によって提供されるシステム アクション シートを介してエアプレイ対応デバイスを選択し、MPMoviePlayerViewController を開始します。
10 秒後にムービープレーヤーをプログラムで停止することはできますが、デバイスがルートがまだアクティブであると認識しないように (また、ユーザーがそうする必要がないように)、ルートの変更を「強制」したいと考えています。毎回他のルートを選択する前に、最初にそのルートの選択を解除します)。次のコードを使用して、目的のルート変更を最初に達成できました。これは、共有 AVAudioSession インスタンスへの強力なポインターがあることを前提としています。
NSError *activationError = nil;
AVAudioSession *session = [AVAudioSession sharedInstance];
self.audioSession = session;
[self.audioSession setActive:YES error: &activationError];
[self.audioSession setCategory:AVAudioSessionCategoryPlayAndRecord
error: nil];
[self.audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:nil];
[self.audioSession setCategory:AVAudioSessionCategorySoloAmbient
error: nil];
Apple のドキュメントに従って overrideOutputAudioPort をオーバーライドする前にカテゴリを PlayAndRecord に設定し、その後すぐにカテゴリをデフォルト (SoloAmbient) に戻そうとしています。残念ながら、その後ユーザーが MPVolumeView ボタンをタップしてルートを選択するたびに、デバイスはそのエアプレイ対応デバイスのミラーリングをオンにし、必要に応じて MPMoviePlayerController を使用しません。
ミラーリングがデフォルトでオンになる理由、および/または非推奨の方法を使用せずに上記の目的の効果を達成する方法についての考えはありますか?
前もって感謝します。