1

更新: まだ解決されていませんが、解決策の一部です。下記参照。

iPod またはその他のスマート デバイスを Bluetooth 経由でラップトップ (Kubuntu 13.10) に接続し、a2dp でエンコードされた音楽を Bluetooth スピーカーにストリーミングしようとしています。直接接続しない理由は気にしないでください。デバイスを実際にペアリングしてから同時に接続するのに苦労しましたが、今ではそれが可能です. .asoundrc、/etc/bluetooth/audio.conf を変更し、PulseAudio のコントローラーを介してループバック モジュールをロードすることにより、BT ヘッドセットを接続するさまざまな方法を説明する 100 万件の投稿があります。ただし、PulseAudio にソースとシンクを一貫してロードさせることはできなかったので、そのアイデアを破棄して、James B による次の素晴らしい投稿をフォローし始めました

コードをコンパイルしました。BlueZ 用の (新しい?) DBus API を使用します。彼の指示に従って、a2dp「サーバー」に音楽をパイプで送り込むことはできましたが、音が出ません。コードでは、彼は「トランスポート」を取得するために、SelectConfiguration と SetConfiguration の 2 つの DBUS method_calls を待機します。これは、オーディオの行き先と行き先を記述するハンドルまたはファイル記述子であると思います。ただし、これらのイベントのハンドラは呼び出されません。このガイドを使用して、これらの呼び出しをシステム バスでリッスンするように dbus-monitor をセットアップしました: https://wiki.ubuntu.com/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 .c:setup_unref() 0x7f9e8ffbdac0: ref=1 bluetoothd[12118]: audio/avdtp.c:session_cb() bluetoothd[12118]: audio/avdtp.c:avdtp_parse_resp() SET_CONFIGURATION リクエストが成功しました bluetoothd[12118]: audio/a2dp .c:setconf_cfm() ソース 0x7f9e8ffa4600: Set_Configuration_Cfm bluetoothd[12118]: audio/avdtp.c:avdtp_sep_set_state() ストリーム状態が変更されました: IDLE -> CONFIGURED bluetoothd[12118]: audio/avdtp.c:session_cb() bluetoothd[12118] : audio/avdtp.c:avdtp_parse_resp() OPEN リクエストが成功しました

しかし、別の投稿で、誰かがこれを持っているのを見ました:

bluetoothd[8315]: audio/a2dp.c:setup_ref() 0x7f1f8300b000: ref=2 bluetoothd[8315]: audio/avdtp.c:avdtp_set_configuration() 0x7f1f83012250: int_seid=2、acp_seid=1 .c:setup_unref() 0x7f1f8300b000: ref=1 bluetoothd[8315]: audio/avdtp.c:session_cb() bluetoothd[8315]: audio/avdtp.c:avdtp_parse_resp() SET_CONFIGURATION リクエスト成功 bluetoothd[8315]: audio/a2dp .c:setconf_cfm() シンク 0x7f1f82fc3210: Set_Configuration_Cfm bluetoothd[8315]: audio/media.c:media_endpoint_async_call() SetConfiguration の呼び出し: name = :1.65 path = /MediaEndpoint/A2DPSink

bluetoothd[8315]: audio/avdtp.c:avdtp_sep_set_state() ストリーム状態が変更されました: IDLE -> 構成済み bluetoothd[8315]: audio/avdtp.c:session_cb() bluetoothd[8315]: audio/avdtp.c:avdtp_parse_resp() OPEN リクエストが成功しました

この時点で、私には 2 つの理論があります: 1) デバイスが接続されているときに、BlueZ が監視しているバスにこれを送信していない 2) 正しく監視していない (method_calls も dbus_bus_add_match () で追加する必要がありますか?)

James B のコードは彼のために機能し、私はそれを変更しなかったので、2 番目のものを信じるのは難しいと思います。bluez バージョン 4.101 を使用しています。(彼と同じだと思います) BlueZ がこれらのメソッドを呼び出す正確な条件を見つけるのは困難です。

プログラムを起動すると、syslog に次のようなメッセージが表示されます。

bluetoothd[8519]: エンドポイントが登録されました: sender=:1.166 path=/MediaEndpoint/A2DPSource

プログラムが終了すると、登録も解除されます。

現時点では他に追加する詳細は考えられませんが、十分に提供できていない場合は喜んで追加します。前もって感謝します。

更新 少し恥ずかしいですが、LINUX SYSTEMがファイルハンドルを取得しない理由について今日頭を悩ませました...うーん...プログラム呼び出しにsudoを追加しました(James Bのa2dp-alsaプログラム)そしてそれはうまくいきました。少なくとも入力デバイスについては。出力(BTスピーカー)にはまだ何もありませんが、すぐにそれを理解し、結果をここに投稿しようと思います.

noob バッジはどこで入手できますか? :(

4

1 に答える 1

1

私は BlueZ 4 を使い続けませんでした。BlueZ 5 と PulseAudio 5 にアップグレードしました。これは、以前のバージョンよりもうまく機能します。その後、ようやく pactl ループバック モジュールを使用できるようになりました。(詳細については、この投稿を参照してください。)

于 2014-04-08T13:21:22.930 に答える