2011-02-18

iPhoneアプリ開発: kAudioSessionCategory_PlayAndRecord 利用時に iPod touch 3rd で陥ったエラー

映像・音声の送受信アプリを開発中、各種端末(iPhone 3G/3GS/4, iPod touch 3rd/4th Generation, iPad 1st/2nd Generation)でテストするなかで iPod touch (3rd Generation) による受信再生時のみエラーが発生してしまいました。
エラー詳細と解決した方法についてメモしておきます。


エラー詳細

iPod touch (3rd Generation) で映像・音声を受信+再生する場合にのみエラーが発生。
マイク付きイヤフォン接続時は、エラーとならない。
マイクなしイヤフォン接続時は、エラーとなる。
イヤフォン非接続時は、エラーとなる。

エラー時のデバッグコンソールは次の通り。
2011-02-17 21:49:30.800 SamplePlayer[340:307] An instance 0x1ecd00 of class AVPlayerItem was deallocated while key value observers were still registered with it. Observation info was leaked, and may even become mistakenly attached to some other object. Set a breakpoint on NSKVODeallocateBreak to stop here in the debugger. Here's the current observation info:
<NSKeyValueObservationInfo 0x1edbe0> (
<NSKeyValueObservance 0x1e9920: Observer: 0x1d4ac0, Key path: timedMetadata, Options: <New: NO, Old: NO, Prior: NO> Context: 0x0, Property: 0x1d4ef0>
<NSKeyValueObservance 0x1edba0: Observer: 0x1e8600, Key path: presentationSize, Options: <New: YES, Old: NO, Prior: NO> Context: 0x0, Property: 0x115540>
)

各端末のオーディオスペックは次の通り。
  • iPhone 3G/3GS/4
    • マイク、スピーカー内蔵
  • iPod touch 3rd Generation
    • スピーカーのみ内蔵
  • iPod touch 4th Generation
    •  マイク、スピーカー内蔵
  • iPad 1st/2nd Generation
    • マイク、スピーカー内蔵
iPod touch 3st Generationのみマイクを内蔵していないので、録音送信時にマイク非接続でエラーとなる、という話なら分かるのに・・・と悩む。(ちなみに録音送信時は、マイク未検出でアラート表示する実装を既にしてあったため、エラーとはなりませんでした)


解決した方法

受信再生するソースの中に次のコードがあったのですが、ここをコメントアウトすることで解決しました。
UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, 
                        sizeof (sessionCategory), 
                        &sessionCategory);
「kAudioSessionCategory_PlayAndRecord」というのは録音再生両方必要なときの設定です。
録音送信するアプリと受信再生するアプリでいくつかのソースコードを共有していたのですが、その影響で、本来録音は関係ないはずの再生側アプリで「kAudioSessionCategory_PlayAndRecord」を設定してしまっていたようです。
動作対象端末のほとんどにマイクが内蔵されているため、上記の間違った設定でもほとんどの端末では問題なく動作できていたが、iPod touch 3rdのみマイクが内蔵されていないためにエラーが発生した、というわけでした。

------
iPhoneオーディオプログラミングに関しては次の本がオススメ。
iPhone Core Audioプログラミング
永野 哲久 / ソフトバンククリエイティブ / 売り上げランキング: 28301
おすすめ度の平均: 4.5
4 iPhoneプログラマは持っていて損のない良書
5 オーディオ系アプリ開発のバイブル
5 あまり知られたくない本です。
4 必要な事は書かれてます。
5 明快な説明と実践的なサンプルコードがすばらしい
posted with amazlet at 2011.2.18

0 件のコメント: