setPreferredInput WithBlueTooth не работает - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь настроить устройство Bluetooth на предпочтительный вход в audioSession.

Вот мой код:

if(speaker)
{
    NSLog(@"Audio use speaker");
    CGFloat set = 5.0f;
    AudioQueueSetParameter(audioQueue, kAudioQueueParam_Volume, set);
    [sessionInstance overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error];

}else{
    NSLog(@"QCAudio use headset");
    NSError *audioError = nil;
    BOOL hasAvaliableBuleTooth = NO;
    NSArray* b_routePort = @[AVAudioSessionPortBluetoothHFP];
    NSArray* portDescArr = [[AVAudioSession sharedInstance] availableInputs];
    AVAudioSessionPortDescription* desPortDesc;
    for (AVAudioSessionPortDescription* portDesc in portDescArr){
        if ([b_routePort containsObject:portDesc.portType])
        {
            desPortDesc = portDesc;
            hasAvaliableBuleTooth = YES;
        }
    }
    if (hasAvaliableBuleTooth == YES) {
        NSLog(@"1111111111 avsession  desportDesc = %@",desPortDesc);
        BOOL ret =[[AVAudioSession sharedInstance] setPreferredInput:desPortDesc error:&audioError];
        NSLog(@"ret = %d current route = %@",ret, [[AVAudioSession sharedInstance] currentRoute]);
    }else{
        NSLog(@"222222222222 avsession");
        CGFloat set = 1.0f;
        AudioQueueSetParameter(audioQueue, kAudioQueueParam_Volume, set);
        [sessionInstance overrideOutputAudioPort:AVAudioSessionPortOverrideNone
                                           error:&error];
    }
}

и у меня есть этот знак:

2019-01-11 17: 59: 51.400283 + 0800 yichaoyun [4196: 1228652] [avas] AVAudioSessionPortImpl.mm:56:ValidateRequiredFields: неизвестный источник выбранных данных для порта h.ear (MDR-EX750BT) (тип: BluetoothHFP) )

2019-01-11 17: 59: 51.400381 + 0800 yichaoyun [4196: 1228652] 1111111111 avsession desportDesc =

2019-01-11 17: 59: 51.410321 + 0800 yichaoyun [4196: 1228652] [avas] AVAudioSessionPortImpl.mm:56:ValidateRequiredFields: неизвестный выбранный источник данных для порта h.ear (MDR-EX750BT) (тип: BluetoothHFP) )

2019-01-11 17: 59: 51.410357 + 0800 yichaoyun [4196: 1228652] [avas] AVAudioSessionPortImpl.mm:56:ValidateRequiredFields: неизвестный источник выбранных данных для порта h.ear (MDR-EX750BT) (тип: BluetoothHFP) )

2019-01-11 17: 59: 51.410447 + 0800 yichaoyun [4196: 1228652] ret = 1 текущий маршрут = " ); выходы = ( «» )>

Это показывает, что подключение устройства Bluetooth прошло успешно. Но я слышу только какой-то шум. Затем он превратился в тишину. Есть только один, кто сталкивается с таким же вопросом? Как я могу это исправить?

1 Ответ

0 голосов
/ 18 января 2019

Я наконец нашел правильный ответ. AVAudioSession следует использовать для сбора и записи, что очень важно.

А потом setCategory вот так:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord 
withOptions:AVAudioSessionCategoryOptionAllowBluetooth error:&error];

Установить предпочитаемое значение:

[[AVAudioSession sharedInstance] setPreferredInput:_bluetoothPort error:nil];

Когда вы получили текущий ввод, как это:

inputs = (
    "< AVAudioSessionPortDescription: 0x28185bf00, type = MicrophoneBuiltIn; name = iPhone \U9ea6\U514b\U98ce; UID = Built-In Microphone; selectedDataSource = \U524d >"
); 

outputs = (
    "< AVAudioSessionPortDescription: 0x28185bfb0, type = BluetoothA2DPOutput; name = h.ear (MDR-EX750BT); UID = 04:5D:4B:4A:4F:31-tacl; selectedDataSource = (null) >"
)>.  

Это работает! Но я до сих пор не понимаю, почему ввод Apple показывает, что предпочтительными являются «iPhone MicrophoneBuiltIn», а «наушники Bluetooth» работают. Это ошибка?

...