2012-01-18 8 views
3

ヘッドフォンが接続されているときにオーディオをヘッドフォンにルーティングし、ヘッドフォンが接続されていないときにiPhoneスピーカーで再生しようとしています。AVplayerスピーカーとヘッドフォンへのオーディオルーティング

私はすべての機能ヘッドホンが

AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, audioRouteChangeListenerCallback, nil); 

void audioRouteChangeListenerCallback (
             void      *inUserData, 
             AudioSessionPropertyID inPropertyID, 
             UInt32     inPropertyValueSize, 
             const void    *inPropertyValue 
             ) { 
    DetailViewController *controller = (__bridge_transfer DetailViewController *) inUserData; 
    if (inPropertyID != kAudioSessionProperty_AudioRouteChange) return; 

    CFDictionaryRef routeChangeDictionary = (CFDictionaryRef)inPropertyValue; 

    CFNumberRef routeChangeReasonRef = (CFNumberRef)CFDictionaryGetValue (routeChangeDictionary, CFSTR (kAudioSession_AudioRouteChangeKey_Reason)); 
    SInt32 routeChangeReason; 
    CFNumberGetValue (routeChangeReasonRef, kCFNumberSInt32Type, &routeChangeReason); 

    if (routeChangeReason == kAudioSessionRouteChangeReason_OldDeviceUnavailable) { 
     NSLog(@"UnPlugged"); 
[controller headphoneIsPlugged]; 
     UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; 
     AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute, sizeof (audioRouteOverride),&audioRouteOverride); 
    } else if (routeChangeReason == kAudioSessionRouteChangeReason_NewDeviceAvailable) { 
     NSLog(@"Plugged in"); 
    } 
} 

と呼ばれていない次のことを試してみました。プログラムはセクションのその部分に行くことさえありません。

ヘッドホンを抜くと、オーディオは停止し、スピーカーで再生されないものは何もありません。

audiolisterの中に入れてみましたが、次のように書いてみました。 [controller.avplayer play]; まだ何も起こっていません。

あなたはリスナーを追加するときDetailViewControllerのインスタンスを渡す必要が

答えて

0

を助けてください。これはユーザーデータとして渡されます。これがなければ(__bridge_transfer DetailViewController *) inUserData;はnilを返します。

あなたDetailViewController内からそれを呼び出す場合はあなたのコードはこのようなものになるだろう:

 
AudioSessionAddPropertyListener (
    kAudioSessionProperty_AudioRouteChange, 
    audioRouteChangeListenerCallback, 
    (__bridge void *)(self) 
); 
関連する問題