전화기에서 현재 지원하고있는 A2DP 코덱을 어떻게 확인합니까?


24

Bluetooth의 오디오 프로파일 A2DP는 여러 코덱을 지원합니다. 모든 장치는 SBC (서브 밴드 코덱)를 지원해야하며, MP3 및 AAC와 같은 추가 "선택적 코덱"또는 apt-X와 같은 "비 A2DP"코덱을 지원할 수 있습니다.

물론 이러한 코덱은 수신기가 지원하지 않는 경우 실제로 사용할 수 없으며,이 경우 두 장치가 모두 SBC로 대체됩니다.

  1. 하드웨어 / ROM에서 어떤 코덱을 지원하는지 어떻게 알 수 있습니까?
  2. 현재 사용중인 코덱을 어떻게 알 수 있습니까? (예를 들어, 다시 인코딩하지 않고 MP3 / AAC 파일을 직접 전달하는 경우에도 트랙에 따라 다름)

이 기사 는 "현대 안드로이드 폰은 AptX를 지원하기 때문에 안드로이드 사용자에게는 운이 좋다"고 말했다. 그러나 방법에 대한 설명은 없습니다.
endolith

답변:


10

Cyanogen 10.1 전화 (AOSP 4.2.2)에서는 블루투스 트래픽을 캡처 할 수 있습니다. 그런 다음이 캡처를 Wireshark에로드하고 협상 단계에서 페어링 된 오디오 출력 장치가 지원하는 코덱을 확인할 수 있습니다. OS가 무엇을 지원하는지 확실하지 않습니다.이 방법을 처음 실행했을 때 4.4 이상에서만 지원한다고 주장했지만 Doubleshot에서 CM을 사용하는 경우는 아닙니다. :-)

필수 설정 (루트 ~ 4.2.2 이상)이 있다고 가정하면 다음 단계가 수행됩니다.

  1. 휴대 전화를 관심있는 A2DP 장치와 페어링
  2. 휴대 전화에서 블루투스 비활성화
  3. BtSnoopLogOutput 설정을 기본값 인 false에서 true로 변경하여 /etc/bluetooth/bt_stack.conf 파일을 편집하십시오. 이를 위해 "Root Browser"설정을 활성화 한 후 ES File Explorer에서 시작한 ES Note Editor를 사용합니다.
  4. 모든 로깅 유형을 활성화 한 상태에서 CatLog 시작
  5. 휴대 전화에서 블루투스 사용
  6. 출력 장치와 페어링 된 후 선택한 플레이어와 오디오 스 니펫을 재생합니다 (아폴로 사용). 10 초 정도면 충분합니다.
  7. 블루투스를 다시 비활성화
  8. CatLog의 로깅을 중지하고 로그 파일을 SD 카드에 저장하십시오.
  9. [중요!] BtSnoopLogOutput을 다시 false로 변경하여 bt_stack.conf를 편집하십시오.
  10. 저장된 CatLog 파일과 함께 SD 카드 (/sdcard/btsnoop_hci.log)에서 현재 Wireshark 사본이 설치된 컴퓨터로 BT 캡처를 복사하십시오.
  11. 캡처 파일을 Wireshark에로드하고 "btavdtp"(따옴표 제외)의 Wireshark 디스플레이 필터를 설정하십시오. 이제 몇 개의 패킷 만 표시되고 AVDTP GetCapabilities 쿼리에 대한 출력 장치의 응답을 찾으면 답을 얻게됩니다.

CatLog 로그의 타임 스탬프와 캡처 타임 스탬프를 정렬하여 암시적인 로그 항목을 찾을 수도 있습니다. 나는 부부를 발견 하고이 게시물의 기반이되는 메모에 포함시키는 것을 현명하게 잊어 버렸습니다.

일단 시간이 더 있으면 앱으로이 단계를 약간 줄이려고하지만 시간이 얼마 남지 않았는지 아직 확실하지 않습니다. 한편, 위의 과정을 개선하기위한 제안은 환영합니다.


1
감사. 이것은 훌륭하게 작동했습니다. CatLog 로그에서 기능과 관련된 것을 찾지 못했습니다. 어쨌든 CM 4.4.2를 실행하고 LG HBS-730 헤드셋을 사용하는 Moto G (2013)에서 사용해보십시오. CM에는 독점 라이브러리가 없기 때문에 로그에 apt-X가 없습니다.
dvim

감사합니다, @Martynas, 잘 알고 있습니다. mp3에 대한 지원이 포함되어 있습니까? 내 전화가 mp3를 지원하는지 테스트하기에 좋은 대상이 무엇인지 궁금합니다. 자동차 라디오는 불행히도, A2DP 코덱 지원을 문서화 한 제품을 찾지 못했습니다. CatLog에 관해서는 실제 코덱 목록이 소스 코드를 검색하는 데 사용할 수있는 암시 메시지만큼 많을 것이라고 생각하지 않았습니다. 다른 날 ..
ewedel

1
따라서 Discover세 개의 오디오 싱크 를 반환했습니다. GetCapabilitiesACP SEID [2 - Audio Sink]포함 Service: Media Codec - Audio MPEG-1,2 Audio된 에 대한 응답 MP3: True입니다. 캡처 된 로그 파일을 github에 업로드했습니다 .
dvim

@Martynas에게 다시 감사합니다. 730은 더 나은 리뷰를 가지고 있지만 테스트를 위해 LG HBS-750을 사용했습니다. 730과 동일한 코덱 제품군. 리포지토리를 분기하고 여기 에 다른 캡처를 추가 했습니다 . 불행히도 두 캡처에서 전화는 mp3 대신 SBC를 사용하도록 선택합니다. 어떤 미디어 파일 형식을 사용했는지 확실하지 않지만 CM 4.2.2 테스트에서 128kb / s VBR mp3 (BT 대역폭을 강조하지 않도록 비트 전송률이 매우 작음)를 사용했습니다. 라이센스 문제 에 대해 ce4가 옳다고 생각하기 시작했습니다 .
ewedel

`/ etc / bluetooth / bt_stack.conf`의 eiditing은 작동하지 않는 것 같지만 개발자 설정에서 똑같은 설정이 있었고 작동했습니다. 귀하의 답변 덕분에 Parrot Zik 2가 SBC를 대부분 사용한다는 것을 알았습니다.
Zero

8

소스를 살펴보면 SBC (필수), MP3 (MPEG12), AAC (MPEG24) 및 Sony ATRAC의 코덱이 4 개 이상 있습니다.

./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 지원은 안드로이드에서 사용할 수없는 gstreamer에 의존하는 것 같습니다. 따라서 SBC가 A2DP를 부팅하는 유일한 옵션이라고 생각합니다.

PS : 대부분의 A2DP 장치는 특허 / 라이센스 문제 (Linux 포함)로 인해 MP3 / AAC에 대한 지원이 부족한 것 같습니다.


2
이것들은 3 개의 옵션 코덱입니다. 예, apt-X를 사용하는 Galaxy S III 와 같은 다른 코덱을 사용할 수 있습니다 . 그래도 하드웨어에서 인코딩을 제공한다고 생각 했습니까? 안드로이드는 MP3를 재생할 수 있으므로 특허 제한이 있는지 의심합니다.
endolith

2
SBC에 Android 장치에 전용 하드웨어 인코더가 있다고 생각하지 않습니다. 계산적으로 적당하지 않으므로 소프트웨어에서 완료된 것 같습니다. 적어도 출처는 그 사실을 나타냅니다. 추신 : 저는 HTC 나 삼성이 아닌 Cyanogenmod의 출처를보고 있습니다. 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에게갑니다. ewedel은 Wireshark를 사용하여 btsnoop_hci.log 파일에 답변이 있음을 분명히했습니다. 이 로그 파일을 작성하는 쉬운 방법을 공유하기위한 prittstift69]

이것은 초보자에게 익숙한 단계별 자습서로 이미 주어진 답변을 요약하고 나에게 결과를 해석합니다.

prittstift69 및 기타에서 언급했듯이 개발자 옵션에서 "Bluetooth HCI 스눕 로그 사용"을 사용할 수 있습니다. ewedel이 제안한 더 복잡한 접근법을 따를 필요가 없습니다.

  1. 안드로이드 장치에서 블루투스를 끄고 시작하십시오 ( '전화'라고 부릅니다).

  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"에 대한 필터 (인용 부호 없음) 전화기에서 수신자에게 보낸 메시지 검색 "Sent Command-SetConfiguration ...."이 오디오에 사용될 최종 구성으로 전화기에서 수신자에게 보내는 메시지입니다. 핸드 쉐이킹이 완료된 후. 정보 필드의 텍스트는 최종 구성이 무엇인지 알려줍니다.

[SBC] SBC 인 경우 비트 풀이 무엇인지 알고 싶을 수 있습니다. 이렇게하려면 btavdtp 용 필터를 제거하고 프로토콜 SBC가있는 메시지를 찾아 클릭하십시오. 아래의 세부 사항 섹션에서 Bluetooth SBC 코덱 정보를 펼치십시오. 그런 다음 프레임 데이터의 일부 또는 전부를 확장하십시오. 거기에는 해당 프레임에서 사용 된 비트 풀이 명확하게 표시되어야합니다. 35 인 경우 샘플링 속도가 44.1kHz이고 Joint Stereo를 사용하고 Middle Quality SBC 오디오 프로필 ( http://soundexpert.org/news/-/blogs/bluetooth-audio)을 사용하고있을 가능성이 높습니다 . -quality-a2dp ). 압축 된 오디오의 비트 전송률은 229 kbits / sec SBC이며, 이는 Sound Expert의 테스트 ( http://soundexpert.org/encoders-224-kbps ) 에서 약 4.68 점으로 약 110-130kbits / sec에 해당하는 mp3에 해당합니다.

[APT-X] APT-X 인 경우 전화기와 수신기가 모두 APT-X를 지원하므로 이것이 사용중인 것입니다. 16 비트, 44.1kHz를 가정하면 코덱은 352kbits / s에서 실행됩니다.


"이상적으로 압축되지 않은 WAV 또는 FLAC 파일"MP3 등을 MP3 등으로 보내는 지 확인하기 위해 MP3를 재생하고 싶지 않습니까?
endolith

2
A2DP가 mp3를 양쪽에서 지원하는지 확인하는 것이 목표 인 경우에만 (올바른 질문) 그러나 내 경험에 따르면 양쪽에서 mp3를 지원하는 경우는 거의 없습니다. 따라서 최소한 Android 기기의 경우 가장 가능성이 높은 A2DP 코덱 옵션은 SBC 및 APTX입니다. 압축되지 않은 오디오 파일을 재생하면 휴대 전화가 강제로 다시 인코딩됩니다.
klaberte

나는 답을 쓰지 않았다
endolith
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.