pulseaudio가 BT 장치에 대한 음질 연결을 처리하는 이유는 무엇입니까?


11

저는 Linux를 처음 사용하고 Bluetooth 스크립팅을 처음 사용합니다. 지금까지 내가 발견 한 것은 다음과 같습니다.

  1. Bluez가 기본 BT 스택입니다.
  2. BluezTools는 Bluez와보다 쉽게 ​​상호 작용하는 데 사용할 수있는 유틸리티 세트입니다.
  3. DBus는 Bluez가 하드웨어와 직접 상호 작용하면서 연결하는 인터페이스입니다.
  4. PulseAudio는 시스템에서 오디오를 생성하는 서브 시스템입니다.

이것은 말이됩니다. BT 헤드폰의 특정 프로파일에 직접 연결할 수있는 명령을 실행할 수있는 BlueTooth 헤드폰 세트 (페어링 및 트러스트 후)가 있다고 가정하겠습니다.

내가 생각한 기술 경로는 다음과 같습니다.

  1. 헤드폰을 켭니다.
  2. bt-audio -c 와 같은 BluezTools 명령을 실행하십시오.
  3. 기기가 서비스에 연결될 때까지 기다립니다.
  4. PulseAudio는 이제 새로운 출력 장치를 선택해야합니다
  5. 다른 명령을 실행하여 오디오를 새로운 출력 오디오 (BT 헤드폰)로 변경하십시오.
  6. 원활한 청취 경험을 즐기십시오.

이 모든 것이 논리적으로 보이지만 실제 구현은 이와 같지 않으며 WHY를 찾고 있으므로 문제를 더 잘 이해하고 해결할 수 있습니다.

이것은 실제로 일어나는 일입니다.

  1. 헤드폰을 켭니다.
  2. bt-audio -c 와 같은 BluezTools 명령을 실행하십시오.
  3. 기기가 서비스에 연결될 때까지 기다립니다.
  4. PulseAudio는 이제 새로운 출력 장치를 선택해야합니다
  5. PulseAudio 명령을 실행하여 오디오 프로파일을 전화 품질에서 고 충실도로 변경하십시오.

이것에 대해 조금 확장하겠습니다. 블루투스 헤드셋은 2 가지 품질 모드 (전화 및 충실도)를 제공합니다. 음악 감상에는 1 만 적합합니다.

BT 헤드폰이 각 품질 모드를 서비스로 제공 할 것으로 예상됩니다. 맞습니까? 이 가정은 틀릴 수 있지만 다음과 같은 것을 기대합니다.

bt-audio -c highFidelity 프로필

또는

BT- 오디오 -changeProfile highFidelityProfile

대신 Bluez는 장치에 대한 RAW 연결을 처리하는 것으로 보이며 거기에서 다음을 실행해야합니다 : pacmd set-card-profile $ INDEX a2dp

이것은 근본적으로 잘못된 것 같습니다. 오디오 서브 시스템의 품질 관리가 왜 펄스 나 알사 또는 다른 사운드 서브 시스템에 대해 다른 구현이 필요한가?

내가 무엇을 놓치고 있습니까? Bluez / BluezTools 등을 사용하여 특정 프로파일에 직접 연결할 수없는 이유는 무엇입니까?

답변:


3

블루투스 연결은 단순한 유선 헤드폰이나 스피커에 비해 대기 시간이 상당히 깁니다. 또한, 블루투스 리시버의 속성 및 사용자가 이동할 때 무선 신호 강도에 따라 연결 대기 시간이 달라질 수 있습니다.

응용 프로그램과 PulseAudio 간의 인터페이스는 "여기 PCM 오디오 데이터가 있습니다. 재생"과 같이 간단 할 수 있습니다. 그러나 더 복잡 할 수도 있습니다. "PCM 오디오 데이터가 있습니다. 재생하고 50ms마다 알려주십시오. 비디오 스트림과 립싱크에서 떨어지는 것처럼 보일 경우 건너 뛸 수 있습니다. 재생 중입니다. 아, 그리고 하드웨어에서 직접 지원하지 않는 샘플링 속도를 가진 데이터가 있으므로 데이터도 리샘플링해야합니다. " 후자의 경우, PulseAudio는 오디오 데이터가 애플리케이션에서 실제로 재생되는 시간을 정확하게 결정하기 위해 애플리케이션에 오디오 장치의 피드백을 제공 할 수 있어야합니다.

결과적으로 PulseAudio는 Bluetooth 오디오 처리에 상당히 깊이 관여하는 것이 합리적입니다. 계층이 많을수록 정확한 피드백을 유지하지 않고 데이터를 버퍼링하여 립싱크를 잃을 가능성이 커집니다.

실제로 PulseAudio가 존재하기 전에는 Bluetooth 오디오에 대한 ALSA 백엔드가 있었지만 더 이상 사용되지 않습니다. 문제는 당시 ALSA의 인터페이스가 주로 기존 사운드 카드 용으로 설계 되었기 때문에 Bluetooth의 가변 오디오 지연 시간을 처리하는 것이 어려웠습니다.

PulseAudio의 인터페이스는 다양한 사운드 장치를 처리하고 스트림이 재생되는 동안 오디오 스트림을 전환하기 위해 처음부터 설계되었으므로 오디오 대기 시간에 대한 고급 개념이 내장되어있는 것 같습니다.

예, PulseAudio 모듈이 아닌 BlueZ에서 구현되었을 수 있습니다. 그러나 BlueZ는 애플리케이션을위한 오디오 인터페이스를 제시해야했습니다. PulseAudio는 현재 스피커에서 재생중인 오디오를 Bluetooth로 또는 그 반대로 전송하기 위해 시스템의 오디오를 "모두"처리하려고하므로 PulseAudio와 인터페이스해야합니다. 어쨌든.


2

나는이 정확한 단계를 따라야하는 이유를 모르지만 마침내 해결책 (두 개의 Linux Mint 시스템에서 테스트 됨)을 발견했다고 생각합니다.

초기 단계 :

  1. Blueman 설치 : sudo apt-get install blueman
  2. 블루투스 파일 편집 : sudo nano /etc/bluetooth/main.conf끝에이 줄을 추가하십시오. Disable = Headset

각 실행에 대해 :

  1. 블루투스 서비스 재시작 : sudo service bluetooth restart
  2. 시스템 트레이에서 blueman의 장치를 열거 터미널에서 blueman-manager 를 입력 하십시오.
  3. 블루투스 오디오 장치 검색
  4. 기기를 마우스 오른쪽 버튼으로 클릭하고 헤드셋으로 연결
  5. 시스템 설정에서 소리 로 이동
  6. 한 번 클릭하여 장치를 선택하십시오
  7. 이제 다시 blueman-manager 로 가십시오
  8. 블루투스 장치를 마우스 오른쪽 버튼으로 클릭하고 오디오 프로파일을 High Fidelity Playback (A2DP Sink)으로 설정하십시오

단계를 놓치면 1 단계로 이동하여 다시 시도하십시오. 이것이 작동하는지 알려주세요.

편집 : Linux Mint 19에서 기본 블루투스 관리자는 구성이 전혀 필요없는 고 충실도 재생과 완벽하게 작동합니다 !!


0

구성에 따라 다를 수 있지만 다음은 잘 테스트 된 명령입니다.

장치를 신뢰할 수있는 것으로 설정해야합니다. GUI를 통해 수행 할 수 있습니다.

sdptool browse 는 대상 장치에서 사용 가능한 프로토콜 및 채널에 대한 많은 세부 정보를 제공합니다.

동시 오디오 출력을 사용할 때 블루투스 a2p 오디오 싱크를 설정하는 것이 더 쉽습니다. 설정하려면 paprefs 도구를 참조하십시오 .

sudo apt install bluetooth 
sudo apt install bluez bluez-tools
sudo apt install rfkill rfcomm

장치를 시작하십시오. 어쨌든 hci0이어야합니다.

sudo hciconfig hci0 up

원격 장치를 나열하십시오.

sudo rfkill list

블루투스 네트워크 목록 :

hcitool scan

사용 가능한 프로토콜 찾아보기 :

sdptool browse 43:23:00:02:23:A7

장치를 연결하십시오.

sudo rfcomm connect hci0 43:23:00:02:23:A7

파일을 보내십시오 :

sudo bt-obex -p 43:23:00:02:23:A7 ~/images/tof.png

파일 받기 :

sudo bt-obex -s /

채널 (여기서는 채널 19)의 데이터를 스캔 / 대기하고 홈 폴더의 dump 파일에 데이터를 씁니다.

sudo apt install bluez-hcidump

hcidump -i hci0 -O 19 -w ~/dump

대안 : 때때로 페어링에 유용합니다.

sudo apt install bluetoothctl

bluetoothctl
power on
connect 43:23:00:02:23:A7
trust 43:23:00:02:23:A7
info 43:23:00:02:23:A7

[bluetooth]# agent on
[bluetooth]# default-agent
[bluetooth]# discoverable on
[bluetooth]# pairable on
[bluetooth]# scan on
[bluetooth]# pair 43:23:00:02:23:A7
[agent]PIN code: ####
[bluetooth]# trust 43:23:00:02:23:A7
[bluetooth]# connect 43:23:00:02:23:A7
[bluetooth]# info 43:23:00:02:23:A7
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.