Bluez (bluetoothd) не отправляет DBUS method_call Выберите конфигурацию при подключении? Если так, как я могу поймать это?
ОБНОВЛЕНИЕ: еще не решено, но часть решения. Увидеть ниже.
Я пытаюсь подключить свой iPod или другое интеллектуальное устройство к ноутбуку (Kubuntu 13.10) через Bluetooth и транслировать музыку в формате a2dp на динамик Bluetooth. Не берите в голову, почему я не соединяю их непосредственно. У меня было много проблем с подключением устройств, а затем подключением одновременно, но теперь я могу это сделать. Существует миллион сообщений, описывающих различные способы подключения BT-гарнитур путем изменения .asoundrc
, /etc/bluetooth/audio.conf
и загрузка loopback
модуль через контроллер PulseAudio. Однако я никогда не мог заставить PulseAudio последовательно загружать источники и приемники, поэтому я оставил эту идею и начал читать эту замечательную статью Джеймса Б.: Bluez A2DP AudioSink для ALSA
Я получил скомпилированный код. Он использует (более новый?) DBus API для BlueZ. Следуя его инструкциям, я смог передать музыку на "сервер" a2dp или из него, но звука нет. В коде он ждет двух вызовов метода DBUS, SelectConfiguration
а также SetConfiguration
для того, чтобы получить "транспорт", который я считаю дескриптором или дескриптором файла, который описывает, куда аудио должно идти в / из. Однако обработчики этих событий никогда не вызываются. Я настроил dbus-monitor
прослушивать на системной шине эти звонки, используя это руководство DebuggingDBus. Однако вызовы метода не отображаются. С другой стороны, я попытался прослушать ЛЮБЫЕ вызовы методов на системной шине, и есть некоторые, которые не показывают в dbus-monitor, что, как я знаю, вызывают. (т.е. RegisterEndpoint)
Я вижу сигналы от org.bluez
, но нет вызовов методов. При беге bluetoothd
в подробном режиме я получаю что-то вроде этого при подключении устройства:
bluetoothd[12118]: audio/a2dp.c:setup_ref() 0x7f9e8ffbdac0: ref=2
bluetoothd[12118]: audio/avdtp.c:avdtp_set_configuration() 0x7f9e8ffd03f0: int_seid=1, acp_seid=1
bluetoothd[12118]: audio/a2dp.c:setup_unref() 0x7f9e8ffbdac0: ref=1
bluetoothd[12118]: audio/avdtp.c:session_cb()
bluetoothd[12118]: audio/avdtp.c:avdtp_parse_resp() SET_CONFIGURATION request succeeded
bluetoothd[12118]: audio/a2dp.c:setconf_cfm() Source 0x7f9e8ffa4600: Set_Configuration_Cfm
bluetoothd[12118]: audio/avdtp.c:avdtp_sep_set_state() stream state changed: IDLE -> CONFIGURED
bluetoothd[12118]: audio/avdtp.c:session_cb()
bluetoothd[12118]: audio/avdtp.c:avdtp_parse_resp() OPEN request
succeeded
но на другом посте я увидел, что у кого-то было такое:
bluetoothd[8315]: audio/a2dp.c:setup_ref() 0x7f1f8300b000: ref=2 <br/>
bluetoothd[8315]: audio/avdtp.c:avdtp_set_configuration() 0x7f1f83012250: int_seid=2, acp_seid=1
bluetoothd[8315]: audio/a2dp.c:setup_unref() 0x7f1f8300b000: ref=1
bluetoothd[8315]: audio/avdtp.c:session_cb()
bluetoothd[8315]: audio/avdtp.c:avdtp_parse_resp() SET_CONFIGURATION request succeeded
bluetoothd[8315]: audio/a2dp.c:setconf_cfm() Sink 0x7f1f82fc3210: Set_Configuration_Cfm
**
bluetoothd[8315]: audio/media.c:media_endpoint_async_call() Calling SetConfiguration: name = :1.65 path = /MediaEndpoint/A2DPSink
**
bluetoothd[8315]: audio/avdtp.c:avdtp_sep_set_state() stream state changed: IDLE -> CONFIGURED
bluetoothd[8315]: audio/avdtp.c:session_cb()
bluetoothd[8315]: audio/avdtp.c:avdtp_parse_resp() OPEN request succeeded
На данный момент у меня есть две теории:
- BlueZ не отправляет это на шину, которую я смотрю, когда мое устройство подключено.
- Я не смотрю правильно (сделать method_calls также необходимо добавить с
dbus_bus_add_match ()
?)
Мне трудно поверить во второй, так как код Джеймса Б. работал для него, а я не модифицировал его. Я использую bluez версии 4.101. (думаю, так же, как и он) Трудно найти точные условия, при которых BlueZ вызывает эти методы.
Мой системный журнал говорит что-то вроде этого, когда я запускаю программу:
bluetoothd[8519]: Endpoint registered: sender=:1.166 path=/MediaEndpoint/A2DPSource
и отменяет регистрацию при выходе из программы.
Я не могу думать о других деталях, чтобы добавить в данный момент, но я рад, если я не предоставил достаточно. заранее спасибо
ОБНОВЛЕНИЕ: Немного смущает, но сегодня я ломал голову над тем, почему LINUX SYSTEM не может получить дескриптор файла... хммм... поэтому я добавил sudo к вызову программы (программа a2dp-alsa Джеймса Б.), и это сработало, По крайней мере, для устройства ввода. По-прежнему ничего для вывода (BT-динамик), но я постараюсь это выяснить в ближайшее время и выложить результат здесь.