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

Posted

技术标签:

【中文标题】AVplayer 音频路由到扬声器和耳机【英文标题】:AVplayer Audio routing to speakers and headphones 【发布时间】:2012-01-18 02:20:03 【问题描述】:

我正在尝试在插入耳机时将音频路由到耳机,并在没有连接耳机时通过 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");
    

根本没有调用功能耳机。该程序甚至不会进入该部分的那部分。

现在,当我拔掉耳机时,音频就停止了,并且没有任何东西没有通过扬声器播放。

在 audiolister 中,我尝试添加以下内容 [controller.avplayer 播放]; 但仍然没有发生任何事情。

请帮忙

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于AVplayer 音频路由到扬声器和耳机的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Apple 设备的内部扬声器路由音频,避免使用耳机?

如何监控设备的音频输出以判断声音是不是来自扬声器/耳机插孔?

从无线耳机录制音频并通过蓝牙扬声器播放

如何获取可用输出音频源列表(扬声器、耳机、蓝牙)

如何将音频从设备扬声器路由到蓝牙扬声器?

MPVolumeView 未在 iOS 11 上显示音频路由