Как отправить аудиовыход на Apple TV?

Я хочу добавить кнопку для отправки аудиовыхода на 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.


person ondermerol    schedule 20.04.2016    source источник


Ответы (1)


Вы отправляете аудио с помощью AirPlay, перейдите по этой ссылке https://spin.atomicobject.com/2012/04/23/ios-mirroring-and-programmatic-airplay-selection/

person Out Of Bounds    schedule 20.04.2016
comment
Спасибо, но мне нужен совет для моего кода, он обрабатывает bluetooth, earPeace, iphone, динамик iphone, но почему бы не играть в эфир. - person ondermerol; 20.04.2016