
저는 Linux를 처음 접했고 Bluetooth 스크립팅도 처음 접했습니다. 지금까지 내가 발견한 내용은 다음과 같습니다.
- Bluez는 기본 BT 스택입니다.
- BluezTools는 Bluez와 보다 쉽게 상호 작용하는 데 사용할 수 있는 유틸리티 세트입니다.
- DBus는 Bluez가 하드웨어와 직접 상호 작용하는 동안 연결하는 인터페이스입니다.
- PulseAudio는 시스템에서 오디오 생성을 담당하는 하위 시스템입니다.
이것은 의미가 있습니다. 따라서 BlueTooth 헤드폰 세트가 있다고 가정해 보겠습니다. 제가 기대하는 것은 (모두 페어링 및 신뢰 후) BT 헤드폰의 특정 프로필에 직접 연결할 수 있는 명령을 실행할 수 있다는 것입니다.
내가 염두에 두고 있는 기술 경로는 다음과 같습니다.
- 헤드폰을 켜십시오.
- 다음과 같은 BluezTools 명령을 실행합니다.bt-오디오 -c
- 장치가 내가 원하는 서비스에 연결될 때까지 기다립니다.
- PulseAudio는 이제 새로운 출력 장치를 선택해야 합니다.
- 오디오를 원래의 오디오에서 새 출력 오디오(BT 헤드폰)로 변경하려면 다른 명령을 실행하십시오.
- 원활한 청취 경험을 즐겨보세요.
이 모든 것이 논리적으로 보이지만 실제 구현은 이와 같지 않으며 WHY를 찾고 있으므로 문제를 더 잘 이해하고 해결하려고 노력할 수 있습니다.
실제로 일어나는 일은 다음과 같습니다.
- 헤드폰을 켜십시오.
- 다음과 같은 BluezTools 명령을 실행합니다.bt-오디오 -c
- 장치가 내가 원하는 서비스에 연결될 때까지 기다립니다.
- PulseAudio는 이제 새로운 출력 장치를 선택해야 합니다.
- PulseAudio 명령을 실행하여 오디오 프로필을 전화 품질에서 고품질로 변경하세요.
이에 대해 좀 더 확장해 보겠습니다. 블루투스 헤드셋은 2가지 품질 모드(전화 및 고성능)를 제공합니다. 단 1개만 음악을 듣는 데 정말 적합합니다.
BT 헤드폰은 각 품질 모드를 서비스로 노출할 것으로 예상하는데, 맞나요? 이 가정은 틀릴 수도 있지만 다음과 같은 것을 기대합니다.
bt-audio -c highFidelityProfile
또는
bt-audio -changeProfile highFidelityProfile
대신 Bluez는 장치에 대한 RAW 연결만 처리하고 거기에서 다음을 실행해야 하는 것 같습니다.pacmd 세트-카드-프로필 $INDEX a2dp
이것은 근본적으로 잘못된 것 같습니다. 오디오 하위 시스템의 품질 관리가 필요한 이유는 펄스나 alsa 또는 기타 사운드 하위 시스템에 대해 다른 구현이 필요한 이유는 무엇입니까?
내가 무엇을 놓치고 있나요? Bluez / BluezTools 등을 사용하여 특정 프로필에 직접 연결할 수 없는 이유는 무엇입니까?
답변1
Bluetooth 연결은 단순한 유선 헤드폰이나 스피커에 비해 대기 시간이 상당히 깁니다. 또한 연결 지연 시간은 Bluetooth 수신기의 속성과 사용자의 이동에 따른 무선 신호 강도에 따라 달라질 수 있습니다.
애플리케이션과 PulseAudio 간의 인터페이스는 "여기 PCM 오디오 데이터가 있습니다. 이것을 재생해 보세요."처럼 간단할 수 있습니다. 그러나 이는 더 복잡할 수도 있습니다. "여기 PCM 오디오 데이터가 있습니다. 이것을 재생하고 50ms마다 얼마나 멀리 있는지 알려주세요. 그러면 비디오 스트림과의 립싱크가 맞지 않는 것 같으면 건너뛰라고 알려드릴 수 있습니다. 아, 그리고 데이터에 하드웨어가 직접 지원하지 않는 샘플링 속도가 있으므로 리샘플링도 해야 합니다." 후자의 경우, PulseAudio는 주어진 시간에 오디오 데이터가 실제로 얼마나 멀리 재생되었는지 정확하게 결정하기 위해 애플리케이션에 오디오 장치로부터 일부 피드백을 제공할 수 있어야 합니다.
결과적으로 PulseAudio가 Bluetooth 오디오 처리에 상당히 깊이 관여하는 것이 합리적입니다. 개입 레이어가 많을수록 정확한 피드백을 유지하지 않고 데이터가 버퍼링되어 립싱크가 손실될 가능성이 더 커집니다.
실제로 PulseAudio가 존재하기 전에는 Bluetooth 오디오용 ALSA 백엔드가 있었지만 더 이상 사용되지 않습니다. 문제는 당시 ALSA의 인터페이스가 주로 기존 사운드 카드용으로 설계되었기 때문에 Bluetooth의 잠재적으로 가변적인 오디오 대기 시간을 처리하는 것이 어려웠다는 것입니다.
PulseAudio의 인터페이스는 처음부터 다양한 사운드 장치를 처리하고 스트림이 재생되는 동안 오디오 스트림을 전환하도록 설계되었으므로 오디오 대기 시간에 대한 상당히 진보된 개념도 내장되어 있는 것 같습니다.
예, PulseAudio 모듈이 아닌 BlueZ에서 구현되었을 수도 있습니다. 하지만 그렇다면 BlueZ는 애플리케이션을 위한 오디오 인터페이스를 제공해야 했을 것입니다. 그리고 PulseAudio는 시스템의 "모든" 오디오를 처리하려고 하기 때문에(현재 재생 중인 오디오를 스피커에서 Bluetooth로 또는 그 반대로 즉시 전송할 수 있도록) PulseAudio와 인터페이스해야 합니다. 어쨌든 어쨌든.
답변2
나는 마침내 해결책을 찾았다고 생각합니다(두 개의 Linux Mint 시스템에서 테스트됨). 하지만 왜 다음과 같은 정확한 단계를 따라야 하는지는 모르겠습니다.
초기 단계:
- 블루맨 설치:sudo apt-get 설치 블루맨
- 블루투스 파일 편집:sudo nano /etc/bluetooth/main.conf마지막에 다음 줄을 추가하세요.비활성화=헤드셋
각 실행에 대해 다음을 수행합니다.
- 블루투스 서비스를 다시 시작하세요.sudo 서비스 블루투스 다시 시작
- 시스템 트레이에서 blueman의 장치 열기또는유형블루맨 매니저터미널에서
- 찾다블루투스 오디오 장치용
- 장치를 마우스 오른쪽 버튼으로 클릭하고 다음과 같이 연결하십시오.헤드폰
- 이동소리시스템 설정에서
- 장치를 한 번 클릭하여 선택하십시오.
- 이제 다시 가보세요블루맨 매니저
- Bluetooth 장치를 마우스 오른쪽 버튼으로 클릭하고 오디오 프로필을 다음으로 설정합니다.고화질 재생(A2DP 싱크)
단계 중 하나라도 놓친 경우 1단계로 이동하여 다시 시도하세요. 이것이 효과가 있는지 알려주세요.
편집하다: Linux Mint 19에서는 기본 블루투스 관리자가 High Fidelity Playback과 완벽하게 작동하며 구성이 전혀 필요하지 않습니다!!
답변3
구성에 따라 다를 수 있지만 다음은 잘 테스트된 몇 가지 명령입니다.
장치를 신뢰할 수 있는 것으로 설정해야 합니다. GUI를 통해 수행할 수 있습니다.
sdptool 찾아보기대상 장치에서 사용 가능한 프로토콜 및 채널에 대한 많은 세부 정보를 제공합니다.
동시 오디오 출력을 사용할 때 Bluetooth a2p 오디오 싱크를 설정하는 것이 더 쉽습니다. 설정하려면 도구를 참조하세요.파프레프.
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