2012-01-18 64 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]; 但仍然没有发生。

请帮

回答

0

你需要传递的DetailViewController的情况下,当你添加的监听器。这将作为用户数据传入。没有这个(__bridge_transfer DetailViewController *) inUserData;将返回零。

您的代码将是这样的,如果你从你的DetailViewController中调用它:

 
AudioSessionAddPropertyListener (
    kAudioSessionProperty_AudioRouteChange, 
    audioRouteChangeListenerCallback, 
    (__bridge void *)(self) 
); 
相关问题