我看过但找不到访问音频输出路由的方法,因此我可以检测音频是否通过AirPlay传出。
这是我在iOS 5.0文档中找到的
kAudioSessionOutputRoute_AirPlay
讨论
这些字符串用作与kAudioSession_AudioRouteKey_Outputs数组关联的字典的kAudioSession_AudioRouteKey_Type键的值。
我找不到访问kAudioSession_AudioRouteKey_Outputs数组的方法。
由于
答案 0 :(得分:5)
即使Bassem似乎找到了解决方案,但为了完成起见,这里是如何检测当前输出路线是否为AirPlay:
- (BOOL)isAirPlayActive{
CFDictionaryRef currentRouteDescriptionDictionary = nil;
UInt32 dataSize = sizeof(currentRouteDescriptionDictionary);
AudioSessionGetProperty(kAudioSessionProperty_AudioRouteDescription, &dataSize, ¤tRouteDescriptionDictionary);
if (currentRouteDescriptionDictionary) {
CFArrayRef outputs = CFDictionaryGetValue(currentRouteDescriptionDictionary, kAudioSession_AudioRouteKey_Outputs);
if (outputs) {
if(CFArrayGetCount(outputs) > 0) {
CFDictionaryRef currentOutput = CFArrayGetValueAtIndex(outputs, 0);
CFStringRef outputType = CFDictionaryGetValue(currentOutput, kAudioSession_AudioRouteKey_Type);
return (CFStringCompare(outputType, kAudioSessionOutputRoute_AirPlay, 0) == kCFCompareEqualTo);
}
}
}
return NO;
}
请记住,您必须#import <AudioToolbox/AudioToolbox.h>
并链接到AudioToolbox框架。
答案 1 :(得分:1)
从iOS 6开始,推荐的方法是使用AVAudioSession
(从iOS 7开始,不推荐使用基于C的AudioSession
API)。
let currentRoute = AVAudioSession.sharedInstance().currentRoute
currentRoute
会返回AVAudioSessionRouteDescription
,这是一个非常简单的类,有两个属性:inputs
和outputs
。其中每个都是AVAudioSessionPortDescriptions
的可选数组,它提供了有关当前路由的所需信息:
if let outputs = currentRoute?.outputs as? [AVAudioSessionPortDescription] {
// Usually, there will be just one output port (or none), but let's play it safe...
if let airplayOutputs = outputs.filter { $0.portType == AVAudioSessionPortAirPlay } where !airplayOutputs.isEmpty {
// Connected to airplay output...
} else {
// Not connected to airplay output...
}
}
此处portType
是有用的信息...请参阅AVAudioSessionPortDescription
docs以了解描述每个输入/输出端口类型的AVAudioSessionPort...
常量,例如内置输入/输出扬声器,蓝牙LE,耳机麦克风等。
另外,请不要忘记通过订阅AVAudioSessionRouteChangeNotification
来回应路线更改。
答案 2 :(得分:0)
CFArray *destinations;
CFNumber *currentDest;
// Get the output destination list
AudioSessionGetProperty(kAudioSessionProperty_OutputDestinations, nil, destinations);
// Get the index of the current destination (in the list above)
AudioSessionGetProperty(kAudioSessionProperty_OutputDestination, nil, currentDest);
我不太确定确切的语法,所以你不得不稍微讨论它,但你应该得到一般的想法。