Я хочу добавить кнопку для отправки аудиовыхода на Apple TV. Я использую приведенный ниже код, но он не работает. Можете ли вы помочь, что я делаю неправильно?
Сначала я изменяю категорию AVAudioSession на AVAudioSessionCategorySoloAmbient (для поиска подключенных Bluetooth-устройств для iOS 7 и 8 я должен сделать это).
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategorySoloAmbient error:&err];
Затем я использую этот метод для переключения звука на Apple 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;
}
Изменить 1:
Согласно документации в https://developer.apple.com/library/ios/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionBasics/AudioSessionBasics.html категория AVAudioSessionCategoryAmbient поддерживает AirPlay.
Редактировать 2:
NSArray *inputs = [[AVAudioSession sharedInstance] availableInputs];
Размер входов равен 1, хотя iphone подключен к Apple TV. Я не понимаю, почему размер не равен 2.