Telefonumun hangi A2DP kodeklerini desteklediğini / kullandığını nasıl belirleyebilirim?


24

Bluetooth'un Ses Profili A2DP çoklu kodekleri desteklemektedir. Tüm cihazların SBC'yi (alt bant kodeki) desteklemesi gerekir, daha sonra MP3 ve AAC gibi ilave "isteğe bağlı kodekler" veya apt-X gibi "A2DP olmayan" kodekleri destekleyebilirler.

Elbette, bu kodekler aslında alıcı onları desteklemiyorsa kullanılamaz, bu durumda her iki cihaz da SBC'ye geri döner.

  1. Donanım / ROM'umun hangi kodekleri desteklediğini nasıl öğrenirim?
  2. Hangi kod çözücünün şu anda kullanımda olduğunu nasıl bulabilirim? (Belki de MP3, AAC dosyalarını doğrudan kodlamadan doğrudan geçiriyorsa, bu parçaya da bağlıdır)

Bu makalede , "Android kullanıcıları şanslıdır, çünkü modern Android telefonlar AptX'i desteklemektedir. Windows'tan farklı olarak, bağlantının AptX kullanıp kullanmadığını kontrol etmek bile mümkündür!" Ama nasıl bir açıklama yok.
endolith

Yanıtlar:


10

Cyanogen 10.1 telefonumda (AOSP 4.2.2), bluetooth trafiğinin yakalanmasını sağlamak mümkün. Daha sonra bu yakalamayı Wireshark'a yükleyebilir ve eşleştirilmiş ses çıkış cihazının hangi kodekleri desteklediğini belirlemek için müzakere aşamasına bakabilirsiniz. OS'lerin bunu desteklediğinden emin değilim: bu yöntemi ilk kez karşılaştığımda yalnızca 4.4'ten itibaren destek talep etti, ancak açıkça Doubleshot'da CM olduğu durum değildi. :-)

Gerekli kurulum olduğunu varsayarak (köklü ~ 4.2.2 veya üstü), aşağıdaki adımlardır:

  1. Telefonunuzu ilgilendiğiniz A2DP cihazıyla eşleştirin.
  2. telefonunuzda bluetooth'u devre dışı bırak
  3. bu dosyayı düzenleyin: /etc/bluetooth/bt_stack.conf, BtSnoopLogOutput ayarını varsayılan değerinden yanlış değerine doğru değiştirerek. Bunun için "Kök Tarayıcı" ayarını etkinleştirdikten sonra ES Dosya Gezgini'nden başlatılan ES Not Düzenleyiciyi kullanıyorum.
  4. Tüm kayıt türleri etkin durumdayken CatLog'u başlatın
  5. telefonunuzda bluetooth özelliğini etkinleştirin
  6. çıkış cihazıyla eşleştikten sonra, seçtiğiniz oynatıcı ile birlikte bir ses parçası çalın (Apollo kullanıyorum). On saniye ya da öylesine bol olmalı.
  7. tekrar bluetooth devre dışı bırakın
  8. CatLog'un günlüğünü durdur ve günlük dosyasını SD kartına kaydet
  9. [ÖNEMLİ!] Bt_stack.conf dosyasını düzenleyin, BtSnoopLogOutput değerini false olarak değiştirin.
  10. BT yakalamayı SD kartınızdan (/sdcard/btsnoop_hci.log), kaydedilen CatLog dosyasıyla birlikte, geçerli bir Wireshark kopyası yüklü olan bir bilgisayara kopyalayın.
  11. yakalama dosyasını Wireshark'a yükleyin ve "btavdtp" nin Wireshark ekran filtresini ayarlayın (tırnak işareti yok). Şimdi yalnızca birkaç paket göreceksiniz, çıktı aygıtının AVDTP GetCapabilities sorgusuna vereceği yanıtı arayın ve cevabınızı alacaksınız.

Ayrıca, anlamlı günlük girişlerini aramak için yakalama zaman damgalarını CatLog günlüğünün zaman damgalarıyla aynı hizaya getirebilirsiniz. Bir çift buldum ve onları zekice bu yazının dayandığı notlara eklemeyi unuttum.

Bir zamanlar bir uygulama için aşağıya atılan bu oldukça uzun adım kümesini azaltmayı umuyorum, ancak bunun mümkün olup olmadığından ve bir süre daha vakit kalmayacağından emin değilim. Bu arada, yukarıdaki süreçte iyileştirme önerileri memnuniyetle karşılanmaktadır.


1
Teşekkürler. Bu harika çalıştı. CatLog kayıtlarındaki yeteneklerle ilgili hiçbir şey bulamadım. Neyse, CM 4.4.2 çalıştıran Moto G'de (2013) ve LG HBS-730 kulaklıkla denedi. Günlüklerde apt-X yok, çünkü CM bunun için özel kütüphanelere sahip değil.
dvim

Teşekkürler, @Martynas, bilmek güzel. Mp3 desteği içeriyor mu? Telefonumun mp3’ü desteklediğini test etmek için neyin iyi bir hedef olabileceğini merak ediyorum. Ne yazık ki araba radyosu yok ve A2DP kodek desteğini belgeleyen herhangi bir (!) Ürün bulamadım. CatLog ile ilgili olarak, gerçek kodlayıcı listesinin kaynak kodunu aramak için kullanılabilecek bazı düşünceli mesajlar kadar orada olacağını düşünmüyordum. Başka bir gün ..
ewedel

1
Yani Discovergeri dönen üç ses alıcısına cevap . Verilen yanıtlardan biri GetCapabilitiesiçin ACP SEID [2 - Audio Sink]dahil Service: Media Codec - Audio MPEG-1,2 Audioolan vardı MP3: True. Yakalanan günlük dosyasını github'a yükledim .
dvim

@ Martynas tekrar teşekkürler. 730 daha iyi incelemelere sahip olsa da test için bir LG HBS-750 aldı. 730. gibi codec aynı paketi sizin repo çatallı ve başka yakalama eklendi burada . Ne yazık ki, her iki çekimde de telefon mp3 yerine SBC kullanmayı tercih ediyor. Hangi medya türünü kullandığınızdan emin değilim, ancak CM 4.2.2 testim 128kb / s VBR mp3'leri kullandı (BT bant genişliğini vurgulamak için kasıtlı olarak küçük bit hızı). Ce4'ün lisanslama konusunda doğru olabileceğini düşünmeye başlamak .
ewedel

/ Etc / bluetooth / bt_stack.conf `un atılması işe yaramadı, ama geliştirici ayarlarında aynı ayarı yaptım ve işe yaradı. Cevabınız sayesinde, Parrot Zik 2'nin çoğu zaman SBC kullandığını bulmayı başardım.
Sıfır

8

Kaynağa bakıldığında, en az 4 kodek vardır: SBC (zorunlu), MP3 (MPEG12), AAC (MPEG24) ve 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

Temel yazılım linux '"bluez" yığınıdır. SBC'yi destekler ve sınırlı MP3 özelliği vardır.

V3.25 (2009?) İçin yapılan değişiklik okuyor: "MPEG12 / MP3 kodeği için sınırlı destek ekleyin".

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

Ayrıca bkz. V3.25 duyurusu . MP3 desteği Android'de bulunmayan gstreamer'a bağlı görünüyor, bu yüzden SBC'nin A2DP'nin başlatması için tek seçenek olduğunu düşünüyorum.

Not: A2DP cihazlarının çoğu, patentler / lisanslama sorunları nedeniyle (Linux dahil) MP3 / AAC desteği içermiyor gibi görünüyor.


2
Bunlar isteğe bağlı 3 codec, evet veya apt-X kullanarak Galaxy S III gibi diğer codec bileşenlerini kullanabilir . Kodlamanın donanım tarafından sağlandığını sanıyordum? Android MP3'leri çalabildiğinden, herhangi bir patent sınırlandırması olduğundan şüpheliyim.
endolith

2
SBC'nin Android cihazlarda özel bir donanım kodlayıcısı olduğunu sanmıyorum. Hesaplamalı olarak mütevazı, sanırım yazılımla yapıldı. En azından kaynaklar bunu gösteriyor. Not: Cyanogenmod'un kaynağına bakıyorum, HTC veya Samsung'un değil. PS2: MP3 / AAC eksikliği (kulaklık vb.) İle diğer tarafta ses havuzu cihazlarını kastettim
ce4

7

Nexus 4 (5.0.1) veya Nexus 7 (2012) (4.4.4) cihazları ile, btsnoop_hci.log dosyasını almak için geliştirici modunu kullanmak mümkündür. Msgstr "Bluetooth HCI snoop günlüğünü etkinleştir". Cihazları rootlamak gerekli değildir. Her iki cihazın da aptx sunmadığı anlaşılıyor. Bunu Moto Stream (aptx yok) ve Philips AEA2500 (aptx ile) ile test ediyorum.


1
CM 12.1'deyim ve bu iksir de bana açık. Belki de tüm son telefonlarda. Teşekkürler.
pedro_sland

4

[Bu cevabın karşılığı çoğunlukla Wireshark kullanarak cevabın btsnoop_hci.log dosyasında olduğunu açıklayan ewedel'e gider; ve prittstift69, bu günlük dosyasını oluşturmanın kolay yolunu paylaşmak için.]

Bu acemi dostu, adım adım öğretici, verilen cevapların bir kısmını benden yorumladı.

Prittstift69 ve diğerlerinin belirttiği gibi, Geliştirici seçeneklerinin altında "Bluetooth HCI snoop log'unu etkinleştir" seçeneğini yapabilirsiniz. Ewedel tarafından önerilen daha karmaşık yaklaşıma uymaya gerek yok.

  1. Android cihazda bluetooth KAPALI konuma getirerek başlayın ('telefon' diyeceğim).

  2. Geliştirici Seçenekleri altında Bluetooth HCI snoop günlüğünü açın.

  3. Telefondaki Bluetooth'u AÇIN ve Bluetooth alıcısına bağlayın ('alıcı' diyeceğim). Bu adım, alıcının telefonla daha önce eşleştirildiğini varsayar.

  4. Telefonunuzda müzik çalın (ideal olarak sıkıştırılmamış bir WAV veya FLAC dosyası). On saniye ihtiyacınız olan tek şey. (Muhtemelen daha az)

  5. Telefondaki Bluetooth'u KAPATIN.

  6. Bluetooth HCI snoop günlüğünü KAPATIN

  7. Btsnoop_hci.log dosyasını (/ sdcard / Android / Data / içinde buldum) bilgisayarınıza aktarın. Bilgisayarınızda wireshark'ı çalıştırın ve btsnoop_hci.log dosyasını açın

  8. "Btavdtp" için filtre (tırnak işareti yok) Telefondan alıcıya bir mesaj arayın "Gönderilmiş Komut - SetConfiguration ...." Bu, telefon tarafından alıcıya bu ses için kullanılacak son yapılandırma ile gönderilen mesajdır. el sıkışma tamamlandıktan sonra. Bilgi alanındaki metin, son yapılandırmanın ne olduğunu size söyleyecektir.

[SBC] Eğer SBC ise, bitpool'un ne olduğunu bilmek isteyebilirsiniz. Bunu yapmak için, btavdtp Filtresini kaldırın ve Protokol SBC ile bir mesaj arayın ve tıklayın. Aşağıda, detaylar bölümünde Bluetooth SBC Codec bilgilerini genişletin. Ardından, Frame verilerinin herhangi birini (veya tümünü) genişletin. Orada, o Frame tarafından kullanılan Bitpool'u açıkça göstermelidir. 35 ise, örnekleme hızınızın 44,1 kHz olması ihtimali yüksektir, Ortak Stereo kullanıyor ve Orta Kalite SBC ses profilini kullanıyorsunuz ( http://soundexpert.org/news/-/blogs/bluetooth-audio -kalite-a2dp ). Sıkıştırılmış ses için bit hızı daha sonra 229 kbit / sn SBC'dir; bu, Sound Expert'in testinde 4.68 ile sonuçlanır ( http://soundexpert.org/encoders-224-kbps ), 110-130 kbit / sn civarında mp3 ile karşılaştırılabilir.

[APT-X] APT-X ise, telefonunuz ve alıcınız APT-X'i destekler ve kullandığı şey budur. 16-bit, 44.1kHz olduğu varsayıldığında, codec 352kbits / s hızında çalışmaktadır.


"ideal olarak sıkıştırılmamış bir WAV veya FLAC dosyası" MP3 olarak mı gönderdiğini görmek için MP3 çalmak istemez miydiniz?
Endolit

2
Yalnızca amacınız A2DP'nin her iki taraftaki mp3'ü destekleyip desteklemediğini görmekse (geçerli bir soru). Ancak, benim deneyimim, her iki taraftaki mp3 desteğinin nadir olması (bunu hiçbir zaman cihazlarımda görmedim ve epeyce yaşadım). Bu nedenle, en azından Android cihazlarda, muhtemelen A2DP kodek seçenekleriniz SBC ve APTX'dir. Sıkıştırılmamış bir ses dosyasının çalınması telefonu yeniden kodlamaya zorlar.
klaberte

Bir cevap yazmadım
endolith
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.