私のアプリはマイクを使用してオーディオを出力するので、オーディオセッションを再生と録音のカテゴリに設定していますが、これによりAirplayが無効になっているようです。カテゴリをPlayに設定すると、Airplayは出力で正常に機能します(ただし、明らかに入力は機能しません)。
Airplayで出力する必要がある場合に備えて、スピーカーへの出力ルートをオーバーライドしてみましたが、喜びはありませんでした。
何か案は?
私のアプリはマイクを使用してオーディオを出力するので、オーディオセッションを再生と録音のカテゴリに設定していますが、これによりAirplayが無効になっているようです。カテゴリをPlayに設定すると、Airplayは出力で正常に機能します(ただし、明らかに入力は機能しません)。
Airplayで出力する必要がある場合に備えて、スピーカーへの出力ルートをオーバーライドしてみましたが、喜びはありませんでした。
何か案は?
Audio Session Programming Guide から › カテゴリの操作 › AirPlay のカテゴリとモードの選択:
特定のカテゴリとモードのみが AirPlay をサポートします。次のカテゴリは、Airplay のミラー化されたバージョンとミラー化されていないバージョンの両方をサポートしています。
AVAudioSessionCategorySoloAmbient
AVAudioSessionCategoryAmbient
AVAudioSessionCategoryPlayback
このAVAudioSessionCategoryPlayAndRecord
カテゴリは、ミラー化された Airplay のみをサポートします。
このコードを試すことができます
// Set AVAudioSession
NSError *sessionError = nil;
[[AVAudioSession sharedInstance] setDelegate:self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError];
// Change the default output audio route
UInt32 doChangeDefaultRoute = 1;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,
sizeof(doChangeDefaultRoute), &doChangeDefaultRoute);
オーディオの行き先を変更したい場合は、AudioSessionSetProperty を呼び出し、オーディオの行き先を指定する定数を渡す必要があります。これらの定数は
kAudioSessionOverrideAudioRoute_None、オーディオをレシーバーにルーティングすることを指定します (レシーバーにルーティングする場合はエアプレイ)、または
kAudioSessionOverrideAudioRoute_Speaker は、オーディオが電話の下部にあるスピーカーにルーティングされる必要があることを指定します。