Я разработчик, который хочет использовать module-bluez-device для передачи аудиоданных моих устройств Android на сервер Linux. И я уже сделал это, я мог бы использовать встроенную библиотеку webrtc для захвата аудиоданных a2dp_source.
Но что меня смущает, так это то, что при изменении состояния транспорта bluetooth от воспроизведения к бездействию a2dp_source исчезнет, что привело к изменению модуля захвата аудиоустройства webrtc для использования другого звукового устройства, такого как микрофон моего linux-сервера.
И если состояние Bluetooth изменится с режима ожидания на режим воспроизведения (воспроизведение музыки на Android), появится новый a2dp_source, но модуль захвата звука webrtc не изменится на использование нового a2dp_source, это моя проблема.Когда я подключаюсь к своему устройству Android и выполняю источники списка pactl, состояние a2dp_source равно SUSPENDED, а id равно 96 (Источник # 96).
Затем я играю музыку на моем андроиде, состояние a2dp_source изменяется наRUNNING.
После этого я останавливаю музыку на своем андроиде, состояние a2dp_source будет сохраняться, возможно, 3 секунды и, наконец, исчезнет.
Если я снова воспроизведу музыку на своем андроиде, новый a2dp_sourceпоказать с идентификатором 98 и состояние RUNING.
Я отслеживал стек вызовов после перехода состояния перехода bluez из режима ожидания в режим ожидания.
PA_BLUETOOTH_HOOK_TRANSPORT_STATE_CHANGED (воспроизведение в режиме ожидания)
↓
pa_card_profile_set_available (cp, PA_AVAILABLE_UNKNOWN) [module-bluez5-device.c]
↓
profile_available_hook_callback [module-bluetooth-policy.c] ↓ * 10231024 * find_best_profile [module-bluetooth-policy.c]
if (card->active_profile.available == PA_AVAILABLE_UNKNOWN && anyotherProfile.available == PA_AVAILABLE_YES) {
//change to anyotherProfile
}
At here,anyotherProfile = off
↓
set_profile_cb & stop_thread [module-bluez5-device.c]
↓
a2dp_source исчезнуть
Если я прав, какое решение, по вашему мнению, лучше всего принять?