5

調べましたが、オーディオ出力ルートにアクセスする方法が見つからないため、AirPlay経由でオーディオが出ているかどうかを検出できます。

これは私がiOS5.0のドキュメントで見つけたものです

kAudioSessionOutputRoute_AirPlay

討論

これらの文字列は、kAudioSession_AudioRouteKey_Outputs配列に関連付けられたディクショナリのkAudioSession_AudioRouteKey_Typeキーの値として使用されます。

kAudioSession_AudioRouteKey_Outputs配列にアクセスする方法が見つかりません。

ありがとう

4

3 に答える 3

5

Bassemが解決策を見つけたように見えても、完了のために、現在の出力ルートがAirPlayであるかどうかを検出する方法は次のとおりです。

- (BOOL)isAirPlayActive{
    CFDictionaryRef currentRouteDescriptionDictionary = nil;
    UInt32 dataSize = sizeof(currentRouteDescriptionDictionary);
    AudioSessionGetProperty(kAudioSessionProperty_AudioRouteDescription, &dataSize, &currentRouteDescriptionDictionary);
    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フレームワークに対してリンクする必要があることに注意してください。

于 2012-09-11T06:24:00.003 に答える
1

iOS 6以降、これに推奨されるアプローチはを使用することですAVAudioSession(CベースのAudioSessionAPIはiOS 7で非推奨になりました)。

let currentRoute = AVAudioSession.sharedInstance().currentRoute

currentRouteを返します。これはAVAudioSessionRouteDescription、2つのプロパティを持つ非常に単純なクラスです:inputsoutputs。これらはそれぞれ、のオプションの配列で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で役立つ情報です...ライン入力/出力、内蔵スピーカー、Bluetooth LE、ヘッドセットマイクなど、各入力/出力ポートタイプを説明する定数についてはAVAudioSessionPortDescriptionドキュメントを参照してください。AVAudioSessionPort...

また、にサブスクライブすることにより、ルート変更に適切に応答することを忘れないでくださいAVAudioSessionRouteChangeNotification

于 2015-03-21T10:18:01.603 に答える
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);

正確な構文がよくわからないので、少しいじる必要がありますが、一般的な考え方を理解する必要があります。

于 2011-12-04T22:53:04.403 に答える