2016-04-20 8 views
0

Ich möchte eine Schaltfläche hinzufügen, um die Audioausgabe an Applle TV zu senden. Ich benutze den folgenden Code, aber es funktioniert nicht. Kannst du mir helfen, was ich falsch mache?Wie wird die Audioausgabe an Apple TV gesendet?

Zuerst habe ich die AVAudioSession Kategorie ändern AVAudioSessionCategorySoloAmbient zu sein (für die angeschlossenen Bluetooth-Geräte für iOS Benutzer 7 und 8, ich habe dies zu tun.)

AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
[audioSession setCategory:AVAudioSessionCategorySoloAmbient error:&err]; 

Dann benutze ich diese Methode für Audio-Apple Schalt TV

- (BOOL)switchAirPlay:(BOOL)onOrOff 
{ 
    NSError* audioError = nil; 
    BOOL changeResult = NO; 
    if (onOrOff) { 
     self.bipAudioSessionManagerDeviceCurrent = Device_AppleTV; 

     AVAudioSessionPortDescription* airplayPort = [self airplayAudioDevice]; 
     changeResult = [[AVAudioSession sharedInstance] setPreferredInput:airplayPort error:&audioError]; 
    } else { 
     AVAudioSessionPortDescription* airplayPort = [self airplayAudioDevice]; 
     changeResult = [[AVAudioSession sharedInstance] setPreferredInput:airplayPort error:&audioError]; 
    } 

    if (audioError) { 
     DDLogError(@"Apple TV error, audioSession: %@ %zd %@", [audioError domain], [audioError code], [[audioError userInfo] description]); 
    } 

    if (!changeResult) { 
     DDLogError(@"Apple TV error, audioSession: %@ %zd %@", [audioError domain], [audioError code], [[audioError userInfo] description]); 
    } 

    return changeResult; 
} 

- (AVAudioSessionPortDescription*)airplayAudioDevice { 
    NSArray* builtinRoutes = @[AVAudioSessionPortAirPlay]; 
    return [self audioDeviceFromTypes:builtinRoutes]; 
} 

- (AVAudioSessionPortDescription*)audioDeviceFromTypes:(NSArray*)types { 
    NSArray* routes = [[AVAudioSession sharedInstance] availableInputs]; 
    for (AVAudioSessionPortDescription* route in routes) { 
     if ([types containsObject:route.portType]) { 
      return route; 
     } 
    } 
    return nil; 
} 

Edit 1:
Gemäß der Dokumentation in https://developer.apple.com/library/ios/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionBasics/AudioSessionBasics.html die AVAudioSessionCategoryAmbient Kategorie AirPlay unterstützt.

Edit 2:

NSArray *inputs = [[AVAudioSession sharedInstance] availableInputs]; 

Größe der Eingänge 1, obwohl iphone er Apple TV verbunden ist. Ich verstehe nicht, warum Größe 2. nicht gleich

Antwort

Verwandte Themen