電話機がサポートしている/現在使用しているA2DPコーデックを確認するにはどうすればよいですか?


24

BluetoothのオーディオプロファイルA2DPは複数のコーデックをサポートしています。すべてのデバイスはSBC(サブバンドコーデック)をサポートする必要があり、MP3やAACなどの追加の「オプションコーデック」、またはapt-Xなどの「非A2DP」コーデックをサポートできます。

もちろん、これらのコーデックは、受信側もサポートしていない場合、実際には使用できません。その場合、両方のデバイスはSBCにフォールバックします。

  1. ハードウェア/ ROMがサポートするコーデックを確認するにはどうすればよいですか?
  2. 現在使用されているコーデックを確認するにはどうすればよいですか?(おそらく、再エンコードせずにMP3 / AACファイルを直接渡す場合、これもトラックに依存します)

この記事では、「Androidユーザーは幸運です。最新のAndroidスマートフォンはAptXをサポートしているためです。Windowsとは異なり、接続がAptXを使用しているかどうかを確認することさえできます!」しかし、方法の説明はありません。
エンドリス

回答:


10

Cyanogen 10.1電話(AOSP 4.2.2)では、Bluetoothトラフィックのキャプチャを有効にできます。次に、このキャプチャをWiresharkにロードし、ネゴシエーションフェーズを見て、ペアのオーディオ出力デバイスがサポートするコーデックを決定できます。どのOSがこれをサポートしているかはわかりません。最初にこの方法に出くわしたとき、4.4以降のサポートのみを要求しましたが、DoubleshotのCMの場合は明らかにそうではありませんでした。:-)

必要なセットアップ(ルート化された〜4.2.2以降)があると仮定すると、次の手順が実行されます。

  1. 電話機を対象のA2DPデバイスとペアリングします
  2. 携帯電話のBluetoothを無効にします
  3. このファイル/etc/bluetooth/bt_stack.confを編集して、BtSnoopLogOutputの設定をデフォルト値のfalseからtrueに変更します。このために、「ルートブラウザ」設定を有効にした後にESファイルエクスプローラーから起動したES Note Editorを使用します。
  4. すべてのログタイプを有効にしてCatLogを起動します
  5. 携帯電話でBluetoothを有効にする
  6. 出力デバイスとペアリングした後、選択したプレーヤーでオーディオのスニペットを再生します(私はApolloを使用しています)。10秒程度で十分です。
  7. Bluetoothを再度無効にします
  8. CatLogのログを停止し、ログファイルをSDカードに保存します
  9. [重要!] bt_stack.confを編集して、BtSnoopLogOutputをfalseに戻します。
  10. SDカード(/sdcard/btsnoop_hci.log)から保存されたCatLogファイルとともに、BTキャプチャをWiresharkの現在のコピーがインストールされているコンピューターにコピーします。
  11. キャプチャファイルをWiresharkにロードし、「btavdtp」(引用符なし)のWireshark表示フィルタを設定します。これで、いくつかのパケットのみが表示されます。AVDTPGetCapabilitiesクエリに対する出力デバイスの応答を検索すると、答えが得られます。

キャプチャタイムスタンプとCatLogログのタイムスタンプを並べて、推奨されるログエントリを探すこともできます。カップルを見つけて、この投稿の基になっているメモにそれらを含めるのを巧みに忘れていました。

もう少し時間があれば、このかなり長いステップをアプリまで減らすことを望んでいますが、それが可能かどうかはまだわからず、まだしばらく時間がありません。一方、上記のプロセスを改善する提案を歓迎します。


1
ありがとう。これはうまくいきました。CatLogログに機能に関連するものは見つかりませんでした。とにかく、CM 4.4.2を実行するMoto G(2013)とLG HBS-730ヘッドセットで試してみました。ログにはapt-Xはありません。CMには独自のライブラリがないためです。
dvim 14年

ありがとう、@ Martynas、知っておくといい。mp3のサポートが含まれていましたか?私の携帯電話がmp3をサポートしていることをテストするための良いターゲットは何だろうと思っています。カーラジオは残念ながらありません。A2DPコーデックサポートを文書化した(!)製品は見つかりませんでした。CatLogについては、ソースコードの検索に使用できる示唆的なメッセージほど、実際のコーデックリストがそこにあるとは考えていませんでした。別の日...
ewedel

1
したがって、返された応答Discoverは3つのオーディオシンクです。応答GetCapabilitiesのためにACP SEID [2 - Audio Sink]含まれService: Media Codec - Audio MPEG-1,2 AudioていましたMP3: True。キャプチャしたログファイルをgithubにアップロードしました。
dvim 14年

再び@Martynasに感謝します。730のレビューは優れていますが、テスト用にLG HBS-750を入手しました。730と同じコーデックスイート。レポを分岐し、ここに別のキャプチャを追加しまし。残念ながら、どちらのキャプチャでも、電話はmp3ではなくSBCを使用することを選択しています。使用したメディアファイルの種類はわかりませんが、CM 4.2.2テストでは128 kb / s VBR mp3(BT帯域幅への負荷を避けるために意図的に小さなビットレート)を使用しました。ライセンスの問題についてce4が正しいのではないかと考え始めました。
ewedel

`/ etc / bluetooth / bt_stack.conf`の削除は機能していないように見えましたが、開発者の設定にまったく同じ設定があり、機能していました。あなたの答えのおかげで、Parrot Zik 2はほとんどの場合SBCを使用していることがわかりました。
ゼロ

8

ソースを見ると、少なくとも4つのコーデックがあります。SBC(必須)、MP3(MPEG12)、AAC(MPEG24)、およびSonyのATRACです。

./android/external/bluetooth/bluez/audio/a2dp.h:  
#define A2DP_CODEC_SBC          0x00
#define A2DP_CODEC_MPEG12       0x01
#define A2DP_CODEC_MPEG24       0x02
#define A2DP_CODEC_ATRAC        0x03

基礎となるソフトウェアは、Linuxの「bluez」スタックです。SBCをサポートし、MP3機能が制限されています。

v3.25(2009?)の変更ログには、「MPEG12 / MP3コーデックの限定サポートの追加」と記載されています。

./android/external/bluetooth/bluez/ChangeLog:
ver 3.25:
    Add limited support for Handsfree profile.
    Add limited support for MPEG12/MP3 codec.

v3.25の発表も参照してください。MP3サポートは、Androidでは利用できないgstreamerに依存しているようです。そのため、A2DPを起動するための唯一のオプションはSBCであると思います。

PS:ほとんどのA2DPデバイスは、特許/ライセンスの問題(Linuxを含む)により、MP3 / AACのサポートを欠いているようです。


2
これらは3つのオプションのコーデックです。はい、またはapt-Xを使用してGalaxy S IIIなど他のコーデックを使用できます。しかし、エンコーディングはハードウェアによって提供されると思いましたか?AndroidはMP3を再生できるため、特許の制限があるとは思わない。
エンドリス

2
SBCにはAndroidデバイス専用のハードウェアエンコーダーがあるとは思わない。計算が控えめなので、ソフトウェアで行ったと思います。少なくともソースはそれを示しています。PS:私はCyanogenmodのソースを見ています。HTCやSamsungのソースではありません。PS2:反対側のオーディオシンクデバイスにmp3 / aac(ヘッドセットなど)がないことを意味しました
-ce4

7

Nexus 4(5.0.1)またはNexus 7(2012)(4.4.4)デバイスでは、デベロッパーモードを使用してbtsnoop_hci.logを取得できます。「Bluetooth HCIスヌープログを有効にする」。デバイスをルート化する必要はありません。両方のデバイスがaptxを提供していないようです。これをMoto Stream(aptxなし)およびPhilips AEA2500(aptxあり)でテストします。


1
私はCM 12.1を使用していますが、このポーションも利用できます。おそらく、それはすべての最近の携帯電話にあります。ありがとう。
pedro_sland

4

[この回答のクレジットは主にewedelに送られ、Wireedsharkを使用してbtsnoop_hci.logファイルに回答があることを明確にしました。このログファイルを簡単に作成する方法を共有するためのprittstift69。]

これは初心者向けのステップバイステップのチュートリアルであり、すでに与えられた答えを要約し、私からの結果を解釈します。

prittstift69および他の人が述べたように、開発者オプションで「Bluetooth HCIスヌープログを有効にする」ことができます。ewedelによって提案されたより複雑なアプローチに従う必要はありません。

  1. AndroidデバイスでBluetoothをオフにすることから始めます(「電話」と呼びます)。

  2. [開発者オプション]でBluetooth HCIスヌープログをオンにします。

  3. 電話のBluetoothをオンにして、Bluetoothレシーバーに接続します(「レシーバー」と呼びます)。この手順では、受信機が以前に電話機とペアリングされていたと想定しています。

  4. 携帯電話で音楽を再生します(理想的には非圧縮のWAVまたはFLACファイル)。10秒で十分です。(おそらくさらに少ない)

  5. 電話のBluetoothをオフにします。

  6. Bluetooth HCIスヌープログをオフにする

  7. ファイルbtsnoop_hci.log(/ sdcard / Android / Data /にあります)をコンピューターに転送します。コンピューターでwiresharkを実行し、btsnoop_hci.logファイルを開きます

  8. 「btavdtp」のフィルター(引用符なし)電話から受信者へのメッセージの検索「送信済みコマンド-SetConfiguration ....」これは、このオーディオに使用される最終構成を持つ電話から受信者に送信されるメッセージです。ハンドシェイクが完了した後。[情報]フィールドのテキストは、最終構成が何であったかを示します。

[SBC] SBCの場合、ビットプールが何であるかを知りたい場合があります。これを行うには、btavdtpのフィルターを削除し、プロトコルSBCのメッセージを探してクリックします。以下の詳細セクションで、Bluetooth SBCコーデック情報を展開します。次に、任意の(またはすべての)フレームデータを展開します。そこで、そのフレームで使用されているビットプールを明確に表示する必要があります。35の場合、サンプルレートが44.1 kHzである可能性が高く、Joint Stereoを使用しており、Middle Quality SBCオーディオプロファイル(http://soundexpert.org/news/-/blogs/bluetooth-audio -quality-a2dp)。圧縮されたオーディオのビットレートは229 kbit /秒SBCで、Sound Expertのテスト(http://soundexpert.org/encoders-224-kbps)で4.68を記録します。これは、mp3が110-130 kbit /秒程度であることに匹敵します。

[APT-X] APT-Xの場合、電話機と受信機の両方がAPT-Xをサポートしており、それが使用されています。16ビット、44.1kHzと仮定すると、コーデックは352kbits / sで実行されています。


「理想的には非圧縮のWAVまたはFLACファイル」MP3を再生して、MP3などとして送信するかどうかを確認しませんか?
エンドリス

2
A2DPが両側でmp3をサポートしているかどうかを確認することが目的の場合のみ(有効な質問)。しかし、私の経験では、両側でmp3をサポートすることはまれです(どのデバイスでも見たことがないし、かなりの数がありました)。そのため、少なくともAndroidデバイスでは、最も可能性の高いA2DPコーデックオプションはSBCとAPTXです。圧縮されていないオーディオファイルを再生すると、電話機は強制的に再エンコードされます。
klaberte

私は答え書いていない
endolith
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.