AVplayer音频路由到扬声器和耳机

3

当耳机插入时,我希望将音频路由到耳机,并在没有连接耳机的情况下通过iPhone扬声器播放。

我尝试了以下方法:

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");
    }
}

函数 headphone 根本没有被调用。程序甚至没有进入该部分。

现在当我拔掉耳机时,音频就停止了,不会通过扬声器播放。

在 audiolister 中,我尝试添加以下内容

[controller.avplayer play];

但仍然没有任何反应。

请帮忙解决问题。

1个回答

0

当你添加监听器时,需要传递DetailViewController的实例。这将作为用户数据传递。如果没有这个(__bridge_transfer DetailViewController *) inUserData;将返回nil。

如果你在DetailViewController内调用它,你的代码应该是这样的:

AudioSessionAddPropertyListener (
   kAudioSessionProperty_AudioRouteChange,
   audioRouteChangeListenerCallback,
   (__bridge void *)(self)
);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接