17

Bluetooth マイクを使用して Android デバイス (Nexus 7 - rooted Android 4.4.2) にオーディオを録音するオーディオ レコーダー アプリに取り組んでいます。現在、HFP に実装されており、すべて正常に動作しています。Bluetooth マイクは、Bluegiga の WT32 Bluetooth モジュール + マイク入力で実装されています。HFP 経由のオーディオ品質は良くありませんが、今のところ十分です。

ただし、2 つのマイク入力 (L/R) があり、WT32 は A2dp (ソース) をサポートしているため、Bluetooth プロファイルを A2dp に変更しようとしています。多くの調査の結果、ストック Android は A2dp (シンク) をサポートしていないことがわかりました。また、Android の Bluetooth スタックを変更して A2dp (シンク) を有効にすることが可能です。

私が理解していないのは、Bluetoothスタックにアクセスして変更する方法です。答えを持っている人がこれを達成するためのステップを分解できるといいでしょう。

この質問に対する答えに従ってみました: Receive audio via Bluetooth in Androidですが、変更する適切なファイルが見つからないようです。実際、正しいフォルダーを調べているかどうかさえわかりません。Android-studio の DDMS-File Explorer を使用してデバイス ファイルを調べました。

ps、私はまだ Android アプリの開発にかなり慣れていないため、いくつかの用語を誤用している可能性があります。その点については事前に謝罪します。

4

4 に答える 4

17

したがって、上記の答えは完全には正しくありません。

分解方法は次のとおりです。

HAL は、実際の Bluetooth ステート マシンを c/cpp コードで実装するハードウェア抽象化レイヤーであり、A2dp、HFP、GATT、SPP、AVRCP などのサービスのさまざまなステート マシンを制御します。これらの各サービスは、実際の Bluetooth サーバーまたはクライアント データベースを制御するための SMP ファイルと ATT ファイルも参照し、セキュリティを確保します。

HCI は、実際の作業が行われる場所です。HAL は実際には何もしません。HCI レイヤーで使用されるメソッドを介して、PCBA 上のネットワーク間接続されたチップに tty シリアル (spi または UART) に沿って送信される複雑なデータ メッセージを組み立てます。 AOSP 4.2.2 から現在までの Android コンパイル トランクの /external/bluetooth/bluedroid/ ディレクトリの「BTE」レイヤーにあります。- 現在、これらのチップの製造元はいくつかありますが、それらのほとんどは、wifi、Bluetooth 4.0 Smart、および Bluetooth 4.0 ラジオを含むデュアルまたはトリプル ラジオ パッケージにパッケージ化された Broadcom ベースの IC です。

あなたがやろうとしていることをすることは可能ですが、hardware.so と bluetooth_jni.so をアプリに付属する NDK/JNI パッケージ/プロジェクトに含め、.cpp ファイルからの呼び出しを介して登録する必要があります。 「Packages/apps/Bluetooth/jni」にある Bluetooth サービスごとに、「com_android_bluetooth_a2dp.cpp」と「com_android_bluetooth_avrcp.cpp」の NDK ライブラリで、適切に型指定されたオブジェクトとして登録を処理します。

もう 1 つの問題は、独自のカスタム A2DP スタックを実装する必要があることです。Android Bluedroid スタックにはフレームワークに実装されたシンクロールの一部しかなく、A2DP ロールにはソースの完全な実装があるためです。役割。さらに、Bluetooth A2DP シンクの実装で実際に何をしようとしているかによっては、AVRCP も実装する必要があります。Bluetooth SIG (特別利益団体) によると、Bluetooth デバイス間の相互接続要件があり、これが大きな問題につながります。 AVRCP「リモート コントロール ターゲット デバイス」および「リモート コントロール コントロール デバイス」なしでシンク ロールを実装する場合、A2DP (または任意の Bluetooth サービス/プロファイル) を介した Bluetooth からのシンク ロール ATT コマンドは、サービス検出プロセス中に特定のハンドシェイクを実行します。関連付けられたゲートウェイ (接続デバイス) は、機能要求を実行します。A2DP サービスは、開始/停止コマンドの I/O 機能を実装することが期待されており、場合によっては事前コマンドをスキップ/追跡します。

これらすべてに加えて、A2DP を実装する場合、PCM ストリームを処理するか、AAC ストリームを処理するかを選択する必要があります。AAC ストリーム (または、Pandora、spotify などが使用する DRM 保護された PCM ストリーム) を処理している場合は、実装に適した SBC エンコーダーまたはデコーダーを実装する必要があります。暗号化されたデータの。また、デバイスの AudioManager 実装に適切な速度でビットレートを実装してください。一部の電話は 48,000hZ を使用し、一部の電話は 44,100hZ を使用します。これは、サラウンド サウンド 7.1 を利用しているほとんどの PCM A2DP 実装と同様に高品質のオーディオが必要な場合に重要です。 + には 48,000hZ と AAC エンコード/デコードが必要です。

これがあなたにいくつかの洞察を提供することを願っています。

于 2014-08-25T18:59:31.917 に答える
13

https://android-review.googlesource.com/#/c/98161/は A2DP シンクを実装しています。Nexus 5 で動作します。試すことができます。

于 2014-08-28T09:32:05.320 に答える