O Bluez (bluetoothd) não está enviando o método DBUS_call SelectConfiguration no Connection? Se sim, como posso pegá-lo?

4

UPDATE : não resolvido ainda, mas parte de uma solução. Veja abaixo.

Estou tentando conectar meu iPod ou outro dispositivo inteligente ao meu laptop (Kubuntu 13.10) via bluetooth e transmitir música codificada em a2dp para um alto-falante bluetooth. Não importa porque não os conecto diretamente. Eu tive muitos problemas para fazer com que os dispositivos se pareassem e se conectassem ao mesmo tempo, mas agora posso fazer isso. Há um milhão de publicações por aí que descrevem diferentes maneiras de conectar fones de ouvido BT alterando .asoundrc , /etc/bluetooth/audio.conf e carregando um módulo loopback através do controlador do PulseAudio. No entanto, eu nunca consegui fazer com que o PulseAudio carregasse as fontes e os sumidouros de forma consistente, então eu arranhei essa ideia e comecei a seguir esse ótimo post de James B: Bluez A2DP AudioSink para ALSA

Eu tenho o código compilado. Ele usa a (mais recente?) API DBus para BlueZ. Seguindo suas instruções, pude colocar música no "servidor" a2dp ou fora dele, mas não há som. No código, ele espera por dois DBUS method_calls, SelectConfiguration e SetConfiguration para obter o "transporte", que eu acho que é um identificador ou descritor de arquivo que descreve onde o áudio deve ir de / para. No entanto, os manipuladores desses eventos nunca são chamados. Eu configurei dbus-monitor para escutar no barramento do sistema para essas chamadas usando este guia DebuggingDBus . No entanto, as chamadas de método não são exibidas. Então, novamente, eu tentei ouvir qualquer método de chamadas no barramento do sistema e há alguns que não aparecem em dbus-monitor que eu sei que estão sendo chamados. (isto é RegisterEndpoint)

Eu vejo sinais de org.bluez , mas não há chamadas de método. Ao executar bluetoothd no modo detalhado, recebo algo assim quando conecto meu dispositivo:

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

mas em outro post eu vi que alguém tinha isso:

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

Neste ponto, tenho duas teorias:

  1. O BlueZ não está enviando isso para o barramento que estou assistindo quando meu dispositivo está conectado.
  2. Eu não estou assistindo corretamente (do method_calls também precisa ser adicionado com dbus_bus_add_match () ?)

Acho difícil acreditar no segundo, já que o código do James B funcionou para ele e eu não o modifiquei. Estou usando o bluez versão 4.101. (mesmo que ele, eu acho) É difícil encontrar as condições exatas sob as quais o BlueZ chama esses métodos.

Meu syslog diz algo assim quando inicio o programa:

bluetoothd[8519]: Endpoint registered: sender=:1.166 path=/MediaEndpoint/A2DPSource

e cancela o registro também quando o programa sai.

Não consigo pensar em outros detalhes para adicionar no momento, mas fico feliz se não tiver fornecido o suficiente. Agradecemos antecipadamente

ATUALIZAÇÃO : Um pouco embaraçoso, mas eu questionei meu cérebro hoje sobre o porquê de um SISTEMA LINUX não ter um manipulador de arquivos ... hmmm ... então eu sudo acrescentado à chamada do programa (programa a2dp-alsa de James B) e funcionou. Pelo menos para o dispositivo de entrada. Ainda nada para a saída (alto-falante BT), mas vou tentar descobrir isso em breve e postar o resultado aqui.

    
por MrUser 24.03.2014 / 11:25

0 respostas