Làm cách nào để xác định codec A2DP nào mà điện thoại của tôi hỗ trợ / hiện đang sử dụng?


24

Hồ sơ âm thanh của Bluetooth A2DP hỗ trợ nhiều codec. Tất cả các thiết bị phải hỗ trợ SBC (codec băng con), sau đó chúng có thể hỗ trợ thêm "codec tùy chọn" như MP3 và AAC hoặc codec "không phải A2DP" như apt-X.

Tất nhiên các codec này thực sự không thể được sử dụng nếu người nhận không hỗ trợ chúng, trong trường hợp đó cả hai thiết bị đều quay trở lại SBC.

  1. Làm cách nào để tìm ra codec hỗ trợ phần cứng / ROM của tôi?
  2. Làm thế nào để tôi tìm ra codec nào đang được sử dụng? (Có thể điều này cũng phụ thuộc vào bản nhạc, nếu nó truyền trực tiếp các tệp MP3 / AAC mà không cần mã hóa lại)

Bài viết này cho biết "Người dùng Android rất may mắn, vì điện thoại Android hiện đại hỗ trợ AptX. Không giống như trên Windows, thậm chí có thể kiểm tra xem kết nối có đang sử dụng AptX không!" Nhưng không có lời giải thích làm thế nào.
endolith

Câu trả lời:


10

Trên điện thoại Cyanogen 10.1 của tôi (AOSP 4.2.2), có thể cho phép ghi lưu lượng bluetooth. Sau đó, bạn có thể tải bản thu này vào Wireshark và xem giai đoạn đàm phán để xác định loại codec nào mà thiết bị đầu ra âm thanh được ghép nối hỗ trợ. Không chắc chắn hệ điều hành nào hỗ trợ điều này: khi tôi lần đầu tiên chạy qua phương thức này, nó đã yêu cầu hỗ trợ chỉ từ 4.4 trở đi, nhưng rõ ràng không phải là trường hợp với CM trên D doublehot. :-)

Giả sử bạn có thiết lập cần thiết (đã root ~ 4.2.2 trở lên), đây là các bước:

  1. ghép nối điện thoại của bạn với thiết bị A2DP đáng quan tâm
  2. tắt bluetooth trên điện thoại của bạn
  3. chỉnh sửa tệp này: /etc/bluetooth/bt_stack.conf, thay đổi cài đặt BtSnoopLogOutput từ giá trị mặc định là false thành true. Đối với điều này, tôi sử dụng ES Note Editor, được khởi chạy từ ES File Explorer sau khi bật cài đặt "Trình duyệt gốc".
  4. bắt đầu CatLog, với tất cả các loại đăng nhập được kích hoạt
  5. bật bluetooth trên điện thoại của bạn
  6. sau khi kết hợp với thiết bị đầu ra, hãy phát một đoạn âm thanh với trình phát bạn chọn (tôi sử dụng Apollo). Mười giây hoặc lâu hơn nên có rất nhiều.
  7. vô hiệu hóa lại bluetooth
  8. dừng ghi nhật ký của CatLog và lưu tệp nhật ký của nó vào thẻ SD của bạn
  9. [QUAN TRỌNG!] Chỉnh sửa bt_stack.conf, thay đổi BtSnoopLogOutput thành sai.
  10. sao chép bản chụp BT từ thẻ SD của bạn (/sdcard/btsnoop_hci.log), cùng với tệp CatLog đã lưu, vào một máy tính có cài đặt bản sao Wireshark hiện tại.
  11. tải tập tin chụp vào Wireshark và đặt bộ lọc hiển thị Wireshark của "btavdtp" (không có dấu ngoặc kép). Bây giờ bạn sẽ chỉ thấy một vài gói, hãy tìm câu trả lời của thiết bị đầu ra cho truy vấn GetCapabilities của AVDTP và bạn sẽ có câu trả lời của mình.

Bạn cũng có thể sắp xếp các dấu thời gian chụp với dấu thời gian của nhật ký CatLog để tìm các mục nhật ký gợi ý. Tôi tìm thấy một cặp vợ chồng và khéo léo quên đưa chúng vào các ghi chú mà bài đăng này dựa trên.

Khi tôi có thêm thời gian, tôi hy vọng sẽ giảm được các bước khá dài này xuống một ứng dụng, nhưng không chắc là nó có thể hay không và dù sao cũng sẽ không có thời gian. Trong khi đó, các đề xuất để cải thiện quá trình trên được hoan nghênh.


1
Cảm ơn. Điều này đã làm việc tuyệt vời. Tôi không tìm thấy bất cứ điều gì liên quan đến các khả năng trong nhật ký CatLog. Dù sao, đã thử nó trên Moto G (2013) chạy CM 4.4.2 và với tai nghe LG HBS-730. Không có apt-X trong nhật ký, vì CM không có libs độc quyền cho điều đó.
dvim

Cảm ơn, @Martynas, thật tốt khi biết. Nó có bao gồm hỗ trợ cho mp3 không? Tôi đang tự hỏi điều gì có thể là mục tiêu tốt để kiểm tra rằng điện thoại của tôi hỗ trợ mp3. Thật không may, đài phát thanh trên xe hơi không may và tôi không tìm thấy bất kỳ sản phẩm nào (!) Tài liệu hỗ trợ codec A2DP của nó. Về CatLog, không nghĩ rằng danh sách codec thực tế sẽ có nhiều như một số thông điệp gợi ý có thể được sử dụng để tìm kiếm mã nguồn. Một ngày khác ..
ewedel

1
Vì vậy, một phản ứng để Discovertrả lại ba chìm âm thanh. Đáp ứng GetCapabilitiescho ACP SEID [2 - Audio Sink]bao gồm Service: Media Codec - Audio MPEG-1,2 AudioMP3: True. Tôi đã tải lên tệp nhật ký đã chụp vào github .
dvim

Cảm ơn một lần nữa @Martynas. Mặc dù 730 có đánh giá tốt hơn, đã lấy một chiếc LG HBS-750 để thử nghiệm. Cùng một bộ codec như 730. Đã rẽ nhánh repo của bạn và thêm một bản chụp khác ở đây . Thật không may, trong cả hai lần chụp của chúng tôi, điện thoại đang chọn sử dụng SBC thay vì mp3. Không chắc chắn loại tệp phương tiện nào bạn đã sử dụng, nhưng thử nghiệm CM 4.2.2 của tôi đã sử dụng mp3 VBR 128kb / s (bitrate nhỏ có chủ ý để tránh làm căng băng thông BT). Bắt đầu nghĩ rằng ce4 có thể đúng về vấn đề cấp phép .
ewedel

Sự xuất hiện của `/ etc / bluetooth / bt_stack.conf` dường như không hoạt động, nhưng tôi đã có chính xác cài đặt tương tự trong cài đặt của nhà phát triển và điều đó đã hoạt động. Nhờ câu trả lời của bạn, tôi đã tìm ra rằng Parrot Zik 2 sử dụng SBC hầu hết thời gian.
Không có

8

Nhìn vào nguồn, có ít nhất 4 codec: SBC (bắt buộc), MP3 (MPEG12), AAC (MPEG24) và ATRAC của 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

Phần mềm cơ bản là ngăn xếp "bluez" của linux. Nó hỗ trợ SBC và có khả năng MP3 hạn chế.

Thay đổi cho v3.25 (2009?) Có nội dung: "Thêm hỗ trợ giới hạn cho codec MPEG12 / MP3".

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

Xem thêm thông báo v3.25 . Hỗ trợ MP3 dường như phụ thuộc vào guxer không có sẵn trên Android, vì vậy tôi chỉ đoán SBC là tùy chọn duy nhất để A2DP khởi động.

PS: Hầu hết các thiết bị A2DP dường như thiếu hỗ trợ cho MP3 / AAC do các vấn đề về bằng sáng chế / cấp phép (bao gồm cả Linux).


2
Đó là 3 codec tùy chọn, vâng, hoặc nó có thể sử dụng các codec khác như Galaxy S III bằng apt-X . Tôi nghĩ rằng mã hóa được cung cấp bởi phần cứng, mặc dù? Android có thể phát MP3 nên tôi nghi ngờ có bất kỳ giới hạn bằng sáng chế nào.
endolith

2
Tôi không nghĩ SBC có một bộ mã hóa phần cứng chuyên dụng trong các thiết bị Android. Nó tính toán khiêm tốn nên tôi đoán nó được thực hiện trong phần mềm. Ít nhất là các nguồn chỉ ra rằng. Tái bút: Tôi đang xem nguồn của Cyanogenmod, không phải của HTC hay Samsung. PS2: Ý tôi là các thiết bị chìm âm thanh ở phía bên kia thiếu mp3 / aac (tai nghe, v.v.)
ce4

7

Với các thiết bị Nexus 4 (5.0.1) hoặc Nexus 7 (2012) (4.4.4), có thể sử dụng chế độ nhà phát triển để có được btsnoop_hci.log. "Kích hoạt nhật ký rình mò Bluetooth HCI". Không cần thiết phải root thiết bị. Dường như cả hai thiết bị đều không cung cấp aptx. Tôi kiểm tra điều này với Moto Stream (không có aptx) và Philips AEA2500 (với aptx).


1
Tôi đang dùng CM 12.1 và lọ thuốc này cũng có sẵn cho tôi. Có lẽ nó là trên tất cả các điện thoại gần đây. Cảm ơn.
pedro_sland

4

[Tín dụng cho câu trả lời này chủ yếu thuộc về ewedel, người đã làm rõ rằng câu trả lời nằm trong tệp btsnoop_hci.log, sử dụng Wireshark; và prittstift69, để chia sẻ cách dễ dàng để tạo tệp nhật ký này.]

Đây là một hướng dẫn từng bước thân thiện với người mới, tóm tắt các câu trả lời đã được đưa ra, với một số giải thích về kết quả từ tôi.

Như prittstift69 và những người khác đã đề cập, bạn có thể "Bật nhật ký rình mò Bluetooth HCI" trong tùy chọn Nhà phát triển. Không cần phải làm theo cách tiếp cận phức tạp hơn được đề xuất bởi ewedel.

  1. Bắt đầu bằng cách tắt bluetooth TẮT trên thiết bị Android (Tôi sẽ gọi nó là 'điện thoại').

  2. Bật nhật ký rình mò Bluetooth HCI trong Tùy chọn nhà phát triển.

  3. BẬT Bluetooth trên điện thoại và kết nối nó với bộ thu Bluetooth (Tôi sẽ gọi nó là 'bộ thu'). Bước này giả định rằng máy thu đã được ghép nối với điện thoại trước đó.

  4. Phát nhạc trên điện thoại của bạn (lý tưởng nhất là tệp WAV hoặc FLAC không nén). Mười giây là tất cả những gì bạn cần. (Có lẽ thậm chí còn ít hơn)

  5. TẮT Bluetooth trên điện thoại.

  6. TẮT nhật ký rình mò Bluetooth HCI

  7. Chuyển tệp btsnoop_hci.log (Tôi tìm thấy nó trong / sdcard / Android / Data /) vào máy tính của bạn. Chạy wireshark trên máy tính của bạn và mở tệp btsnoop_hci.log

  8. Bộ lọc cho "btavdtp" (không có dấu ngoặc kép) Tìm kiếm tin nhắn từ điện thoại đến người nhận "Lệnh đã gửi - SetConfiguration ...." Đây là tin nhắn được điện thoại gửi đến người nhận với cấu hình cuối cùng được sử dụng cho âm thanh này sau khi bắt tay xong. Văn bản trong trường Thông tin sẽ cho bạn biết cấu hình cuối cùng là gì.

[SBC] Nếu là SBC, bạn có thể muốn biết bitpool là gì. Để thực hiện việc này, hãy xóa Bộ lọc cho btavdtp và tìm thông báo có Giao thức SBC và nhấp vào nó. Bên dưới, trong phần chi tiết, mở rộng thông tin Codec Bluetooth SBC. Sau đó mở rộng bất kỳ (hoặc tất cả) dữ liệu Khung. Ở đó, nó sẽ hiển thị rõ ràng Bitpool được sử dụng bởi Khung đó. Nếu là 35, rất có thể tốc độ mẫu của bạn là 44,1 kHz, bạn đang sử dụng Âm thanh chung và sử dụng cấu hình âm thanh SBC chất lượng trung bình ( http://soundexpert.org/news/-/bloss/bluetooth-audio -chất lượng-a2dp ). Tốc độ bit cho âm thanh nén là 229 kbits / giây SBC, đạt điểm 4,68 trong thử nghiệm của Sound Expert ( http://soundexpert.org/encoders-224-kbps ) có thể so sánh với mp3 khoảng 110-130 kbits / giây.

[APT-X] Nếu là APT-X, thì cả điện thoại và máy thu của bạn đều hỗ trợ APT-X và đó là những gì nó đang sử dụng. Giả sử 16 bit, 44,1kHz, codec đang chạy ở tốc độ 352kbit / giây.


"lý tưởng là tệp WAV hoặc FLAC không nén" Bạn có muốn phát MP3 để xem nó có gửi dưới dạng MP3 không, v.v.?
endolith

2
Chỉ khi mục tiêu của bạn là xem liệu A2DP có hỗ trợ mp3 ở cả hai bên không (một câu hỏi hợp lệ). Tuy nhiên, kinh nghiệm của tôi là hỗ trợ mp3 ở cả hai bên là rất hiếm (tôi chưa bao giờ thấy nó trên bất kỳ thiết bị nào của mình và tôi đã có khá nhiều). Vì vậy, ít nhất là với các thiết bị Android, các tùy chọn codec A2DP rất có thể của bạn là SBC và APTX. Phát tệp âm thanh không nén buộc điện thoại phải mã hóa lại.
klaberte

Tôi đã không viết một câu trả lời
endolith
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.