Bagaimana cara menentukan codec A2DP mana yang didukung / sedang digunakan oleh ponsel saya?

24

Profil Audio Bluetooth A2DP mendukung banyak codec. Semua perangkat harus mendukung SBC (codec subband), kemudian mereka dapat mendukung "codec opsional" tambahan seperti MP3 dan AAC, atau codec "non-A2DP" seperti apt-X.

Tentu saja codec ini tidak benar-benar dapat digunakan jika penerima tidak juga mendukungnya, dalam hal ini kedua perangkat kembali ke SBC.

  1. Bagaimana cara mengetahui codec mana yang didukung oleh hardware / ROM saya?
  2. Bagaimana cara mengetahui codec yang saat ini digunakan? (Mungkin ini tergantung pada trek, juga, jika itu melewati file MP3 / AAC secara langsung tanpa pengkodean ulang, misalnya)
endolit
sumber
Artikel ini mengatakan "Pengguna Android beruntung, karena ponsel Android modern mendukung AptX. Tidak seperti pada Windows, bahkan dimungkinkan untuk memeriksa apakah koneksi menggunakan AptX!" Namun tidak ada penjelasan bagaimana.
endolith

Jawaban:

10

Pada ponsel Cyanogen 10.1 saya (AOSP 4.2.2), dimungkinkan untuk memungkinkan penangkapan lalu lintas bluetooth. Anda kemudian dapat memuat tangkapan ini ke Wireshark dan melihat fase negosiasi untuk menentukan codec mana yang didukung oleh perangkat output audio yang dipasangkan. Tidak yakin OS apa yang mendukung ini: ketika saya pertama kali menemukan metode ini, ia mengklaim hanya mendukung dari 4.4 dan seterusnya, tetapi jelas tidak demikian halnya dengan CM pada Doubleshot. :-)

Dengan asumsi Anda memiliki pengaturan yang diperlukan (di-root ~ 4.2.2 atau yang lebih baru), ini adalah langkah-langkahnya:

  1. pasangkan ponsel Anda dengan perangkat A2DP yang menarik
  2. nonaktifkan bluetooth di ponsel Anda
  3. edit file ini: /etc/bluetooth/bt_stack.conf, ubah pengaturan BtSnoopLogOutput dari nilai standarnya dari false menjadi true. Untuk ini saya menggunakan ES Note Editor, diluncurkan dari ES File Explorer setelah mengaktifkan pengaturan "Root Browser".
  4. mulai CatLog, dengan semua jenis logging diaktifkan
  5. aktifkan bluetooth di ponsel Anda
  6. setelah berpasangan dengan perangkat output, mainkan potongan audio dengan pemutar pilihan Anda (saya menggunakan Apollo). Sepuluh detik atau lebih seharusnya cukup.
  7. nonaktifkan bluetooth lagi
  8. hentikan login CatLog dan simpan file log-nya ke kartu SD Anda
  9. [PENTING!] Sunting bt_stack.conf, ubah BtSnoopLogOutput kembali ke false.
  10. salin tangkapan BT dari kartu SD Anda (/sdcard/btsnoop_hci.log), bersama dengan file CatLog yang disimpan, ke komputer dengan salinan Wireshark saat ini diinstal.
  11. muat file ambil ke Wireshark dan atur filter tampilan Wireshark dari "btavdtp" (tanpa tanda kutip). Anda sekarang akan melihat beberapa paket saja, mencari balasan perangkat keluaran untuk kueri AVDTP GetCapabilities dan Anda akan mendapatkan jawabannya.

Anda juga dapat menyejajarkan stempel waktu pengambilan dengan stempel waktu log CatLog untuk mencari entri log yang sugestif. Saya menemukan pasangan dan secara cerdik lupa untuk memasukkannya ke dalam catatan yang menjadi dasar tulisan ini.

Setelah saya memiliki lebih banyak waktu, saya berharap untuk mengurangi set langkah yang agak panjang ke aplikasi, tetapi tidak yakin apakah itu mungkin dan tidak akan memiliki waktu untuk sementara waktu. Sementara itu, saran untuk meningkatkan proses di atas dipersilahkan.

ewedel
sumber
1
Terima kasih. Ini bekerja dengan baik. Saya tidak menemukan sesuatu yang relevan dengan kapabilitas dalam log CatLog. Anyway, mencobanya di Moto G (2013) menjalankan CM 4.4.2 dan dengan headset LG HBS-730. Tidak ada apt-X di log, karena CM tidak memiliki lib eksklusif untuk itu.
dvim
Terima kasih, @Martynas, senang tahu. Apakah itu termasuk dukungan untuk mp3? Saya bertanya-tanya apa yang mungkin menjadi target yang baik untuk pengujian bahwa ponsel saya mendukung mp3. Sayangnya radio mobil, dan saya belum menemukan produk (!) Yang mendokumentasikan dukungan codec A2DP-nya. Mengenai CatLog, tidak berpikir daftar codec yang sebenarnya akan ada di sana sebanyak beberapa pesan sugestif yang dapat digunakan untuk mencari kode sumber. Hari lain ..
ewedel
1
Jadi tanggapan untuk Discovermengembalikan tiga audio sink. Tanggapan GetCapabilitiesuntuk ACP SEID [2 - Audio Sink]termasuk Service: Media Codec - Audio MPEG-1,2 Audioyang telah MP3: True. Saya telah mengunggah file log yang diambil ke github .
dvim
Terima kasih lagi @Martynas. Meskipun 730 memiliki ulasan yang lebih baik, meraih LG HBS-750 untuk pengujian. Paket codec yang sama dengan 730. Anda telah memotong repo dan menambahkan tangkapan lain di sini . Sayangnya, di kedua tangkapan kami telepon memilih untuk menggunakan SBC daripada mp3. Tidak yakin jenis file media apa yang Anda gunakan, tetapi tes CM 4.2.2 saya menggunakan 128kb / s VBR mp3s (bitrate yang sengaja kecil untuk menghindari tekanan pada bandwidth BT). Mulai berpikir ce4 mungkin benar tentang masalah lisensi .
ewedel
Eiditing `/ etc / bluetooth / bt_stack.conf` tampaknya tidak berfungsi, tetapi saya memiliki pengaturan yang sama persis dalam pengaturan pengembang dan itu berhasil. Berkat jawaban Anda, saya berhasil mengetahui bahwa Parrot Zik 2 menggunakan SBC hampir sepanjang waktu.
Nol
8

Melihat sumbernya, setidaknya ada 4 codec: SBC (wajib), MP3 (MPEG12), AAC (MPEG24) dan ATRAC Sony.

./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

Perangkat lunak yang mendasarinya adalah tumpukan linux "bluez". Ini mendukung SBC dan memiliki kemampuan MP3 yang terbatas.

Changelog untuk v3.25 (2009?) Berbunyi: "Tambahkan dukungan terbatas untuk codec MPEG12 / MP3".

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

Lihat juga pengumuman v3.25 . Dukungan MP3 tampaknya bergantung pada gstreamer yang tidak tersedia di Android, jadi saya kira SBC adalah satu-satunya pilihan A2DP untuk boot.

PS: Sebagian besar perangkat A2DP tampaknya kurang mendukung untuk MP3 / AAC karena masalah paten / lisensi (termasuk Linux).

ce4
sumber
2
Yaitu 3 codec opsional, ya, atau dapat menggunakan codec lain seperti Galaxy S III menggunakan apt-X . Saya pikir pengkodean disediakan oleh perangkat keras, meskipun? Android dapat memutar MP3 jadi saya ragu ada batasan paten.
endolith
2
Saya tidak berpikir SBC memiliki encoder perangkat keras khusus di perangkat Android. Ini komputasi sederhana jadi saya kira itu dilakukan dalam perangkat lunak. Setidaknya sumber menunjukkan itu. PS: Saya melihat sumber Cyanogenmod, bukan HTC atau Samsung. PS2: Maksud saya perangkat audio sink di sisi lain dengan kekurangan mp3 / aac (headset, dll.)
ce4
7

Dengan perangkat Nexus 4 (5.0.1) atau Nexus 7 (2012) (4.4.4) dimungkinkan untuk menggunakan mode pengembang untuk mendapatkan btsnoop_hci.log. "Aktifkan log pengintai Bluetooth HCI". Perangkat tidak perlu di-root. Tampaknya kedua perangkat tidak menawarkan aptx. Saya mengujinya dengan Moto Stream (tanpa aptx) dan Philips AEA2500 (dengan aptx).

prittstift69
sumber
1
Saya menggunakan CM 12.1 dan ramuan ini juga tersedia untuk saya. Mungkin ada di semua ponsel terbaru. Terima kasih.
pedro_sland
4

[Kredit untuk jawaban ini sebagian besar jatuh ke ewedel, yang mengklarifikasi bahwa jawabannya ada di file btsnoop_hci.log, menggunakan Wireshark; dan prittstift69, untuk berbagi cara mudah membuat file log ini.]

Ini adalah tutorial yang ramah bagi pemula, langkah-demi-langkah, meringkas jawaban yang sudah diberikan, dengan beberapa interpretasi hasil dari saya.

Seperti yang disebutkan prittstift69 dan lainnya, Anda dapat "Mengaktifkan log pengintai Bluetooth HCI" di bawah opsi Pengembang. Tidak perlu mengikuti pendekatan yang lebih rumit yang disarankan oleh ewedel.

  1. Mulailah dengan mematikan Bluetooth pada perangkat android (saya akan menyebutnya 'telepon').

  2. Nyalakan log pengintai Bluetooth HCI di bawah Opsi Pengembang.

  3. Nyalakan Bluetooth di telepon dan hubungkan ke penerima Bluetooth (saya akan menyebutnya 'penerima'). Langkah ini mengasumsikan bahwa penerima sebelumnya telah dipasangkan dengan telepon.

  4. Putar musik di ponsel Anda (idealnya file WAV atau FLAC yang tidak terkompresi). Hanya sepuluh detik yang Anda butuhkan. (Mungkin bahkan kurang)

  5. Matikan Bluetooth di telepon.

  6. Matikan log pengintai Bluetooth HCI

  7. Transfer file btsnoop_hci.log (saya menemukannya di / sdcard / Android / Data /) ke komputer Anda. Jalankan wireshark di komputer Anda dan buka file btsnoop_hci.log

  8. Filter untuk "btavdtp" (tanpa tanda kutip) Cari pesan dari telepon ke penerima "Sent Command - SetConfiguration ...." Ini adalah pesan yang dikirim oleh telepon ke penerima dengan konfigurasi akhir yang akan digunakan untuk audio ini. setelah handshaking selesai. Teks di bidang Info akan memberi tahu Anda apa konfigurasi finalnya.

[SBC] Jika itu SBC, Anda mungkin ingin tahu apa itu bitpool. Untuk melakukan ini, hapus Filter untuk btavdtp dan cari pesan dengan Protokol SBC dan klik. Di bawah ini, di bagian detail, perluas informasi Bluetooth SBC Codec. Kemudian perluas (atau semua) data Frame. Di sana, itu harus dengan jelas menunjukkan Bitpool yang digunakan oleh Frame itu. Jika 35, ada kemungkinan besar bahwa tingkat sampel Anda adalah 44,1 kHz, Anda menggunakan Stereo Bersama, dan menggunakan profil audio SBC Kualitas Menengah ( http://soundexpert.org/news/-/blogs/bluetooth-audio -quality-a2dp ). Bitrate untuk audio terkompresi adalah 229 kbits / detik SBC, yang mendapat skor 4,68 dalam pengujian Sound Expert ( http://soundexpert.org/encoders-224-kbps ) yang sebanding dengan mp3 sekitar 110-130 kbits / detik.

[APT-X] Jika APT-X, maka telepon dan penerima Anda mendukung APT-X, dan itulah yang digunakannya. Dengan asumsi 16-bit, 44.1kHz, codec berjalan pada 352kbits / s.

klaberte
sumber
"idealnya file WAV atau FLAC yang tidak terkompresi" Tidakkah Anda ingin memutar MP3 untuk melihat apakah ia mengirimkannya sebagai MP3, dll?
endolith
2
Hanya jika tujuan Anda adalah untuk melihat apakah A2DP mendukung mp3 di kedua sisi (pertanyaan yang valid). Namun, pengalaman saya adalah bahwa dukungan mp3 di kedua sisi jarang (saya belum pernah melihatnya di salah satu perangkat saya, dan saya sudah cukup banyak). Jadi, setidaknya dengan perangkat Android, opsi codec A2DP Anda yang paling mungkin adalah SBC dan APTX. Memutar file audio yang tidak terkompresi memaksa ponsel untuk menyandikan ulang.
klaberte
Saya tidak menulis jawaban
endolith